Информация по созданию модулей для НПЖ
Структура модулей опущена в документации (
Сторонние модули для НПЖ ), поэтому приходится восстанавливать все самому. Чтобы не забыть или не запутаться, буду писать здесь. Перед тем, как читать этот документ, обязательно ознакомьтесь с
Официальной документацией! Иначе половины не поймете или не заставите модуль работать.
Типы модулей
Модули, как подпространство
Например, пространство пользователя mine@npj –
npj.ru/mine/. Мои фотографии это его подпространство (кроме фотграфий я еще иногда кодирую на PHP, например – это тоже может быть подпространством, но врядли оно потребует какого-то функционала, не реализованного в НПЖ). Логично обозвать его
photos, а ссылаться вот так:
npj.ru/mine/photos/. Тем более, что механизма публикации фотографий в НПЖ сейчас нет. Для реализации подпространств с функциональностью, которой нет в НПЖ можно (необходимо) использовать механизм модулей. В этом случае модуль должен быть «модулем-подпространством».
Модули, как аккаунты
Ничего не знаю про это.
Файл конфигурации модуля
<?
$this->modules["MyCoolPhotoLibrary"] = array(
"subspace" => "photos",
// если модуль - ((#МодулиКакПодпространство подпространство))
// то данный параметр должен строго соответствовать
// имени подпространства.
"name" => "Моя крутая фотобиблиотека",
"module_dir" => "mycoolpl/",
// где физически на диске лежит модуль, относительно корня инсталляции
"messageset_prefix" => "DK_Demo",
"classname" => "MyCoolPhotoLibrary",
// имя класса. файл, содержащий дефиницию класса, должен именоваться
// точно так же + .php.
);
?>
Структура каталогов
classes
Здесь лежат дефиниции классов модуля. Может быть несколько модулей в одном подкаталоге. Имя файла должно быть идентично имени класса из файла конфигурации и расширения
php. Один модуль – один класс – один файл дефиниции. Дефиниция должна включать описание класса и своего рода диспетчер методов модуля:
<?
class MyCoolPhotoLibrary extends NpjModule
{
var $module_name = "MyCoolPhotoLibrary"; // for use in debug
function Init( $rel_url )
{
$this->method = "default"; // Обработчик по умолчанию - default (handlers/default.php)
$this->params = array();
$parts = explode("/", trim($rel_url,"/")); // Разбор URL и задание параметров обработчика
if ($rel_url == "gallery") // Если вызван метод gallery, то
{
$this->method = "gallery"; // Скажем коду, отвечающему за отображение модуля
$this->params = $parts; // что надо вызвать обработчик gallery, который
array_shift($this->params); // лежит в подкаталоге handlers в файле gallery.php
}
}
}
?>
handlers
Обработчики методов модуля, если можно так сказать. Метод модуля, грубо говоря, это все, что расоположено после наименования модуля в адресной строке. Например модуль называется
MyCoolPhotoLibrary и работает, как подпространство, а ссылка в адресной строке выглядит так:
npj.ru/mine/photos/gallery, то в конечном итоге будет исполнен скрипт
gallery.php Вообще-то, хэндлеры, это действия, которые может выполнять модуль, например, добавить изображение, показать изображение и т.п.
Типичный преступник хэндлер выглядит примерно так:
тут нет проверок аутентичности
<?
// Сначала заводим свой темплейт и задаем необходимые параметры
$TE = &$this->GenerateTemplateEngine();
$TE->Assign("user",$principal->data["user_name"]);
// Затем заполняем поля "внешнего" темплейта
$tpl->Assign("Html:TITLE", $this->module_name );
$tpl->Assign("Preparsed:TITLE", "" );
// И всовываем туда то, что сделали на первом этапе
$tpl->Assign("Preparsed:CONTENT", $TE->Parse("default.html") );
$tpl->Assign("Preparsed:TIGHT", 1);
$tpl->Assign("Preparsed:TIGHT_COMMENTS", 1);
// Надо вернуть GRANTED, иначе... А что иначе?
return GRANTED;
?>