Перейти к публикации

Рекомендованные сообщения

В дистрибутиве публикуются только Stable версии. Пока что мы тестируем то, что выложено в ПЕРВОМ посте.

Обновление до версии 0.04

Ссылка на сообщение
Поделиться на других сайтах

IT-Security,

я бы порекомендовал бы такие функции compile_page и load префиксом cache, потому что загрузок и компеляций может быть потом еще много, поэтому все лучше обозначать сразу, что эта функция относится к кешу, а эта нет.

Ссылка на сообщение
Поделиться на других сайтах

Чем вызвана необходимость создания целых три функции на одну и туже задачу?

функции load_from_cache, load_compiled_page, load читают кэш, по сути на одну и туже операцию три функции, не думаю что такая путаница нужна, проще сделать одну функцию с возможностью задания необязательных доп. параметров, не стоит раздувать API дублями

Вообще имхо но функции работы с кэшем нужно уменьшить и делать более универальными, 6 функций работы кэшем, чать из которых дублируются, это многовато.

модификаторы private, Public, наколько мне известно появилиь в php версии 5, не будет ли ошибок в работе API с этими модификаторами на более ранних версиях PHP?

Изменено пользователем newname
Ссылка на сообщение
Поделиться на других сайтах

API заточен под PHP5 и выше.

Насчёт функций - я подумаю над этим. load убирать не буду. Он считывает всегда кэш, игнорирую таймаут.

Остальное - можно конечно сделать одну функцию.

Ссылка на сообщение
Поделиться на других сайтах

API заточен под PHP5 и выше.

А вот это недотаток, много скриптов ДЛЕ стоит на php 4, поэтому лучше всетаки делать совместимый с этой версией класс.

Насчёт функций - я подумаю над этим. load убирать не буду. Он считывает всегда кэш, игнорирую таймаут.

Можно добавить необязательный параметр, ели задан то смотрим таймаут, если нет то игнорируем, дубли в функциях это только лишняя путаница, да и вообще не люблю лишнего кода :)

Ссылка на сообщение
Поделиться на других сайтах

На счёт

// Users group - int

// Return Array or false

$api->take_users_by_group($group_id); // Реализовано

Может быть подумать на счёт LIMIT в запросе? Я думаю пригодилось бы...

А то если выбрать всех пользователей из группы --- а их там 15 тысяч... ну как бы много... Лимит помог бы

P.s> так же можно посмотреть и другие функции на счёт этого ...

Ещё я бы немного переделал конструктор:

private cache_dir = ENGINE_DIR."/cache/";

function DLE_API($cache_dir= '') {

	if ($cache_dir != '') $this->cache_dir = ENGINE_DIR . $cache_dir;

	$this->show_cached_files();

	return true;

}

А там дело барина, всё равно спасибо, хоть как то упростит жизнь :-)

Изменено пользователем DemanZ
Ссылка на сообщение
Поделиться на других сайтах

Сегодня выпущу версию 0.05 ночью...

Обновления:

- Обновлённая функция load_table

- Добавлены лимиты к массовым операциям

- Пересмотрены функции работы с кэшем (Их теперь будет две. load и save и в зависимости от типа данных будет делаться нужное)

- Убраны модификаторы доступа (Привет php4...)

- Добавлена проверка форматы почты в внешней регистрации и в изменении почты

- take_news() (отдаёт массив данных)

Ссылка на сообщение
Поделиться на других сайтах

- Пересмотрены функции работы с кэшем (Их теперь будет две. load и save и в зависимости от типа данных будет делаться нужное)

Ещё хорошо бы, стразу предусмотреть кэшь который держится по времени...

вот пример работы функции

	function dle_cache_time($prefix, $cache_time = 24, $cache_id=false, $member_prefix=false){

	  global $config, $is_logged, $member_id;

		if (!is_int($cache_time)) $cache_time = 24;

		if ($config['allow_cache'] != "yes") return false;

		if ($is_logged) $end_file = $member_id['user_group']; else $end_file = "0";

		if (!$cache_id) {

			$filename = ENGINE_DIR.'/cache/'.$prefix.'.tmp';

		} else {

			$cache_id = totranslit ($cache_id);

			if ($member_prefix)

				$filename = ENGINE_DIR."/cache/".$prefix."_".$cache_id."_".$end_file.".tmp";

			else

				$filename = ENGINE_DIR."/cache/".$prefix."_".$cache_id.".tmp";

		}

		if (file_exists($filename)){

			$cr_time = filemtime($filename);

			if ((time() - $cr_time) > ($cache_time * 60 * 60)) {

				@unlink($filename);

				return false;

			}

		}

		return @file_get_contents($filename);

	}

UPDATE

З.Ы. сори -- сразу не заметил что уже есть

Изменено пользователем DemanZ
Ссылка на сообщение
Поделиться на других сайтах

Физически не успел закончить =(

Успел сделать:

1) Убраны модификаторы доступа

2) Обновлённая функция load_table:

- Добавлено: $start = 0, $limit = 0, $sort = '', $sort_order = 'desc'

3) В массовые операции добавлен $limit (По умолчанию не лимитируется)

4) Пересмотрены функции работы с кэшем:

$dle_api->load_from_cache ($filename, $timeout, $type = 'text');

$type может быть text или array.

Если выбран array, то отдаётся массив, если text - то или содержимое кэша или сериализованный массив

$dle_api->save_to_cache ($filename, $vars);

Если $vars - Array, то сохраняется сериализованный массив

Если нет - сохраняется AS IS.

5 - file_put_contents заменён на fopen() + chmod() + fwrite() + fclose() (Совместимость с PHP4)

Изменено пользователем IT-Security
Ссылка на сообщение
Поделиться на других сайтах

Меня ждёт бессонная ночь, но я это сделал...Версия 0.05 опубликована :)

Много вкусностей :)

Концепция архитектуры дополнительных полей API:

Имеем две таблицы.

Первая:

CREATE TABLE IF NOT EXISTS `dle_alt_fields` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(50) NOT NULL,

  `alt_name` varchar(50) NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
id - уникальный id поля name - имя на русском или английском языке alt_name - название поля на латинице Вторая:
CREATE TABLE IF NOT EXISTS `dle_alt_fields_values` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `field_id` int(11) NOT NULL,

  `field_value` varchar(255) NOT NULL,

  `link_id` int(11) NOT NULL,

  PRIMARY KEY (`id`),

  KEY `field_id` (`field_id`,`link_id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
id - уникальный id записи field_id - идентификатор дополнительного поля field_value - значение поля (не более 255 знаков!) link_id - связующий идентификатор. А теперь пример. Итак...Есть у нас модуль SMS-голосования за новости например. Чтобы не вносить изменения в структуру таблиц DLE делаем следующее: Делаем доп. поле - "Количество голосов" -> "news_sms_votes" Далее скриптом обращаемся к таблице и видим, что выборка ничего не дала. Заносим данные, если нужно (Это уже от написания скрипта зависит) Если же записи будут, то просто получаем значение. Примерно это выглядит так:
 function take_field_value ($alt_name, $link_id)

  {

	if (!$this->fields) $this->load_fields();

	// Получаем id поля по id

	  if (!$this->fields[$alt_name])

		{

		  return false;

		}

	  else

		{

		  $id = $this->fields[$alt_name]['id'];

		  // Получаем данные запросом по ID

			if (!$dannie) return 0;

			else

			  {

				return $dannie['field_value'];

			  }

		}

  }

function add_field ($name, $alt_name)

  {

	// Вставка нового поля

  }

function del_field ($id)

  {

	// Грохаем все позиции с этим полем, а потом и само поле

  }

function edit_field ($id, $new_name, $new_altname)

  {

	// Редактирование признака

  }

function add_field_value ($alt_name, $value, $link_id)

  {

	// Добавление значения

  }

function edit_field_value ($alt_name, $value, $link_id)

  {

	// Редактирование поля

  }

function del_field_value ($alt_name, $link_id)

  {

	// Удаление поля

  }

function change_field_rel ($alt_name, $link_id)

  {

	// Меняем линковочный параметр

  }

Идея вот такая...Обсуждаем...

Ссылка на сообщение
Поделиться на других сайтах

В следующей версии будет разработан Standalone mode.

Что это такое?

api будет доступно для внешнего вызова примерно вот так:

http://www.site.ru/api.php?key=тут_ключ&func=функция

Остальные параметры в зависимости от функции.

Для чего это нужно?

В дальнейшем планируется сильно расширить функционал по работе с новостями, опросами и т.п.

Грубо говоря при желании Вы сможете вставить результат работы опроса на одном сайте на другой.

Тоже самое с новостями.

Далее Вы сможете спокойно проверять информацию на одном сайте с информацией на другом.

Ссылка на сообщение
Поделиться на других сайтах

И ниодного комментария :)

В дальнейшем планируется запускать API в нескольких режимах.

1 - Standart - отдаётся информация внутри скрипта, когда мы просто вставляем API

2 - HTTP Text (Standalone) - когда информация выдаётся по протоколу HTTP через GET запросы

3 - HTTP XML (Standalone) - когда информация выдаётся по протоколу HTTP через GET запросы в виде XML

Изменено пользователем IT-Security
Ссылка на сообщение
Поделиться на других сайтах

Добрый вечер все ДЛЕшникам, давно тут небыл, но увидел что в ДЛЕ задумали делать API и не мог пройти мимо.

Первое что вызвало недоумение, зачем ограничивать себя как программиста и писать код на старой версии ПХП, уже ПХП 6.0 находится в бета тестирования, а вы никак не можете на ПХП 5.* перейти.

Второе, как то странно что все находится в одном классе, надо бы добавить некое пространство имен и разделить на несколько классов, например в АПИ классе сейчас в основном методы для работы с пользователями и забрел один метод для посылки ПМ, по мойму ему не место с юзерами. Почему бы не организовать pattern factory и через него добавлять то что нам надо.

А так затеяли хорошее дело, для ДЛЕ это только на пользу.

Ссылка на сообщение
Поделиться на других сайтах

Я не пользуюсь паттернами, а пхп4 из-за того, что сам DLE работает на пхп4. Когда Владимир откажется от поддержки пхп4, то перепишу класс.

Насчёт большого количества классов - изначально задумано, что человек вставляет один файл и получает весь функционал.

Если есть желание помогать с разработкой - велком ко мне в ICQ.

IT-Security,

А может и SOAP еще прикрутим )

К сожалению не работал с ним :)

Ссылка на сообщение
Поделиться на других сайтах

Я не пользуюсь паттернами

А зря вы их игнорируете, хароший тон использовать паттернс, добовляет больше понимания логики и задумки человека писавшего класс.

а пхп4 из-за того, что сам DLE работает на пхп4. Когда Владимир откажется от поддержки пхп4, то перепишу класс

ПХП4 есть зло для ООП, потомутчо не дает реализовать ООП в полной его красе. В докозательство этому могу написать критику в сторону использования класса БД, конечно если Владимир согласитса.

Насчёт большого количества классов - изначально задумано, что человек вставляет один файл и получает весь функционал.

И это не есть харошее решение, по мере роста функцыональности, выростит и кусок памяти каторый будет занимать этот класс. Предположим что мне надо функцыонал по работе с пользователями, зачем мне засорять память остальным функцыоналом каторый мне не нужен.

Если есть желание помогать с разработкой - велком ко мне в ICQ.

Срадостью но когда в ДЛЕ войдет ПХП 5.*, увы я уже не могу отказаться от всех удобств в которые дает ПХП 5

А может и SOAP еще прикрутим )

Во первых зачем это в дле, дле не работает с сервесами.

Во вторых зачем изобретать велосипед, есть прекрасная реализация работы с сервисами через SOAP в ZendFrameWork

Ссылка на сообщение
Поделиться на других сайтах

ммм..Есть идея сделать api_php4.class.php и api_php5.class.php

Инициализатор написать несложно (Пример - MySQL и MySQLi)

Ссылка на сообщение
Поделиться на других сайтах

ммм..Есть идея сделать api_php4.class.php и api_php5.class.php

Инициализатор написать несложно (Пример - MySQL и MySQLi)

такая реализация какраз подходит для pattern factory (советую почитать на досуге).

Я просто не понимаю для чего каждый раз вызывать проверку на версию ПХП, для примера можно посмотреть как реализована подключение нужного класса для работы с БД в Zend Framework (Zend_Db)

Для решение этой проблемы всего то нужно добавть еще один элемент в массив конфигурации при установки скрипта.

Да к томуже писать один и тотже метод 2-а раза из за версии ПХП, поменьшей мере глупо.

P.S. Кто то вообще видел статистику хостинговых компаний до сих пор использующих ПХП < 5 без опции переключения на ПХП 5?

Ссылка на сообщение
Поделиться на других сайтах

90% Windows хостинга на php4 (Как минимум Агава)

Классы есть смысл разнести когда будет функционал. Вообще как я смотрю по активности народа - им это не нужно =)

Все ныли и плакали, что так трудно писать простейшие модули под DLE - им даёшь решение, на которое гробишь своё ЛИЧНОЕ время - а они даже не могут протестировать и высказать пожелания.

Я подожду до версии 0.1, если активность будет такая же, то разработка API будет завершена на 0.1, так как писать его для самого себя смысла я не вижу, учитывая написание своего движка. Впринципе версии 0.1 будет достаточно для написания модулей. Главное успеть до версии DLE 8.1 (ну или какая там будет), чтобы было включено в дистрибутив. Большинство людей даже не понимают зачем API нужно. Они путают сниппеты и API.

Виной всему WordPress в котором разработчики назвали неправильно то, что разработали.

Меня удивляет, неужели люди думают, что чем больше будут писать про автоустановку модулей, тем скорее она появится?Да не будет её :)

Как говорится расслабьтесь и получайте удовольствие :)

Завтра выложу небольшой трюк, который позволит чуть-чуть попроще ставить модули в engine.php

Ссылка на сообщение
Поделиться на других сайтах

Ну я тогда подожду признаки появления ПХП 5 в дле, серавно больше не пишу модули для ДЛЕ, не благодарное это дело. Но развитию ДЛЕ серавно хочу помочь.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...