Структурирование информации
1. Очевидно, что пора уже создать на форуме разработчиков разделы как на форуме тех. поддержки. Нужен отдельный раздел с постами работников Webasyst - искать инфу не очень удобно. Разделы: Обновления Webasyst, Статьи, Вопросы, Обсуждения.
2. Добавить в приложения конфиг hooks.php/events.php содержащий хуки и их описание. Как вариант, добавить в app.php.
return array( 'frontend_product' => array( 'name' => 'frontend_product', 'description' => 'Интерфейсный хук, расширяющий содержимое страницы товара на витрине.', 'params' => 'array $params ...', 'return' => 'array ...', 'example' => '...', ), // ... );
Вариант 2: добавить класс содержащий handler-методы для хуков приложения.
/** * Интерфейс хэлпера для хуков. * Наследующий класс должен содержать публичные методы описывающие обработчики хуков. * Название методой совпадает с названием событий. */ interface waiAppHooks { } /** * Класс наследующий интерфейс, в данном случае содержит хуки приложения "Магазин". */ class shopHoocks implements waiAppHooks { /** * Интерфейсный хук, расширяющий содержимое страницы товара на витрине. * * @param array $product * array data массив с информацией о товаре * shopProduct product экземпляр класса товара * @return array * string menu cодержимое рядом со ссылками на дополнительные страницы товара * string cart cодержимое рядом с кнопкой «В корзину» * string block блок дополнительной информации в боковой части страницы * string block_aux блок дополнительной информации в основной части описания товара */ public function frontend_product(array $product) { return array( 'menu' => '...', 'cart' => '...', 'block' => '...', 'block_aux' => '...', ); } /** * Обрабатывается непосредственно перед полным сбросом содержимого интернет-магазина. * Удобно использовать для очистки данных плагина в базе данных. * * @return void */ public function reset() { $model = new shopMyPluginFooModel; $model->truncate(); } } /** * Класс хэлпер для получения информации о хуках приложения */ class waAppHooks { /** * @var waiAppHooks */ protected $helper; /** * @var array hooks ['name' => 'method', 'description' => 'method comment', 'example' => 'method code'] */ protected $hooks = []; /** * Create helper. * @param string $app_id * @return void */ public function __construct($app_id) { $class = $app_id.'Hooks'; if (!class_exists($class)) { $path = wa()->getAppPath('lib/classes/'.$class.'.php', $app_id); if (!file_exists($path)) { throw new waException('Class "'.$class.'" not exist.'); } include_once $path; } $this->helper = new $class; } /** * Get hooks info. * @return array */ public function getAll() { $methods = get_class_methods($this->helper); if (count($methods) != count($this->hooks)) { foreach (array_diff($methods, array_keys($this->hooks)) as $method) { $this->get($method); } } return $this->hooks; } /** * Get hook info. * @param string $name event name * @return array */ public function get($name) { if (!isset($this->hooks[$name])) { if (!method_exists($this->helper, $name)) { throw new waException('Event "'.$name.'" not exist.'); } $method = new ReflectionMethod($this->helper, $name); $this->hooks[$name] = array( 'name' => $name, 'description' => $this->getComment($method), 'example' => $this->getCode($method), ); } return $this->hooks[$name]; } /** * Get method comment. * @param ReflectionMethod $method * @return string */ protected function getComment(ReflectionMethod $method) { $lines = explode("\n", $method->getDocComment()); $lines = array_slice($lines, 1, -1); foreach ($lines as & $line) { $line = trim($line); $line = mb_substr($line, 2); } return implode("\n", $lines); } /** * Get method code. * @param ReflectionMethod $method * @return string */ protected function getCode(ReflectionMethod $method) { $start_line = $method->getStartLine(); $lines = file($method->getFileName()); $offset = mb_strlen($lines[$start_line]) - mb_strlen(ltrim($lines[$start_line])); $lines = array_slice( $lines, $start_line - 1, $method->getEndLine() - $start_line + 1 ); foreach ($lines as & $line) { $line = mb_substr($line, $offset); } return trim(implode('', $lines)); } }
Это автоматом решит проблему с обновлением инфы по хукам на сайте.
2 комментария
Если не ошибаюсь, то информация о хуках собирается автоматически. Может просто не запускали еще после релиза.
Врядли или алгоритм кривой, даже сейчас там не все хуки указаны.