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

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

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

Появилась идея сделать версию 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. Поставляться всё это будет в виде патчей, чтобы не выкладывать файлы движка.

Использование в нуленных версиях крайне не рекомендуется.

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

Посему рекомендую лицензионный дистрибутив и оригинальное АПИ.

ВСЕ модули и ВСЁ АПИ в целом будет включаться/выключать в админ-панели!

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

>>Также из окружения можно будет менять title страницы

Я взял всё из мета-конфига. Очень полезная фича, но нужно и меты тоже, а не только Титул: кейворды и мета-описание - тогда модуль полностью отдельный получается от ДЛЕ.

---

Извиняюсь, судя по всему, это и есть меты:

dleAPI::set_meta('keywords', $keywords);

dleAPI::set_meta('description', $keywords);

Но так брать их не удобно - громоздко выходит... Это уже третье колесо на велик :) Проще из конфига, только в чем разница - не пойму, по-моему - никакой... :huh:

>>Лежать js дожны в папке js текущего скина.

Вот это радует :) Еще черти когда спрашивал на офф.сайте как мне из стороннего модуля сделать подключение JS и CSS, ведь жутко напрягает и меня (писать постоянно меняющиеся инструкции) и пользователей (которые ни сном, ни духом, чё оно такое и зачем нужно).

А где должны быть CSS, то же что ли в папке "JS"? - если да, то разделите, пожалуйста их на 2 папки: "CSS" и "JS", а лучше дайте возможность самому выбрать путь после скина, - я не люблю всё по папкам раскидывать и просить пользователей мода всё по десяткам папок юлозить... проще так: залил мод и работаешь - всем удобство будет, к чему лишний конструктор фигачить? :)

---

Дополнение. Вот так было бы здорово, а главное - понятно и наглядно (для меня, для других - не знаю):

dleAPI::connect_css('{skin}/css/file.css');

Полагаю в "Хидер" грузится, а то у меня всё просто в тему подгружалось?

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

После этого весь остальной вывод будет подавлен
Удобно при выводе данных черех 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, давай лучше ролики снимать)))

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

И зкакого конфига? Как беря из одного конфига данные вы сделаете разную мета дату на страницах?
Случайно, копая ДЛЕ, наткнулся на массив $metatags, распечатал его и изменил его данные для своего мода; сто раз проверил - изменения только в моем моде идут, на всех остальных стат.страницах и новостных меты свои снова восстанавливаются.
Я вообще сторонник того, что яваскрипт файл, который реализует функицональность класть не в шаблон, а в другое место и оно должно быть одно.
Ну так... :) я тоже ;) Для админки свой подключаю, для сайта: свой принудительный (если без него никак) и дополнительный (если кому нужны спец.эффекты, например, анимация) - удобней же; ну а потом: "на вкус и цвет все разные".
А что такое {skin}?
Шаблон сайта - в настройках указывается, т.е.: http://site.ru/templates/SKIN/ Зачем нам лишние пути определять, если это можно сделать в движке по умолчанию? :D Например... Пишу так:
dleAPI::connect_css('{skin}/css/file.css');
Получаю так:
dleAPI::connect_css('http://site.ru/templates/SKIN/css/file.css');

Полагаю, что чем сильней принудительная привязка к движку, тем меньше свободы, а это не есть хорошо - заставлять всех писать моды "под себя" или вообще не писать... Нужно гибче делать настройки, а там пусть каждый решает сам как ему удобней :)

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

Случайно, копая ДЛЕ, наткнулся на массив $metatags....
Вы тогда называйте вещи своими именами)) Конфиг - это файл конфига, а $metatags это другое. Но вы правы, не знаю как это сделан ов DLE сейчас, но раньше мы в модулях писали так
$metatags['title'] = 'Заголовок модуля';
Зачем нам лишние пути определять, если это можно сделать в движке по умолчанию?
так а что мешает писать так?
dleAPI::connect_css('nameOfFile');

API итак возьмёт этот файл из текущего шаблона

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

11 пункт - готово. Загрузка модулей работает. Грузит из локального кэша или из базы.

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

так а что мешает писать так?
dleAPI::connect_css('nameOfFile');

API итак возьмёт этот файл из текущего шаблона

Я у себя все скрипты и классы закинул в один файл - один файл скриптов и один файл классов соответственно, просто хотел прямо из шабчика всё подключить, а не создавать еще две папки - CSS и JS (в приведенном варианте, как я понял, берется именно из папок, а не из самого шаблона), либо мне эти файлики править придется, а они очень даже не маленькие. Вот это мне и мешает.

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

zgr, я так понял, что .css и будут грузиться из шаблона =)

В любом случае можно будет прописать полный урл к файлу

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

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

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

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

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

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

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

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

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

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