IT-Security 33 Опубликовано: 6 июня 2010 Рассказать Опубликовано: 6 июня 2010 (изменено) Доброе время суток! Появилась идея сделать версию DLE с внёднённым расширенным АПИ. Не только для создания модулей, но и для их подключения. Что планируется сделать: 1) Функции управления окружением из модулей Давно хотелось в модуле не вставлять десятки файлов для JS/AJAX/эффектов, которые уже могут быть подключены. С другой стороны подключать всё подряд тоже как-то не хочется. Решение простое: dleAPI::connect_js('filename'); Лежать js дожны в папке js текущего скина. Есть возможность грузить внешние JS: dleAPI::connect_js('http://www.www.ru/file.js', true); Аналогично с CSS файлами: dleAPI::connect_css('file.css'); или: dleAPI::connect_css('http://www.www.ru/file.css', true); Файлы грузятся 1 раз!Также они будут сжиматься через gzip, что ускорит их загрузку + будут кэшироваться. Также из окружения можно будет менять title страницы: dleAPI::set_title ('Это title'); Или дописывать: dleAPI::set_title ('Это дописано', true); Метатэги: dleAPI::set_meta('keywords', $keywords); dleAPI::set_meta('description', $keywords); 2) Возможность авторизовывать по email Да, это реально. Помимо классической авторизации по логину/паролю будет авторизация по паре email/пароль. 3) Объект dleAPI доступен из любого места Да, Вы можете делать запросы к API из любого места. Кроме этого появляется HTTP-GateWay для запросов снаружи. Работает он по двум ключам. Первый - открытый. По нему доступны функции для чтения данных (Кроме авторизационной информации) Второй - закрытый. По нему работают все фунции. Также у АПИ есть настройка с какого шлюза разрешать запрос (Да, полноценные соц. сети на ДЛЕ реальны). 4) Расширенное кэширование В АПИ мной было разработано timelife кэширование. Оно также будет доступно внутри ДЛЕ. 5) Дополнительные поля Будут разработаны и введены редактируемые и индексируемые дополнительные поля. Это удобно для различного рода балансов и прочих вещей, которые требуеют отдельное поле в БД. Индексация идёт по трём полям: user_id - module_id - field_id Перед началом работы с дополнительным полем необходимо установить в систему модуль, который будет работать с доп. полями. dleAPI::setupModule(unique_name); В ответ будет получен ID модуля в системе. Можно менять доп. информацию о модуле: dleAPI::moduleSetInfo($module_id, $descr, $version, $author); После этого нужно добавить для модуля возможность ставить поля. dleAPI::addField($module_id, $fieldName); Получаем в ответ ID поля. И наконец-то ставим поле: dleAPI::setField($field_id, $user_id, $value); Если поля нет - оно создастся. Если есть - обновится. dleAPI::readField ($field_id, $user_id); Чтение значения. Далее: dleAPI::removeField($field_id); Удаление доп. поля dleAPI::unistallModule($module_id); Удаление информации по модулю. Информацию по модулю и прочие детали планируется хранить в базе с кэшированием на диск. Поэтому снизить производительность это не должно. С другой стороны нужно понимать, что ДЛЕ будет кушать чуть больше ресурсов имея такие навороты. Также в проекте: dleAPI::set_update_url($module_id, $url); Каждый раз при вызове: dleAPI::check_updates($module_id) будет проверяться наличие новое версии и возвращаться результат. Серверная часть для отдачи версии будет предоставлена. 6) Управление выводом Теперь можно будет в любом модуле объявить dleAPI::single_output(); После этого весь остальной вывод будет подавлен 7) Расширенные бб-тэги Теперь бб-тэги можно будет добавлять (Работать для начала будет только в шаблонах!) Пример: [parser=функция]Данные|через|слэш[/parser] Что будет?Возьмётся фукнция dleAPI::parser и в неё будет переданы все аргументы, через | + название функции. Парсер вызовет callback-функцию, а она уже вернёт нормальный вывод. Пример: [parser=no_cookie]Превед![/parser] В моём примере будет вызвана функция no_cookie, которая будет проверять посещал человек за эту сессию сайт или нет и если не посещал, то будет выведен текст. Такая функция пример будет, правда называться она будет no_session или first_visit. Удобно для сайтов, которые показывают флешку в первой загрузке и картинку на фоне когда человек уже сидит на сайте. Напомню, что также будет HTTP-режим АПИ для внешней обработки текста. 8) Подключение внешних компонентов Можно подключать внешние компоненты. Изначально в АПИ будет доступно: dleAPI::$db и dleAPI::$cache. Опционально можно будет загрузить: dleAPI::$http_request и dleAPI::$geoip 9) Расширенная капча antibot.php будет модифицирован и будет выдавать каждый раз разный тип капчи, разные надписи и прочее, что должно помочь в защите от ботов. 10) Статические страницы Будет возможность вывести в любом место содержимое статической страницы. {staticpage id="$id" cache="true/false"} Это крайне удобно для различного рода сообщений и прочего. И АПИ вариант: dleAPI::getStaticPage ($id, $cache); 11) Модульность Будет добавлена полноценная модульность на стыке default в engine.php Примерно так: if ($config['allow_api'] == 'yes') { $modules = dleAPI::get_modules (); if (in_array ($do, $modules)) { require_once ($modules[$do]['handler']); } } После этого модуль будет вставлен. Пока это всё в разработке... Хотелось бы выслушать мнение. Прошу перепостить эту тему, так как она важна для развития движка. P.S. Поставляться всё это будет в виде патчей, чтобы не выкладывать файлы движка. Использование в нуленных версиях крайне не рекомендуется. Напомню про случай, когда моё апи изменили для возможности выполнять произвольный код и выложили. Посему рекомендую лицензионный дистрибутив и оригинальное АПИ. ВСЕ модули и ВСЁ АПИ в целом будет включаться/выключать в админ-панели! Изменено 7 июня 2010 пользователем IT-Security Цитата Ссылка на сообщение Поделиться на других сайтах
IronMedia 7 Опубликовано: 7 июня 2010 Рассказать Опубликовано: 7 июня 2010 Слов нет, т.к. всё супер! Цитата Ссылка на сообщение Поделиться на других сайтах
zgr 72 Опубликовано: 7 июня 2010 Рассказать Опубликовано: 7 июня 2010 (изменено) >>Также из окружения можно будет менять title страницы Я взял всё из мета-конфига. Очень полезная фича, но нужно и меты тоже, а не только Титул: кейворды и мета-описание - тогда модуль полностью отдельный получается от ДЛЕ. --- Извиняюсь, судя по всему, это и есть меты: dleAPI::set_meta('keywords', $keywords); dleAPI::set_meta('description', $keywords); Но так брать их не удобно - громоздко выходит... Это уже третье колесо на велик Проще из конфига, только в чем разница - не пойму, по-моему - никакой... >>Лежать js дожны в папке js текущего скина. Вот это радует Еще черти когда спрашивал на офф.сайте как мне из стороннего модуля сделать подключение JS и CSS, ведь жутко напрягает и меня (писать постоянно меняющиеся инструкции) и пользователей (которые ни сном, ни духом, чё оно такое и зачем нужно). А где должны быть CSS, то же что ли в папке "JS"? - если да, то разделите, пожалуйста их на 2 папки: "CSS" и "JS", а лучше дайте возможность самому выбрать путь после скина, - я не люблю всё по папкам раскидывать и просить пользователей мода всё по десяткам папок юлозить... проще так: залил мод и работаешь - всем удобство будет, к чему лишний конструктор фигачить? --- Дополнение. Вот так было бы здорово, а главное - понятно и наглядно (для меня, для других - не знаю): dleAPI::connect_css('{skin}/css/file.css'); Полагаю в "Хидер" грузится, а то у меня всё просто в тему подгружалось? Изменено 7 июня 2010 пользователем zgr Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 7 июня 2010 Рассказать Опубликовано: 7 июня 2010 (изменено) После этого весь остальной вывод будет подавленУдобно при выводе данных черех AJAX ~ if ($config['allow_api'] == 'yes') { $modules = dleAPI::get_modules (); if (in_array ($do, $modules)) { require_once ($modules[$do]['handler']); } } да сделай проще, что-то вроде if ($config['allow_api'] == 'yes' && dleAPI::is_module($do)) { require_once (dleAPI::get_module($do)); } ~ dleAPI::set_meta('keywords', $keywords); dleAPI::set_meta('description', $keywords); Но так брать их не удобно - громоздко выходит... Это уже третье колесо на велик Проще из конфига, только в чем разница - не пойму, по-моему - никакой... И зкакого конфига? Как беря из одного конфига данные вы сделаете разную мета дату на страницах? ~ А где должны быть CSS, то же что ли в папке "JS"? - если да, то разделите, пожалуйста их на 2 папки: "CSS" и "JS", а лучше дайте возможность самому выбрать путь после скина, - я не люблю всё по папкам раскидывать и просить пользователей мода всё по десяткам папок юлозить... проще так: залил мод и работаешь - всем удобство будет, к чему лишний конструктор фигачить?Я вообще сторонник того, что яваскрипт файл, который реализует функицональность класть не в шаблон, а в другое место и оно должно быть одно. Дополнение. Вот так было бы здорово, а главное - понятно и наглядно (для меня, для других - не знаю): dleAPI::connect_css('{skin}/css/file.css'); А что такое {skin}? По моему итак понятно что означаетdleAPI::connect_css('file.css'); по идее вы можете грузить и таким образом dleAPI::connect_css('http://site.ru/templates/templateName/css/file.css'); ~ IT-Security, давай лучше ролики снимать))) Изменено 7 июня 2010 пользователем Александр Медведев Цитата Ссылка на сообщение Поделиться на других сайтах
zgr 72 Опубликовано: 7 июня 2010 Рассказать Опубликовано: 7 июня 2010 И зкакого конфига? Как беря из одного конфига данные вы сделаете разную мета дату на страницах? Случайно, копая ДЛЕ, наткнулся на массив $metatags, распечатал его и изменил его данные для своего мода; сто раз проверил - изменения только в моем моде идут, на всех остальных стат.страницах и новостных меты свои снова восстанавливаются. Я вообще сторонник того, что яваскрипт файл, который реализует функицональность класть не в шаблон, а в другое место и оно должно быть одно. Ну так... я тоже Для админки свой подключаю, для сайта: свой принудительный (если без него никак) и дополнительный (если кому нужны спец.эффекты, например, анимация) - удобней же; ну а потом: "на вкус и цвет все разные". А что такое {skin}? Шаблон сайта - в настройках указывается, т.е.: http://site.ru/templates/SKIN/ Зачем нам лишние пути определять, если это можно сделать в движке по умолчанию? Например... Пишу так: dleAPI::connect_css('{skin}/css/file.css'); Получаю так: dleAPI::connect_css('http://site.ru/templates/SKIN/css/file.css'); Полагаю, что чем сильней принудительная привязка к движку, тем меньше свободы, а это не есть хорошо - заставлять всех писать моды "под себя" или вообще не писать... Нужно гибче делать настройки, а там пусть каждый решает сам как ему удобней Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 7 июня 2010 Рассказать Опубликовано: 7 июня 2010 (изменено) Случайно, копая ДЛЕ, наткнулся на массив $metatags.... Вы тогда называйте вещи своими именами)) Конфиг - это файл конфига, а $metatags это другое. Но вы правы, не знаю как это сделан ов DLE сейчас, но раньше мы в модулях писали так $metatags['title'] = 'Заголовок модуля'; Зачем нам лишние пути определять, если это можно сделать в движке по умолчанию? так а что мешает писать так?dleAPI::connect_css('nameOfFile');API итак возьмёт этот файл из текущего шаблона Изменено 7 июня 2010 пользователем Александр Медведев Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 7 июня 2010 Рассказать Опубликовано: 7 июня 2010 Автор 11 пункт - готово. Загрузка модулей работает. Грузит из локального кэша или из базы. Цитата Ссылка на сообщение Поделиться на других сайтах
zgr 72 Опубликовано: 8 июня 2010 Рассказать Опубликовано: 8 июня 2010 так а что мешает писать так?dleAPI::connect_css('nameOfFile');API итак возьмёт этот файл из текущего шаблона Я у себя все скрипты и классы закинул в один файл - один файл скриптов и один файл классов соответственно, просто хотел прямо из шабчика всё подключить, а не создавать еще две папки - CSS и JS (в приведенном варианте, как я понял, берется именно из папок, а не из самого шаблона), либо мне эти файлики править придется, а они очень даже не маленькие. Вот это мне и мешает. Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 8 июня 2010 Рассказать Опубликовано: 8 июня 2010 zgr, я так понял, что .css и будут грузиться из шаблона =) В любом случае можно будет прописать полный урл к файлу Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 8 июня 2010 Рассказать Опубликовано: 8 июня 2010 Автор Подключение JS и CSS готово. Совместимо с сжатием файлов, которое появилось в 8.5 Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.