Существуют ли какие-либо события, которые "основаны на конкретном дескрипторе макета" или "основаны на конкретном контроллере"?


Итак, у меня есть ситуация, когда мне действительно нужно наблюдать событие, которое является layout handle конкретным. В моем случае я хочу установить корневой шаблон для дескриптора catalog_category_default. Я думаю, что могу использовать controller_action_layout_load_before для этой цели. Но, как указывает его название, он может звонить каждый раз, когда контроллер пытается загрузить макет (я не уверен в этом пункте). Поскольку существует множество контроллеров (мы все знаем, что Magento - гигантская система!!), я считаю, что это событие неуместно в моем случае. Этого достаточно, если я смогу прослушивание события загрузки макета на основе контроллера каталога, чтобы избежать нежелательных observations? Поэтому мой вопрос таков:

  1. Можем ли мы иметь события particular layout handle based или particular controller based ?

  2. Если я слушаю controller_action_layout_load_before, это делает нежелательные наблюдения? Влияет ли это на производительность magento?

Author: Fabian Schmengler, 2014-07-10

2 answers

  1. Есть некоторые страницы, на которых есть конкретные события, но это не общий случай.
    Например, для страницы категории у вас есть события catalog_controller_category_init_before и catalog_controller_category_init_after, но они отправляются до загрузки макета. Таким образом, у вас нет доступа к блокам страниц в этих событиях.
    Для страницы продукта у вас есть события catalog_controller_product_init_before и catalog_controller_product_init, но опять же у вас нет доступа к макету.

  2. Конечно, controller_action_layout_load_before сделает нежелательные наблюдения. Он отправляется для всех страниц, но я не думаю, что влияние будет очень большим. Если вы правильно напишете своих наблюдателей, это не должно быть видно. Я имею в виду, что первое, что вам следует сделать, это проверить, удален ли ваш наблюдатель с нужной страницы. Если нет, просто ничего не возвращайте.

Для остальных из вас проблема, изменение макетов в разных случаях, я уже написал ответ здесь: https://magento.stackexchange.com/a/29329/146

 2
Author: Marius, 2017-04-13 12:55:04
public function someFunc($observer)
    {
      $action = $observer->getEvent()->getAction();
      $actionName = $action->getFullActionName();
      if($actionName == 'catalog_category_default')
      {
        // your code.
      }
    }
 1
Author: Pradeep Sanku, 2014-07-10 10:14:38