CMS DataLife Engine - Система управления сайтами

Recommended Posts

Доброе время суток!

Начиная с версии 8.0 DLE будет комплектоваться API разработчика.

API будет постоянно расширяться и пока отвечает за получение/смену определённых данных, переведения в другую группу и отправки ПМ пользователю.

Также авторизация и внешняя регистрация (Актуально для интеграций).

Структура АПИ всегда будет оставаться одинаковой, будет добавляться только новый функционал.

Я буду переносить API с одной версии на другую и высылать Stable релизы Владимиру.

Все unstable/test версии я буду выкладывать здесь.

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

Версия 0.08 УЖЕ интегрирована в DLE v8.2

box.png

ToDo List:

- Переделать функцию очистки кэша, добавить возможность чистить engine/cache/system

- Помимо отправки PM пользователю, отправка сообщения на ящик пользователя.

- Добавить новый вариант работы API - HTTP API

- Добавить новый вариант работы API - XML API

- Рассылка PM и E-Mail сообщений по группе или глобально

Обновление 0.09

Скачать: v0.09

Добавлен метод update_user ($user_id, $vars = Array())

/**

* Изменение пользователя

* @param $user_id int - ID пользователя

* @param $vars array - Массив вида ключ->значение. Все ключи будут заменены на значения.

* @return null

*/

Позволяет реализовывать пополнение баланса или обновление любого другого поля.

В метод change_user_group($user_id, $new_group, $timelimit = 0) добавлен необязательный параметр $timelimit

/**

* Изменение группы пользователя

* @param $user_id int - ID пользователя

* @param $new_group int - ID новой группы пользователя

* @param $timelimit int - Время присутствия в группе

* @return bool - true в случае успеха и false если указан ID несуществующей группы

*/

Поправлена функция смены группы.

Добавлен параметр prolong.

/**

* Изменение группы пользователя

* @param $user_id int - ID пользователя

* @param $new_group int - ID новой группы пользователя

* @param $timelimit int - Время присутствия в группе

* @param $prolong bool - Продлить время в группе

* @return bool - true в случае успеха и false если указан ID несуществующей группы

*/

Итак. Если:

change_user_group($user_id, $new_group, 3600);

На час кидает user_id в группу нужную.

Если:

change_user_group($user_id, $new_group, 3600, true);

На час продлит пользователю его членство в группе

Версия обновлена до 0.09

Также добавлено текущее время с коррекцией в $dle_api->_TIME

Обновление 0.08

- Добавлена функция подключения модулей к админ-панели

- Добавлена функция отключения модулей от админ-панели

- Добавлена функция смены прав для модулей к админ-панели

Обновление 0.07

- Документированы исходники

- Мелкие правки кода

- Исправлена функция очистки кэша

Обновление 0.05 Beta:

- Обновлён readme

- Функция редактирование конфигурации: $dle_api->edit_config($key, $value) $key - может быть массивом, тогда $value указывать не нужно

- Расширение функционала $dle_api->load_table, добавлено: $start, $limit, $sort, $sort_order

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

- Добавлена функция получения новостей ($dle_api->take_news ($cat, $fields = "*", $start = 0, $limit = 10, $sort = 'id', $sort_order = 'desc'))

- Полная совместимость с PHP4 (Убраны модификаторы доступа и функции от php5)

- Пересмотрены функции кэширования

- Поправлены мелкие ошибки кода

Версия 0.04 unstable

Изменения:

- Служебная функция load_table для загрузки данных

- Во все функции получения данных добавлен необязательный параметр $select_list = "*"

- Поправлены мелкие баги

- Поправлена функция отправки ПМ (Увеличивался счётчик всем)

- Поправлена функция изменения имени

- У методов и значений расставлены модификаторы (public, private)

- Расширенное управление кэшем:

- Сохранение в локальный кэш массива ($dle_api->save_to_cache (массив, имя_кэша);)

- Сохранение в локальный кэш текста ($dle_api->compile_page (имя_кэша, данные);)

- Загрузка из локальныого кэша массива ($dle_api->load_from_cache (имя_кэша, время_жизни_в_секундах);)

- Загрузка из локальныого кэша текста ($dle_api->load_compiled_page (имя_кэша, время_жизни_в_секундах);)

- Очистка локального кэша (Если передаём GLOBAL или пустоту - чистит весь кэш) ($dle_api->clean (имя_кэша);)

- Принудительная перестройка кэша, данные могут быть или массивом или текстом ($dle_api->rebuild (имя_кэша, данные);)

- Принудительная загрузка кэша ($dle_api->load (имя_кэша);)

- Обновлён readme

- Поправлена функция смены email, добавлена проверка уникальности - Спасибо Vladimir Gorobets

- Поправлена функция очистки кэша, поставлены @ в unlink - Спасибо Vladimir Gorobets

- Поправлена функция форсированной загрузки кэша - Спасибо Vladimir Gorobets

С уважением Сергей.

ToDo:

- Работа над новым типом дополнительных полей

- Работа над random() в выборке новостей

Edited by IT-Security
  • Upvote 7

Share this post


Link to post
Share on other sites

Если я в тему.

Файл синхронизации (класс)

регистрация, авторизация пользователей и т.п. в этом духе.

ps, RedRat

Share this post


Link to post
Share on other sites

ммм..

Есть функция внешней регистрации и функция внешней авторизации.

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

Для этого пробуем авторизоваться, если данных нет - записываем.

$user_auth = $dle_api->auth_user("login", "pass");

if (!$user_auth)

{

// Вносим данные

}

else

{

$arr = $dle_api->take_user_by_name("login");

}
Или можно сразу получить:
$arr = $dle_api->take_user_by_name("login"); и если элементов 0 (Функция вернёт false), то вносим данные.
Внешняя регистрация:
					// Внешняя регистрация

					// $login, $password, $email - string

					// $group - int

					// Return:

					// 1 - All OK

					// -1 - Name exists

					// -2 - Email exists

					// 0 - DB Error

						$dle_api->external_register($login, $password, $email, $group);

Edited by IT-Security

Share this post


Link to post
Share on other sites

Разрабатываются экспериментальные функции:

$dle_api->take_additional_field_by_id(mod_id, add_id=0);

$dle_api->save_additional_field_by_id(mod_id, add_id, value);

Получаем доп. поля DLE в виде массива.

Поля могут относится к чему угодно и могут использоваться как для хранения данных модулей (Типа балансы пользователей и т.п.), так и к новостям, да и впринципе к чему угодно.

Структура таблицы:

id

mod_id (Идентификатор модуля, которому принадлежит поле)

addfield_value (Значение поля)

add_id (дополнительный идентификатор для выборки. Тут может быть ID новости или пользователя)

add_id_type (флаг к чему относится данное поле)

Эти доп поля будут реализованы через отдельную таблицу.
Данное добавление будет экспериментальным и возможно не попадёт в стабильный релиз. Идея этой функции - унифицированное хранение данных.
$dle_api->take_news ($cat=X, $limit=N);

Получение N новостей в массив из категории X. При выборке не накладываются групповые ограничения!
$dle_api->change_config('alt_name', 'new_value');

Позволяет менять настройку alt_name на новое значение.

p.s.

Подумал, что если в таблицу dle_comments добавить mod_id и чуть-чуть поправить в dle выборку комментариев, то можно получить унифицированность в комментариях.

Edited by IT-Security

Share this post


Link to post
Share on other sites

IT-Security,

самое первое, наверное, всё-таки вывод комментариев, при чём как пользовательская часть, так и админка. В принципе более менее приближенный вариант есть, могу скинуть. Функции рейтинга. Функции навигации (как для пользователей, так и для админки.) Это я тоже могу скинуть - есть вариант, который позволяет испольовать навигацию во всех вариантах.

Я буду переносить API с одной версии на другую и высылать Stable релизы Владимиру.

Класс загрузи файлов. Хотя данная вещь весьма специфическая. Я за год написания разных галерей и всевозможных загрузчиков только месяца два назад наконец закончил базовый abstract класс, который стал удовлетворять всем разнообразным требованиям. Вообще в такого типа модулях есть важный момент - оставить разработчику возможность доработки.

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

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

Расширить кэширование, с возможностью создания подпапок кэша, плюс нормальные функции его очистки.

Подумал, что если в таблицу dle_comments добавить mod_id и чуть-чуть поправить в dle выборку комментариев, то можно получить унифицированность в комментариях.

интересно, как оно на нагрузке скажется. Я пока на своём сайте делил их по разным таблицам, однако при глобальной выборке придётся юнион ол использовать.

Share this post


Link to post
Share on other sites

Если выборка будет вестись по полю типа int и на нём будет индекс, то нагрузка не сильно увеличится.

Насчёт АПИ - это будет класс, который включается в первую очередь в свои скрипты, поэтому работа с элементами движка там врядли будет возможно.

Не путаем API и сниппеты. Вообще я могу бесконечно расширять API, но мне нужны люди, которым это нужно =)

Кроме меня и Владимира конечно =)

Share this post


Link to post
Share on other sites

самое первое, наверное, всё-таки вывод комментариев, при чём как пользовательская часть, так и админка. В принципе более менее приближенный вариант есть, могу скинуть. Функции рейтинга. Функции навигации (как для пользователей, так и для админки.) Это я тоже могу скинуть - есть вариант, который позволяет испольовать навигацию во всех вариантах.

API - Application Program Interface (интерфейс прикладных программ) У вас неверное понимание, что такое API, попытаюсь объяснить это интерфейс для взаимодействия с данными одной программы в другой. Это работа с данными а не с выводом или чем то еще. API облегчает создание собственных программ. Например как это действует в DLE, например вы создаете файл test.php и в нем содержимое:

include_once ('engine/api/api.class.php');
print_r($dle_api->take_user_by_id(1));[/code]

данный код всего в две строчки выведет массив с информацией о пользователе с ID1, весь его профиль и вы можете работать с этими данными, т.е. вам не нужно в своем файле подключать MySQL, писать какие то запросы и т.д.

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

Share this post


Link to post
Share on other sites

1. Хотелось бы чтобы $dle_api->take_news() принимал также параметр сортировки, по какому полю и в каком направлении.

2. Функцию установки заголовка (title) страницы. Кстати, задать заголовок модуля можно непосредственно в самом модуле следующим образом:

$metatags['title'] = 'заголовок';

А так я даже и не знаю, что можно сделать в этим API, можно просто посмотреть Wordpress

Share this post


Link to post
Share on other sites

celsoft,

ясно) Значит я его более расширенно принимал.

Тогда я честно говоря тоже не знаю что добавить. Работа с движком крутиться не только вокруг информации о пользователе, и новостях.

Даже на примере данного:

$dle_api->take_news ($cat=X, $limit=N);

Получение N новостей в массив из категории X. При выборке не накладываются групповые ограничения!

И опять же где гибкость... А если нужно из разных категорий - запрос на каждую....

В общем что-то я тут не догоняю :huh:

Share this post


Link to post
Share on other sites

В take_news можно через запятую передавать категории.

Сортировка - ОК.

$dle_api->take_news($cats, $limit, $sort = 'id', '$order='desc');

В таком виде устроит?

Share this post


Link to post
Share on other sites

В таком виде устроит?
устроит конечно.

Неебольшое преимущество я вижу в меньшем количестве символов в коде.

То есть вместо

$news = $db->super_query('SELECT something FROM dle_post ....', true);
мы напишем
$news = $dle_api->take_news($cats, $limit, $sort = 'id', '$order='desc');

Но недостаток в том, что при "ручном" запросе я сам выбираю поля, которые необходимы, а take_news() полагаю будет забирать все поля

Edited by Александр Медведев

Share this post


Link to post
Share on other sites

ммм...

$news = $dle_api->take_news($fields = "*", $cats, $limit, $sort = 'id', '$order='desc');

Edited by IT-Security

Share this post


Link to post
Share on other sites

тогда уж лучше просто так

$news = $dle_api->take_news($cats, $limit, $sort, $order, $fields);
и брать
$news = $dle_api->take_news(6, 10);

а остальные параметры для гурманов))

Share this post


Link to post
Share on other sites

немного влезу в тему не по теме :)

а чем хуже вот это вариант? http://poligon.dle-hack.ru/files/289-podde...nija-v-dle.html

на взгляд ламмера он проще и гибче. особенно то что он практически не трогает дистрибутив. все функции подключаются и выводятся независимо от движка.

мне просто интересно понять разницу.

кстати та же система на сниппетах работает в modx - и очень удобная штука.

Share this post


Link to post
Share on other sites

Не путайте сниппеты и API!

API вообще ничего не трогает в движке и подключается в модули через include.

Share this post


Link to post
Share on other sites

вообщем с точки зрения просто юзера кучи модов. особенно когда пишется мод а потом автора не найти и версий выходит несколько ДЛЕ. мне хочется узнать, что будет если мод написан используя ваше апи. одно дело когда как сейчас мод хоть и сидит в файлах движка, но запросы у него свои, выводится он сам по себе. а тут вы что-то смените в своем апи и все. приплыли. ищи автора плати денег чтобы поправил?

Share this post


Link to post
Share on other sites

1) API нужно для получения данных движка (Пользователи, кэш и далее больше)

2) Первое сообщение для кого написано?

Структура АПИ всегда будет оставаться одинаковой, будет добавляться только новый функционал.

3) То, что API будет всегда вместе с движком, а модули сторонние нет не наводит на мысли?)

Share this post


Link to post
Share on other sites

примерно нужно следущее:

-работа с правами групп, юзеров, етс

-работа с файлами(архивы, картинки и тд, их загрузка, обработка, удаление)

это из важного..а вообще кому чего не будет хватать, всегда можно интерфейсы дописать

Share this post


Link to post
Share on other sites

С правами пользователей есть.

Есть возможность менять группу, логин, пароль и т.п.

Подумаю о возможности менять любое поле чуть попозже.

Сейчас думаю о системе доп. полей.

Share this post


Link to post
Share on other sites

О!

Ну наконец-то.

Memcached волнует уже давно. Дабы запрячь nginx отдавать страницу из memcached, URI как ключ

В связи с чем понадобится умная функция для обнуления кэша:

добавили пост (именно по событию, не по времени) -

1. изменился листинг главной на всю глубину, если публикуется на главной

2. изменилась категория

3. возможно, изменился блок "связанные", а с ним страницы, его выводящие

убивать кэш целиком по такому случаю совсем не хочется

Share this post


Link to post
Share on other sites

Вы программист?API для программистов и оно не будет менять структуру DLE. Только добавлять её и будет вставляться в сторонние скрипты.

Share this post


Link to post
Share on other sites

Итак. Восьмёрка вышла :)

Начинаем работать с API...

Создаём в корне файлик test.php и в нём:

<?php

				  define ( 'DATALIFEENGINE', true );

				  define ( 'ROOT_DIR', dirname ( __FILE__ ) );

				  include_once(ROOT_DIR.'/engine/api/api.class.php');

$arr = $dle_api->take_user_by_id(1);

echo "<pre>";

print_r($arr);

echo "</pre>";

?>

При условии существования пользователя с ID=1 увидите результат работы API :)

Удобно, правда?)

Share this post


Link to post
Share on other sites

можно просто

<?php
include_once(ROOT_DIR.'/engine/api/api.class.php');
$arr = $dle_api->take_user_by_id(1);
echo "<pre>";
print_r($arr);
echo "</pre>";

?>[/code]

Share this post


Link to post
Share on other sites

ROOT_DIR отуда тогда возьмётся, Владимир? =)

Я же говорил не про модуль, а просто про файл одиночный =)

Так что define ( 'DATALIFEENGINE', true ); можно ещё не ставить, а в без дира никак =)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now