Инструменты пользователя

Инструменты сайта


основы_плагинов

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
основы_плагинов [24.12.2018 10:58]
vladimir
основы_плагинов [24.12.2018 17:41] (текущий)
vladimir Блок полностью переведен
Строка 63: Строка 63:
  
 Заполните тело функций в файле плагина по мере необходимости: Заполните тело функций в файле плагина по мере необходимости:
 +
 +===== _info() =====
 +
 +Возвращает массив информации о плагине::
 +
 +name: название плагина\\
 +description: описание того, что делает плагин\\
 +website: сайт поддержки плагина (опционально)\\
 +author: автор\\
 +authorsite: сайт автора (опционально)\\
 +version: версия плагина\\
 +guid: уникальный идентификатор, выданный сайтом Mybb Extend для проверки версий (устарел, предпочитаю кодовое имя)\\
 +codename: уникальное кодовое имя плагина в разделе mods\\
 +compatibility: список поддерживаемых версий MyBB в формате CSV. Например: “121,123”, “12*”. Поддерживаются групповые символы.
 +==== N.B. ====
 +//Кодовое имя// совпадает с именем плагина, которое используется для обозначения функций. Желательно использовать следующий код:
 +<sxh php>$codename = str_replace('.php', '', basename(__FILE__));</sxh>
 +===== _install() =====
 +Вызывается при установке плагина нажатием кнопки "Установить" в менеджере плагинов.
 +Если процедуры установки не существует, кнопка "Установить" не отображается в панели администратора, и предполагается, что любая работа будет выполняться в подпрограмме ''_activate()''.
 +
 +В этой функции обычно создаются необходимые таблицы, поля и настройки.
 +===== _is_installed() =====
 +
 +Вызывается на странице управления плагином, чтобы определить: установлен плагин или нет.
 +
 +Это должно вернуть TRUE, если плагин установлен (проверка таблицы, поля и т. д.) или FALSE, если плагин не установлен.
 +
 +Обычно используется существование таблицы или настройки, созданной в функции ''_install()'', чтобы определить, установлен ли плагин или нет. Ниже приведена общая реализация, предполагающая, что создана таблица с именем ''my_plugin'':
 +<sxh php>function myplugin_is_installed()
 +{
 +    global $db;
 +    if($db->table_exists("my_plugin"))
 +    {
 +        return true;
 +    }
 +    return false;
 +}</sxh>
 +===== _uninstall() =====
 +Вызывается всякий раз, когда плагин должен быть удален. Функция должна удалять все следы плагина от установки (таблицы и т. д.). Если функция отсутствует, кнопка удаления не отображается в панели администратора.
 +===== _activate() =====
 +Вызывается при активации плагина через панель администратора. Функция должна делать плагин “видимым” при добавлении/изменении шаблонов, изменений языка и т. д.
 +===== _deactivate =====
 +Вызывается при деактивации плагина. Функция должна “прятать” действия плагина из шаблонов/изменения шаблонов и т. д. Это означает, что данная функция не должна удалять любую информацию, такую как таблицы, поля и т. д.; функция обрабатываться подпрограммой ''_uninstall''. Когда плагин удаляется, эта процедура также будет вызвана перед ''_uninstall()'', если плагин активен.
 +====== Хуки плагина ======
 +
 +Чтобы ваш плагин действительно работал, вам нужно "подключить" свой код к MyBB. Это можно сделать во многих местах кода MyBB.
 +
 +Вы можете найти список хуков [[https://docs.mybb.com/1.8/development/plugins/hooks/|здесь]]. В качестве альтернативы можно выполнить следующую команду в системе *nix в каталоге MyBB:
 +<sxh ssh>grep -inr '$plugins->run_hooks' ./</sxh>
 +===== Основное использование =====
 +Сначала добавьте хук, поместив следующий код над функцией ''_info()'' в верхней части файла плагина:
 +<sxh php>$plugins->add_hook('<hook name>', '<function name>');</sxh>
 +Где ''<hook name>'' - это имя хука, который вы хотите использовать, а ''<function name>'' - это имя функции в вашем плагине, которая будет запускаться каждый раз при вызове этого хука. 
 +<WRAP center round important 60%>
 +Внимание: здесь используется //наименование// функции, а не ее вызов.
 +</WRAP>
 +Вот пример, который использовал ''index_start'' хук и вызывает функцию ''do_something()'':
 +<sxh php>$plugins->add_hook('index_start', 'do_something');</sxh>
 +Теперь можно реализовать указанную функцию. Эта функция должна быть либо в файле плагина, либо включена вашим плагином.
 +Например, если вы определили следующую функцию в этом файле плагина, она будет вызываться каждый раз при вызове ''index_start'':
 +<sxh php>function do_something()
 +{
 +    // Do whatever you want here
 +}</sxh>
 +Для достижения большинства целей необходимо взаимодействовать с глобальными переменными MyBB, такими как ''$mybb'', ''$user'', ''$db'' и т. д.
 +Например, можно проверить, является ли текущий пользователь администратором:
 +<sxh php>function do_something()
 +{
 +    global $mybb;
 +    if($mybb->usergroup['cancp'] == 1)
 +    {
 +        // Admin only
 +    }
 +    else
 +    {
 +        // Everyone else
 +    }
 +}</sxh>
 +===== Хуки с аргументами =====
 +
 +Некоторые хуки также передают значение, относящееся к местоположению, где они вызываются. Эти хуки добавляются таким же образом, за исключением того, что вы должны добавить аргумент в функцию плагина. В некоторых случаях необходимо также вернуть это значение (которое может быть изменено вашим плагином).
 +
 +Вот пример двух хуков:
 +<sxh php>$plugins->add_hook("pre_output_page", "hello_world");
 +$plugins->add_hook("postbit", "hello_world_postbit");</sxh>
 +И две связанные функции плагина, первая изменяет содержимое ''$content'' и возвращает его, вторая изменяет значение, передаваемое по ссылке.
 +<sxh php>function hello_world($page)
 +{
 + // This will add Hello World to the top of pages
 + $page = str_replace(
 +        '<div id="content">',
 +        '<div id="content"><p>Hello World!</p>',
 +        $page
 + );
 + return $page;
 +}
 +
 +function hello_world_postbit(&$post)
 +{
 + // This will add Hello World to the top of all posts
 + $post['message'] = '<strong>Hello world!</strong><br />' . $post['message'];
 +}</sxh>
 +Вам нужно будет проверить контекст, в котором вызывается хук, чтобы определить, нужно ли возвращать аргумент обратно, или он должен быть изменен по ссылке.
 +===== Другие варианты хука =====
 +Есть еще два необязательных аргумента, которые можно передать в ''$plugins->add_hook()'': priority и file.
 +Например:
 +<sxh php>$plugins->add_hook('<hook name>', '<function name>', '<priority>', '<file>');
 +
 +// With values
 +$plugins->add_hook('index_start', 'do_something', 5, 'anotherfile.php');</sxh>
 +''<Priority>'' учитывает, есть ли две или более функции, связанные с обработчиком. Меньшее значение в параметре priority будет означать, что функция будет выполнена раньше других функций с более высоким приоритетом (например, приоритет ''0'' будет выполняться до ''10''). Приоритет по умолчанию ''10''. Обычно вам не нужно будет использовать этот параметр, если у вас нет двух плагинов, которые конфликтуют друг с другом в одном хуке.
 +
 +Имя файла в параметре ''<file>'' будет ''included-once'' при запуске хука, перед выполнением функции.
 +===== Настройки плагина =====
 +Плагины могут создавать настройки, которые интегрируются с вкладкой "конфигурация" ACP. Общие параметры плагина должны быть реализованы с помощью этого метода для обеспечения согласованности между плагинами.
 +
 +Настройки обычно добавляются и удаляются в методах ''_install()'' и ''_uninstall()'' соответственно, так что плагин может быть деактивирован без потери настроек.
 +===== Добавление настроек =====
 +Для создания параметров необходимо сначала создать группу параметров и получить ее идентификатор:
 +<sxh php>global $db, $mybb;
 +
 +$setting_group = array(
 +    'name' => 'mysettinggroup',
 +    'title' => 'My Plugin Settings',
 +    'description' => 'This is my plugin and it does some things',
 +    'disporder' => 5, // The order your setting group will display
 +    'isdefault' => 0
 +);
 +
 +$gid = $db->insert_query("settinggroups", $setting_group);</sxh>
 +Теперь вы можете добавить некоторые настройки в группу:
 +<sxh php>$setting_array = array(
 +    // A text setting
 +    'fav_colour' => array(
 +        'title' => 'Favorite Colour',
 +        'description' => 'Enter your favorite colour:',
 +        'optionscode' => 'text',
 +        'value' => 'Blue', // Default
 +        'disporder' => 1
 +    ),
 +    // A select box
 +    'green_good' => array(
 +        'title' => 'Is green good?',
 +        'description' => 'Select your opinion on whether green is good:',
 +        'optionscode' => "select\n0=Yes\n1=Maybe\n2=No",
 +        'value' => 2,
 +        'disporder' => 2
 +    ),
 +    // A yes/no boolean box
 +    'enable_lasers' => array(
 +        'title' => 'Enable lasers?',
 +        'description' => 'Do you want the lasers turned on?',
 +        'optionscode' => 'yesno',
 +        'value' => 1,
 +        'disporder' => 3
 +    ),
 +);
 +
 +foreach($setting_array as $name => $setting)
 +{
 +    $setting['name'] = $name;
 +    $setting['gid'] = $gid;
 +
 +    $db->insert_query('settings', $setting);
 +}
 +
 +// Don't forget this!
 +rebuild_settings();</sxh>
 +Следующий тип поля настройки (он же. код опций) поддерживает значения:
 +  * text : обычное текстовое поле
 +  * numeric : числовое поле
 +  * textarea : большое текстовое поле
 +  * yesno : логическое значение да/нет
 +  * onoff : логическое управление вкл/выкл
 +  * select : поле выбора (в формате select с последующим = по одному в новой строке)
 +  * forumselect : встроенный переключатель + флажок для выбора форумов
 +  * forumselectsingle : встроенный флажок, чтобы выбрать только один форум
 +  * groupselect : встроенный переключатель + флажок для выбора групп
 +  * groupselectsingle : встроенный флажок, чтобы выбрать только одну группу пользователей
 +  * radio : набор переключателей (в формате select, за которым следует = с одним в новой строке)
 +  * checkbox : логическое поле checkbox
 +  * language : выбор языка
 +  * adminlanguage : язык админ панели
 +  * cpstyle : выбор темы
 +  * php : php код
 +
 +Если вы установите плагин, вы теперь сможете увидеть вашу новую группу настроек и ее настройки на вкладке “конфигурация” ACP.
 +
 +Вы можете открыть эти значения через ''$mybb->settings['<setting name>']'', например ''$mybb->settings['enable_lasers']''.
 +===== Удаление настроек =====
 +Если вы добавляете настройки в функцию ''_install()'', их также необходимо удалить в функции ''_uninstall()''.
 +
 +Вот пример удаления вышеуказанных настроек:
 +<sxh php>global $db;
 +
 +$db->delete_query('settings', "name IN ('fav_colour','green_good','enable_lasers')");
 +$db->delete_query('settinggroups', "name = 'mysettinggroup'");
 +
 +// Don't forget this
 +rebuild_settings();</sxh>
 +===== Использование параметров для ''_is_installed()'' =====
 +
 +Вы можете использовать один из параметров для реализации функции ''_is_installed()''; 
 +Например:
 +<sxh php>global $mybb;
 +if(isset($mybb->settings['green_good']))
 +{
 +    return true;
 +}
 +
 +return false;</sxh>
 + --- //[[[email protected]|Vladimir]] 24.12.2018 17:38//
основы_плагинов.1545645500.txt.gz · Последнее изменение: 24.12.2018 10:58 — vladimir