Используем хуки для добавления собственных данных в сторонний плагин
Популярные запросы: тема Omnis, плагин Pagelist, Cotonti 0.9.24.2, ЧПУ, Font Face
- 466 просмотров
- 18 сентября, 2023
- Обновлено: 18 сентября, 2023
- admin
- Время чтения: 2 минуты
Прежде чем начать, нам необходимо создать сводный плагин проекта, в который мы будем добавлять части для модификации функционала ядра, коробочных или сторонних плагинов. Предположим, что плагин будет называться myproject.
В папке plugins создаем подпапку myproject, а в ней файл myproject.setup.php:
<?php /* ==================== [BEGIN_COT_EXT] Code=myproject Name=My Project Plugin Description= Version=1.00 Date=2023-09-18 Author=Me Copyright= Notes= SQL= Auth_guests=R Lock_guests=12345AW Auth_members=R Lock_members=12345AW [END_COT_EXT] [BEGIN_COT_EXT_CONFIG] [END_COT_EXT_CONFIG] ==================== */ defined('COT_CODE') or die('Wrong URL');
В папке myproject создаем папку inc. В ней разместится файл myproject.functions.php, который будет содержать наши пользовательские функции:
<?php /** * Myproject Plugin / Functions * * @package myproject */ defined('COT_CODE') or die('Wrong URL'); function my_func() { // My code here... }
Теперь рассмотрим использование хука для модификации тегов, формируемых в цикле PAGE_ROW плагина Comlist. Для этого в функции sedby_comlist присутствует соответствующий хук:
... /* === Hook - Part 1 === */ $extp = cot_getextplugins('comlist.loop'); /* ===== */ ... /* === Hook - Part 2 === */ foreach ($extp as $pl) { include $pl; } /* ===== */ ...
Создаем файл myproject.comlist.loop.php:
<?php /* ==================== [BEGIN_COT_EXT] Hooks=comlist.loop [END_COT_EXT] ==================== */ defined('COT_CODE') or die('Wrong URL'); // Добавляем наш файл пользовательских функций include_once cot_incfile('myproject', 'plug'); // Создаем пользовательский тег в цикле $my_var = my_func(); $t->assign('PAGE_ROW_MY_TAG', $my_var);
Теперь установим наш плагин в панели администрирования сайта и получим тег {PAGE_ROW_MY_TAG}, который сможем использовать в блоке PAGE_ROW любого шаблона функции sedby_comlist(). При этом мы не вносили никаких изменений в плагин comlist. Это означает, что все обновления данного плагина можно выполнять без оглядки на созданный нами дополнительный функционал.
Последнее: чтобы немного оптимизировать код, подключение файла с пользовательскими функциями можно выполнять не в цикле, а выше, например через хук comlist.first. Для этого закомментируем строку 11 файла myproject.comlist.loop.php и создадим файл myproject.comlist.first.php:
<?php /* ==================== [BEGIN_COT_EXT] Hooks=comlist.first [END_COT_EXT] ==================== */ defined('COT_CODE') or die('Wrong URL'); // Добавляем наш файл пользовательских функций include_once cot_incfile('myproject', 'plug');
Для вступления изменений в силу, не забудьте обновить плагин в "админке".
Использовать аргументы функции и другие переменные, определенные до хука, можно как есть, без каких-либо дополнительных действий.
А как в таком случае использовать переменную находящуюся в плагине comlist? Мне нужно использовать в такой функции то, что передано в comlist в качестве аргумента.
Напишите, пожалуйтса, статью про правильное добавление хуков в плагины
В коробочных плагинах хуки всегда есть. В сторонних тоже. Если не хватает, разработчики всегда добавят. Вообще, хуки в Котонти рулят...
Для этого нужно чтобы все плагины такие танцы поддерживали.
Новый комментарий