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

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


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

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
основы_плагинов [24.12.2018 15:22]
vladimir
основы_плагинов [24.12.2018 17:41] (текущий)
vladimir Блок полностью переведен
Строка 142: Строка 142:
     }     }
 }</sxh> }</sxh>
 +===== Хуки с аргументами =====
  
- --- //[[[email protected]|Vladimir]] 24.12.2018 15:22//+Некоторые хуки также передают значение, относящееся к местоположению, где они вызываются. Эти хуки добавляются таким же образом, за исключением того, что вы должны добавить аргумент в функцию плагина. В некоторых случаях необходимо также вернуть это значение (которое может быть изменено вашим плагином). 
 + 
 +Вот пример двух хуков: 
 +<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//
основы_плагинов.1545661378.txt.gz · Последнее изменение: 24.12.2018 15:22 — vladimir