Создание модуля для SkillZ

Категория: / Документы / Документация и FAQ
Создание модуля для Skillz.


[0] Введение

Skillz изначально строился как модульный, расширяемый проект. Если вам не хватает функциональности системы, вы можете ее расширить, написав собственный модуль. Для всех модулей по-умолчанию используется ссылка index.php?m={module_name}, которая заменяется чпу аналогом m-{module_name}.html. Вы можете описать дополнительные чпу преобразования (см. функцию core_c::add_rewrite_urls($in, $out)).

Внешний вид страницы, сформированной модулем можно описать в админ панели. Создайте виртуальную страницу с именем вашего модуля, укажите стиль, тип страницы и привязку к группам. Также можно указать внешний вид для каждой страницы по отдельности - используйте поле идентификация при создании/редактировании страницы.

[1] Программирование модуля

Пример простейшего модуля с одним экспортируемым методом (принцип аля windows dll).
Все экспортируемые методы должны быть прописаны в бд (prefix_actions). Это делается с помощью скрипта, вызываемого при установке модуля (см. [2]), либо руками в ACP->методы(actions).

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

ВАЖНО: название модуля связано с именем директории в которой он лежит.
Имя модуля: {name}_c
Директория: modules/{name}
Имя класса: {name}


/*
    Class: module_c
    Desc: простейший модуль
*/

 
class module_c {
 
 
/*
    конструктор
    передается путь к модулю в качестве параметра
*/

   
        function module_c( $m_path ) {
         
       // конструктора может и не быть
 
    }
   
 
/*
 
    Пример метода, выводящего в блок информацию. Эта функция будет вызываеться при обработке блоков block_c::run() в файле includes/blocks.php.
 
    Возвращет '', 0 в случае если подходящей информации не найдено (пустой вывоод)
    Возвращает FALSE, если произошла ошибка
    Возвращает Хендл шаблона, если выполнен успешно
 
 
*/
 
 
function block_method ($id) {
 
    // получить указатель на класс ядра
    $core = &core_c::get_instance();
 
        $sql = "SELECT text FROM " . BLOG_TABLE . " WHERE id='{$id}' LIMIT 1;";
 
    // запрос к бд
        if( !($result = $core->db->sql_query($sql)) || !($row = $core->db->sql_fetchrow($result)))  {
                $core->errprint("Невозможно загрузить элемент");
                return 0;
        }
 
    // генерим случайный идентификатор
        $t_name = "ab" . ss_generate_rid();
   
    /*    
     назначаем идентификатору шаблон
     В этом примере шаблон берется из основного стиля (т.е. из templates), если у функции указаны дополнительные параметры, то шаблон будет браться из папки модуля module/templates/, что позволяет модулю иметь свои независимые шаблоны.
    */

        $core->template->set_filenames(array($t_name=>'blocks/some_template.tpl'));
 
    // сброс переменной шаблона
        $core->template->reset_var('TEXT');
   
    //  передаем переменные в шаблон    
        $core->template->assign_vars(
    array(
        'TEXT' => $content,
        'SOMEVAR' => 'just test'    
    ));
 
    // возвращаем хэндл шаблона для дальнейшей обработки и вывода
        return $t_name;
 
}
         
}


[2] Файл описания модуля module.info

Файл module.info лежит в корне папки модуля и имеет следующий формат

# версия модуля (используется при апдейте)
version = 01
name = "module human name"
author = somename
comment = "Developed by megagroup (C) 2005\nOfficial site http://somedomain.ru"
# линк для автоматического апдейта модуля
package_url = "http://skillz.ru/downloads/modules/mod_search.spk.gz"
# скрипт, который запускается при удалении модуля
uninstall_script_url = "setup.php?type=uninstall"
# скрипт, запускаемый при установке
install_script_url = "setup.php?type=install"


Этот файл может отсутствовать.

[3] Архивация / создание дистрибутива модуля


В Skillz используется собственный формат архивного модуля. Для упаковки используется скрипт contrib/packer.php. Все параметры необходимо задать в самом скрипте, далее вызываете его из командной строки php packer.php. Если настройки правильные, скрипт создаст дистрибутив модуля mod_module.spk.gz. В таком формате модуль может быть установлен из админ панели и проанализирован на наличие обновлений на сайте автора.

Важно: при установке модуль установится в папку mod_{ПАПКА}.spk.gz.

[4] Модули интеграции с другими приложениями

В Skillz предусмотрены системные ловушки (логин, логаут, обновление профиля..), которые могут обрабатываться некоторыми модулями. Например модуль интеграции с phpBB использует ловушки создания и удаления сессии, чтобы создать такие же в форуме. Чтобы модуль обрабатывал эти ловушки, необходимо в переменную cms core_depend_packages добавить значение с именем вашего модуля.
За подробностями - смотрите код модуля modules/mod_phpbb.