Существуют ли какие-либо события, которые "основаны на конкретном дескрипторе макета" или "основаны на конкретном контроллере"?
Итак, у меня есть ситуация, когда мне действительно нужно наблюдать событие, которое является layout handle
конкретным. В моем случае я хочу установить корневой шаблон для дескриптора catalog_category_default
. Я думаю, что могу использовать controller_action_layout_load_before
для этой цели. Но, как указывает его название, он может звонить каждый раз, когда контроллер пытается загрузить макет (я не уверен в этом пункте). Поскольку существует множество контроллеров (мы все знаем, что Magento - гигантская система!!), я считаю, что это событие неуместно в моем случае. Этого достаточно, если я смогу прослушивание события загрузки макета на основе контроллера каталога, чтобы избежать нежелательных observations
? Поэтому мой вопрос таков:
Можем ли мы иметь события
particular layout handle based
илиparticular controller based
?Если я слушаю
controller_action_layout_load_before
, это делает нежелательные наблюдения? Влияет ли это на производительность magento?
2 answers
Есть некоторые страницы, на которых есть конкретные события, но это не общий случай.
Например, для страницы категории у вас есть событияcatalog_controller_category_init_before
иcatalog_controller_category_init_after
, но они отправляются до загрузки макета. Таким образом, у вас нет доступа к блокам страниц в этих событиях.
Для страницы продукта у вас есть событияcatalog_controller_product_init_before
иcatalog_controller_product_init
, но опять же у вас нет доступа к макету.Конечно,
controller_action_layout_load_before
сделает нежелательные наблюдения. Он отправляется для всех страниц, но я не думаю, что влияние будет очень большим. Если вы правильно напишете своих наблюдателей, это не должно быть видно. Я имею в виду, что первое, что вам следует сделать, это проверить, удален ли ваш наблюдатель с нужной страницы. Если нет, просто ничего не возвращайте.
Для остальных из вас проблема, изменение макетов в разных случаях, я уже написал ответ здесь: https://magento.stackexchange.com/a/29329/146
public function someFunc($observer)
{
$action = $observer->getEvent()->getAction();
$actionName = $action->getFullActionName();
if($actionName == 'catalog_category_default')
{
// your code.
}
}