Добро пожаловать на сайт SEDBY

Используем хуки для добавления собственных данных в сторонний плагин

Популярные запросы: тема Omnis, плагин Pagelist, Cotonti 0.9.25, ЧПУ, Font Face

  • 529 просмотров
  • 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 в качестве аргумента.

Аватар

Напишите, пожалуйтса, статью про правильное добавление хуков в плагины

Аватар

В коробочных плагинах хуки всегда есть. В сторонних тоже. Если не хватает, разработчики всегда добавят. Вообще, хуки в Котонти рулят...

Аватар

Для этого нужно чтобы все плагины такие танцы поддерживали.

Новый комментарий

Ваш комментарий будет доступен для редактирования 10 минут
Блок пользователя
Регистрация на нашем сайте позволит вам общаться на форумах и получить доступ к другому полезному функционалу
Вы вошли как Гость