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

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


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

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
основы_плагинов [24.12.2018 15:21]
vladimir Переведен еще один блок
основы_плагинов [24.12.2018 17:41] (текущий)
vladimir Блок полностью переведен
Строка 113: Строка 113:
 Вы можете найти список хуков [[https://docs.mybb.com/1.8/development/plugins/hooks/|здесь]]. В качестве альтернативы можно выполнить следующую команду в системе *nix в каталоге MyBB: Вы можете найти список хуков [[https://docs.mybb.com/1.8/development/plugins/hooks/|здесь]]. В качестве альтернативы можно выполнить следующую команду в системе *nix в каталоге MyBB:
 <sxh ssh>grep -inr '$plugins->run_hooks' ./</sxh> <sxh ssh>grep -inr '$plugins->run_hooks' ./</sxh>
-===== Основное Использование =====+===== Основное использование =====
 Сначала добавьте хук, поместив следующий код над функцией ''_info()'' в верхней части файла плагина: Сначала добавьте хук, поместив следующий код над функцией ''_info()'' в верхней части файла плагина:
 <sxh php>$plugins->add_hook('<hook name>', '<function name>');</sxh> <sxh php>$plugins->add_hook('<hook name>', '<function name>');</sxh>
Строка 142: Строка 142:
     }     }
 }</sxh> }</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//
основы_плагинов.1545661278.txt.gz · Последнее изменение: 24.12.2018 15:21 — vladimir