IT-Security 33 Опубликовано: 5 апреля 2009 Рассказать Опубликовано: 5 апреля 2009 (изменено) Доброе время суток! Начиная с версии 8.0 DLE будет комплектоваться API разработчика. API будет постоянно расширяться и пока отвечает за получение/смену определённых данных, переведения в другую группу и отправки ПМ пользователю. Также авторизация и внешняя регистрация (Актуально для интеграций). Структура АПИ всегда будет оставаться одинаковой, будет добавляться только новый функционал. Я буду переносить API с одной версии на другую и высылать Stable релизы Владимиру. Все unstable/test версии я буду выкладывать здесь. От Вас, уважаемые разработчики, мне нужен примерный список того, что Вы хотели бы видеть. Версия 0.08 УЖЕ интегрирована в DLE v8.2 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() в выборке новостей Изменено 5 сентября 2009 пользователем IT-Security 7 Цитата Ссылка на сообщение Поделиться на других сайтах
redik 0 Опубликовано: 5 апреля 2009 Рассказать Опубликовано: 5 апреля 2009 Если я в тему. Файл синхронизации (класс) регистрация, авторизация пользователей и т.п. в этом духе. ps, RedRat Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 5 апреля 2009 Рассказать Опубликовано: 5 апреля 2009 (изменено) Автор ммм.. Есть функция внешней регистрации и функция внешней авторизации. Если у Вас алгоритм шифрования как в 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); Изменено 5 апреля 2009 пользователем IT-Security Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 7 апреля 2009 Рассказать Опубликовано: 7 апреля 2009 (изменено) Автор Разрабатываются экспериментальные функции: $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 выборку комментариев, то можно получить унифицированность в комментариях. Изменено 7 апреля 2009 пользователем IT-Security Цитата Ссылка на сообщение Поделиться на других сайтах
Al-x 7 Опубликовано: 7 апреля 2009 Рассказать Опубликовано: 7 апреля 2009 IT-Security, самое первое, наверное, всё-таки вывод комментариев, при чём как пользовательская часть, так и админка. В принципе более менее приближенный вариант есть, могу скинуть. Функции рейтинга. Функции навигации (как для пользователей, так и для админки.) Это я тоже могу скинуть - есть вариант, который позволяет испольовать навигацию во всех вариантах. Я буду переносить API с одной версии на другую и высылать Stable релизы Владимиру. Класс загрузи файлов. Хотя данная вещь весьма специфическая. Я за год написания разных галерей и всевозможных загрузчиков только месяца два назад наконец закончил базовый abstract класс, который стал удовлетворять всем разнообразным требованиям. Вообще в такого типа модулях есть важный момент - оставить разработчику возможность доработки. Попробовать включить в систему модуль универсальной установки, с бэкапами, проверки целостности залитых файлов. Набор функций для работы с дизайном админ-панели. Потому что пока там натыкаешь эти тд и тр, где что открывается и закрывается.... Расширить кэширование, с возможностью создания подпапок кэша, плюс нормальные функции его очистки. Подумал, что если в таблицу dle_comments добавить mod_id и чуть-чуть поправить в dle выборку комментариев, то можно получить унифицированность в комментариях. интересно, как оно на нагрузке скажется. Я пока на своём сайте делил их по разным таблицам, однако при глобальной выборке придётся юнион ол использовать. Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 7 апреля 2009 Рассказать Опубликовано: 7 апреля 2009 Автор Если выборка будет вестись по полю типа int и на нём будет индекс, то нагрузка не сильно увеличится. Насчёт АПИ - это будет класс, который включается в первую очередь в свои скрипты, поэтому работа с элементами движка там врядли будет возможно. Не путаем API и сниппеты. Вообще я могу бесконечно расширять API, но мне нужны люди, которым это нужно =) Кроме меня и Владимира конечно =) Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 076 Опубликовано: 7 апреля 2009 Рассказать Опубликовано: 7 апреля 2009 самое первое, наверное, всё-таки вывод комментариев, при чём как пользовательская часть, так и админка. В принципе более менее приближенный вариант есть, могу скинуть. Функции рейтинга. Функции навигации (как для пользователей, так и для админки.) Это я тоже могу скинуть - есть вариант, который позволяет испольовать навигацию во всех вариантах. 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 может быть использовано как в самом скрипте для хаков, так и в отдельных скриптах, например для интеграции с формумом к примеру. Но у него на данный момент весьма ограниченные возможности, только для работы с пользователями, поэтому и нужна эта тема чтобы разработчики писали какие функции для работы с какими данными еще нужно написать. Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 7 апреля 2009 Рассказать Опубликовано: 7 апреля 2009 1. Хотелось бы чтобы $dle_api->take_news() принимал также параметр сортировки, по какому полю и в каком направлении. 2. Функцию установки заголовка (title) страницы. Кстати, задать заголовок модуля можно непосредственно в самом модуле следующим образом: $metatags['title'] = 'заголовок'; А так я даже и не знаю, что можно сделать в этим API, можно просто посмотреть Wordpress Цитата Ссылка на сообщение Поделиться на других сайтах
Al-x 7 Опубликовано: 7 апреля 2009 Рассказать Опубликовано: 7 апреля 2009 celsoft, ясно) Значит я его более расширенно принимал. Тогда я честно говоря тоже не знаю что добавить. Работа с движком крутиться не только вокруг информации о пользователе, и новостях. Даже на примере данного: $dle_api->take_news ($cat=X, $limit=N); Получение N новостей в массив из категории X. При выборке не накладываются групповые ограничения! И опять же где гибкость... А если нужно из разных категорий - запрос на каждую.... В общем что-то я тут не догоняю Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 7 апреля 2009 Рассказать Опубликовано: 7 апреля 2009 Автор В take_news можно через запятую передавать категории. Сортировка - ОК. $dle_api->take_news($cats, $limit, $sort = 'id', '$order='desc'); В таком виде устроит? Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 7 апреля 2009 Рассказать Опубликовано: 7 апреля 2009 (изменено) В таком виде устроит?устроит конечно. Неебольшое преимущество я вижу в меньшем количестве символов в коде. То есть вместо$news = $db->super_query('SELECT something FROM dle_post ....', true); мы напишем$news = $dle_api->take_news($cats, $limit, $sort = 'id', '$order='desc'); Но недостаток в том, что при "ручном" запросе я сам выбираю поля, которые необходимы, а take_news() полагаю будет забирать все поля Изменено 7 апреля 2009 пользователем Александр Медведев Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 7 апреля 2009 Рассказать Опубликовано: 7 апреля 2009 (изменено) Автор ммм... $news = $dle_api->take_news($fields = "*", $cats, $limit, $sort = 'id', '$order='desc'); Изменено 7 апреля 2009 пользователем IT-Security Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 7 апреля 2009 Рассказать Опубликовано: 7 апреля 2009 тогда уж лучше просто так $news = $dle_api->take_news($cats, $limit, $sort, $order, $fields); и брать $news = $dle_api->take_news(6, 10); а остальные параметры для гурманов)) Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 8 апреля 2009 Рассказать Опубликовано: 8 апреля 2009 Автор ОК. Принято. Цитата Ссылка на сообщение Поделиться на других сайтах
mitriy 5 Опубликовано: 8 апреля 2009 Рассказать Опубликовано: 8 апреля 2009 немного влезу в тему не по теме а чем хуже вот это вариант? http://poligon.dle-hack.ru/files/289-podde...nija-v-dle.html на взгляд ламмера он проще и гибче. особенно то что он практически не трогает дистрибутив. все функции подключаются и выводятся независимо от движка. мне просто интересно понять разницу. кстати та же система на сниппетах работает в modx - и очень удобная штука. Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 8 апреля 2009 Рассказать Опубликовано: 8 апреля 2009 Автор Не путайте сниппеты и API! API вообще ничего не трогает в движке и подключается в модули через include. Цитата Ссылка на сообщение Поделиться на других сайтах
mitriy 5 Опубликовано: 8 апреля 2009 Рассказать Опубликовано: 8 апреля 2009 вообщем с точки зрения просто юзера кучи модов. особенно когда пишется мод а потом автора не найти и версий выходит несколько ДЛЕ. мне хочется узнать, что будет если мод написан используя ваше апи. одно дело когда как сейчас мод хоть и сидит в файлах движка, но запросы у него свои, выводится он сам по себе. а тут вы что-то смените в своем апи и все. приплыли. ищи автора плати денег чтобы поправил? Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 8 апреля 2009 Рассказать Опубликовано: 8 апреля 2009 Автор 1) API нужно для получения данных движка (Пользователи, кэш и далее больше) 2) Первое сообщение для кого написано? Структура АПИ всегда будет оставаться одинаковой, будет добавляться только новый функционал. 3) То, что API будет всегда вместе с движком, а модули сторонние нет не наводит на мысли?) Цитата Ссылка на сообщение Поделиться на других сайтах
Kiborgik 0 Опубликовано: 11 апреля 2009 Рассказать Опубликовано: 11 апреля 2009 примерно нужно следущее: -работа с правами групп, юзеров, етс -работа с файлами(архивы, картинки и тд, их загрузка, обработка, удаление) это из важного..а вообще кому чего не будет хватать, всегда можно интерфейсы дописать Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 12 апреля 2009 Рассказать Опубликовано: 12 апреля 2009 Автор С правами пользователей есть. Есть возможность менять группу, логин, пароль и т.п. Подумаю о возможности менять любое поле чуть попозже. Сейчас думаю о системе доп. полей. Цитата Ссылка на сообщение Поделиться на других сайтах
judgefog 0 Опубликовано: 13 апреля 2009 Рассказать Опубликовано: 13 апреля 2009 О! Ну наконец-то. Memcached волнует уже давно. Дабы запрячь nginx отдавать страницу из memcached, URI как ключ В связи с чем понадобится умная функция для обнуления кэша: добавили пост (именно по событию, не по времени) - 1. изменился листинг главной на всю глубину, если публикуется на главной 2. изменилась категория 3. возможно, изменился блок "связанные", а с ним страницы, его выводящие убивать кэш целиком по такому случаю совсем не хочется Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 13 апреля 2009 Рассказать Опубликовано: 13 апреля 2009 Автор Вы программист?API для программистов и оно не будет менять структуру DLE. Только добавлять её и будет вставляться в сторонние скрипты. Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 16 апреля 2009 Рассказать Опубликовано: 16 апреля 2009 Автор Итак. Восьмёрка вышла Начинаем работать с 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 Удобно, правда?) Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 076 Опубликовано: 16 апреля 2009 Рассказать Опубликовано: 16 апреля 2009 можно просто <?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] Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 16 апреля 2009 Рассказать Опубликовано: 16 апреля 2009 Автор ROOT_DIR отуда тогда возьмётся, Владимир? =) Я же говорил не про модуль, а просто про файл одиночный =) Так что define ( 'DATALIFEENGINE', true ); можно ещё не ставить, а в без дира никак =) Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.