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

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

  • 357 просмотров
  • 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');

Для вступления изменений в силу, не забудьте обновить плагин в "админке".

Аватар

5. admin

  • 19.09.2023 17:35

Использовать аргументы функции и другие переменные, определенные до хука, можно как есть, без каких-либо дополнительных действий.

Аватар

4. Алексей

  • 19.09.2023 09:35

А как в таком случае использовать переменную находящуюся в плагине comlist?  Мне нужно использовать в такой функции то, что передано в comlist в качестве аргумента.

Аватар

3. Алексей

  • 18.09.2023 21:17

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

Аватар

2. admin

  • 18.09.2023 20:45

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

Аватар

1. Алексей

  • 18.09.2023 20:10

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

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

Имя:
Для редактирования комментария осталось 10 минут