Адаптация плагина к плагину. Как правильно? (Решено)
Дано:
— плагин «One», который инжектит поле по хуку {hook run='standart_hook'}
— плагин «Two», в котором используется шаблон с нестандартным хуком {hook run='modified_hook'}
Для адаптации плагина к плагину при использовании «нестандартных» хуков нашел 3 варианта:
1. В плагине One в файле \plugins\one\classes\hooks\HookOne.class.php
2. В плагине Two в файле \plugins\two\classes\hooks\HookTwo.class.php
3. В плагине Two в папке \plugins\two\classes\hooks\ создаем файл HookOne.class.php
Какой из этих вариантов наиболее верный?
Решение (by PSNet ):
Наиболее оптимальный вариант 3.
— плагин «One», который инжектит поле по хуку {hook run='standart_hook'}
— плагин «Two», в котором используется шаблон с нестандартным хуком {hook run='modified_hook'}
Для адаптации плагина к плагину при использовании «нестандартных» хуков нашел 3 варианта:
1. В плагине One в файле \plugins\one\classes\hooks\HookOne.class.php
class PluginOne_HookOne extends Hook { public function RegisterHook() { ... if (class_exists('PluginTwo')) { $plugins = $this->Plugin_GetActivePlugins(); if (in_array('two', $plugins)) { $this->AddHook('template_modified_hook', 'field_insert'); } } } }
2. В плагине Two в файле \plugins\two\classes\hooks\HookTwo.class.php
class PluginTwo_HookTwo extends Hook { public function RegisterHook() { ... if (class_exists('PluginOne')) { $plugins = $this->Plugin_GetActivePlugins(); if (in_array('one', $plugins)) { $this->AddHook('template_modified_hook', 'field_insert', 'PluginOne_HookOne'); } } } }
3. В плагине Two в папке \plugins\two\classes\hooks\ создаем файл HookOne.class.php
class PluginTwo_HookOne extends Hook { public function RegisterHook() { $plugins = Engine::getInstance()->GetPlugins(); if(isset($plugins['one'])){ $this->AddHook('template_modified_hook', 'field_insert', 'PluginOne_HookOne'); } } }
Какой из этих вариантов наиболее верный?
Решение (by PSNet ):
Наиболее оптимальный вариант 3.
9 комментариев
Думаю, что раз плагин Two использует свои «нестандартные» хуки, то ему и подстраиваться под другие плагины. Т.е. 2-й и 3-й варианты. Но какой лучше?
Кстати я не совсем понимаю идет ли проверка на «активированность» плагина One в 3-м варианте?
— плагин Niceurl добавляет возможность указать url вручную при добавлении стандартных типов топика (hook run='add_topic_some-topic-type_begin');
— плагин Filearchive добавляет тип топика «Файл» с аналогичным хуком (hook run='add_topic_file_begin');
Задача:
сделать возможность добавлять вручную url при добавлении типа топика «Файл»
Вариант создания стороннего плагина с хуком, который включает место для Niceurl вполне адекватен.
и
С верхним понятно: есть ли класс плагина и активен ли он.
А как работает нижний — проверяет ли «активированность» плагина?
означает что плагин one активирован т.к. главный класс существует. Но это не очень красиво. Просто, быстро, эффективно, но «не в духе лс».
2. код:
делает тоже самое, но читает xml файлы каждого плагина, получает всю информацию о них (автора, описание и т.п.). В духе лс, но в данной ситуации получает много лишней информации. Долго, затратно по ресурсам.
3. код:
возвращает только коды активных плагинов. В духе лс, просто, быстро и без обращения к фс (без чтения xml файлов). Данный список уже содержится в ядре и поэтому ресурсы не тратятся.
Для вашей простой проверки подойдет 1 или 3 вариант. Оба быстрые и рабочие, но последний более красив и логичен для движка.