[РЕШЕНО]Использование хуков в плагине

Дочитал документацию и этот топик, пытаюсь добавить поле при регистрации, но, похоже, поставил функцию не там, где её ищет движок:

//PluginMyPlugin.class.php
public function Init() {
      $this->Hook_AddExecFunction('template_form_registration_end','add_field',10);
    }
    public function add_field($aVars) {
      var_dump("some additional field");
    }

В этом случае при регистрации появляется следующая ошибка:
Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'add_field' not found or invalid function name in /var/www/localhost/htdocs/live/engine/modules/hook/Hook.class.php on line 139

Также пробовал создавать внутри плагина каталог classes/hooks с файлом hookMyPlugin.class.php:
class PluginMyPlugin_HookMyPlugin extends Hook {
public function RegisterHook ()
{
  this -> AddHook('template_form_registration_end','RegEnd',__CLASS__,10);
}
public function RegEnd ($aVars) {
  //return $this -> Viewer_Fetch (Plugin::GetTemplatePath (__CLASS__) . 'reg_end.tpl');
  var_dump("Hook it!");
}
}

Но в этом случае совсем ничего не происходит. Если просто добавить хук в /classes/hooks в корневой каталог, то всё работает. Но хотелось бы расположить все файлы внутри каталога плагина

6 комментариев

avatar
А посмотреть код стандартного плагина page?
class PluginPage_HookPage extends Hook {
public function RegisterHook() {
$this->AddHook('template_main_menu','Menu');
}

public function Menu() {
$aPages=$this->PluginPage_Page_GetPages(array('pid'=>null,'main'=>1,'active'=>1));



$this->Viewer_Assign('aPagesMain',$aPages);
return $this->Viewer_Fetch(Plugin::GetTemplatePath(__CLASS__).'main_menu.tpl');
}
}
avatar
Я делал аналогично, не работает. Этот плагин модифицирует свою страницу, а не стандартную.
avatar
в плагине l10n можно посмотреть пример добавления поля к форме регистрации
avatar
Попробую его запустить. Пока он не работает со стандартным классом Router, а с модифицированным под нужды плагина не работает последняя версия livestreet. М.б. нужно вручную скопировать недостающие методы. Но поле там не через хуки добавляется, судя по коду
avatar
Господи, какой я осел. Дело было в строчной букве в названии:)
avatar
в первом варианте попытка вызвать метод хука через функцию, здесь нужно использовать AddExecHook, а не AddExecFunction
во втором не знаю в чем проблема, возможно в регистрах наименования файлов, либо плагин не активирован
  • ort
  • 0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.