Используем хуки для добавления собственных данных в сторонний плагин
Популярные запросы: тема Omnis, плагин Pagelist, Cotonti 0.9.25, ЧПУ, Font Face
- 535 просмотров
- 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 в качестве аргумента.
Напишите, пожалуйтса, статью про правильное добавление хуков в плагины
В коробочных плагинах хуки всегда есть. В сторонних тоже. Если не хватает, разработчики всегда добавят. Вообще, хуки в Котонти рулят...
Для этого нужно чтобы все плагины такие танцы поддерживали.
Новый комментарий
Ошибка
Выполнено