Создание плагинов

В этом документе рассмотрен процесс создания плагинов на примере плагина категорий mscat, но для начала надо объяснить структуру плагинов.

Структура файлов
info.inc Файл с информацией о плагине
lang_def.inc Файл языка
funcs.inc Файл с функциями самого плагина
admin.inc Административная часть плагина
Все файлы плагина лежат в каталоге с именем плагина и являются обязательными, т.е. даже если вы не предусматриваете наличие каких-либо из этих файлов, то он пусть и пустой но всё равно должен быть в наличии. Сам же каталог плагина помещается в корневую директорию москита  plugins.
Если же вы предполагаете хранить какие-то данные, то они должны лежать в отдельном каталоге в корневой директории data.

lang_def.inc — это обычный php файл в котором в массиве $_l хранятся текстовые данные так же как и в языковом файле самого движка, к примеру
$_l['mscat_desc']='Простые категории';


info.inc
<?php
$plugin_name = 'mscat';
$plugin_version = '0.1';
$plugin_description = $_l['mscat_desc'];
$plugin_author = 'muhas';

register_hook('MQ_TAGS__SHOW_BEFORE', 'mscat_simple');


$actions = array(
        'mscat_help'        => $_l['mscat_h'],
        'mscat_s'        => $_l['mscat_s']
);
?>
где $plugin_name это имя плагина, $plugin_version его версия, $plugin_description краткое его описание, $plugin_author автор плагина.
Функция register_hook(хук, функция) говорти нам что функцию из файла funcs.inc необходимо использовать в каком-то конкретном месте (в данном случае перед показом тегов), функцию можно использовать несколько раз, каждый раз для разных хуков (список хуков разбросан по коду движка, но ниже я постораюсь привести общий их список)
В файле же funcs.inc с помощью мы можем манипулировать данными по своему желанию. К примеру в плагине mscat мы выбераем необходимые данные(список тегов являющихся категориями) из файла и удаляем их из списка тегов.
<?php
function mscat_simple() {
	global $_s, $tags;
	$f=file_get_contents($_s['data_dir'].'/mscat/category');
	$mscat=explode('||',$f);
	foreach ($mscat as $k=>$v) {
		unset($tags[$v]);
	}
}
?>
А так как функия вызывается перед выводом тегов (хук MQ_TAGS__SHOW_BEFOR) то в выводе тегов мы не увидем удаленные теги

$actions — массив со ссылками (на администрирования плагина, помощь или какие-либо его функции), т.е. в плагине mscat у нас появятся ссылки
Информация ведущая на ?pg=m.admin&plugin=mscat&action=mscat_help
Настройка соответсвенно ведущая ?pg=m.admin&plugin=mscat&action=mscat_s
Обработка этих действий производится уже в файле admin.inc, т.е. код выводит помощь по плагину
<?php
if($_v['action'] == 'mscat_help') {
e('<div align="center"?><b?>'.$plugin_name.'</b?> (v. '.$plugin_version.', '.$plugin_author.')</div?>'.$_l['mscat_help']);
}
?>
Т.е. обрабатваем нужный action в файле

Список основных hook'ов
MQ_HEADER_BEFORE - Перед шапкой

MQ_FOOTHER_BEFORE - Перед отображением футера
MQ_FOOTHER_AFTER - После отображения футера

MQ_LOGIN_BEFORE - Перед залогиневанием
MQ_LOGIN_AFTER - После залогиневания

MQ_LOGIN_FORM_SHOW_BEFORE - Перед отображением формы для входа
MQ_LOGOUT_BEFORE - Перед выходом

MQ_POST_FORM_SHOW_BEFORE - Перед отображением формы постинга
MQ_POST_FORM_SHOW_AFTER - После отображения формы постинга
MQ_POST_ADD_BEFORE - Перед доавлением записи
MQ_POST_ADD_AFTER - После добавления записи
MQ_POST_SHOW_BEFORE - Перед отображением записи

MQ_PAGE_ADD_BEFORE - Перед добавлением страницы
MQ_PAGE_ADD_AFTER - После добавления страницы
MQ_PAGE_SHOW_BEFORE - Перед отображением страницы
MQ_PAGE_SHOW_AFTER - После отображения страницы
MQ_PAGE_DELETE_BEFORE - Перед удалением страницы
MQ_PAGE_DELETE_AFTER - После удаления страницы

MQ_RSS_BEFORE_ALL - Перед выдачей XML заголовка
MQ_RSS_BEFORE_COMMENTS_PROCESS - Перед обработкой комментариев
MQ_RSS_COMMENT_SHOW_BEFORE - Перед выдачей комментария
MQ_RSS_COMMENT_SHOW_AFTER - После выдачи комментария
MQ_RSS_ENTRY_PROCESS_BEFORE - Перед обработкой записей
MQ_RSS_ENTRY_SHOW_BEFORE - Перед выдачей записи
MQ_RSS_ENTRY_SHOW_AFTER - После выдачи записи

MQ_POST_DELETE_BEFORE - Перед удалением записи
MQ_POST_DELETE_AFTER - После удаления записи
MQ_POST_EDIT_BEFORE - До редактирования записи
MQ_POST_EDIT_AFTER - После редактирования записи

MQ_POSTS_GET_BEFORE - Перед выборкой постов
MQ_POSTS_GET_AFTER - После выборки постов

MQ_COMMENT_ADD_BEFORE - Перед добавлением комментария
MQ_COMMENT_ADD_AFTER - После добваления комментария
MQ_COMMENT_DELETE_BEFORE - Перед удалением комментария
MQ_COMMENT_DELETE_AFTER - После удаления комментария
MQ_COMMENT_SHOW_BEFORE - Перед отображением комментария

MQ_TAGS_SHOW_BEFORE - Перед отображением тегов