Итак, я хочу добавить собственный дескриптор макета для всех страниц просмотра категорий ... дескриптор, который должен быть загружен, зависит от определенных параметров категории, поэтому дескриптор необходимо добавлять программно с помощью $page->addPageLayoutHandles()
Кажется легким ..? Очевидно нет
Magento 2 предоставляет замечательную систему плагинов, которую я собирался использовать естественным образом, просто определите afterExecute()
плагин, который будет запускаться после исходной категории, execute()
и вставляйте любые обновления в объект Page оттуда.
К сожалению, это не совсем так работает .. причина в том, что оригинальный execute()
метод (в самом конце) будет выполнен $page->getConfig()->addBodyClass()
- вызов этого метода автоматически заставит макет быть полностью загруженным и сгенерированным, поэтому любые последующие попытки добавить новый Дескрипторы макета для Page совершенно бесполезны. Я посмотрел вокруг, чтобы найти какие-то не очень элегантные способы достижения того же самого (все еще используя плагины) .. не нашел ни одного.
В итоге я запустил свой собственный контроллер для просмотра категорий, однако я бы не хотел оставлять его таким.
Итак, мой вопрос ... как я могу добавить новые маркеры макета страницы (программно) для просмотра по категориям? и сделать это элегантно.
$page->getConfig()->addBodyClass()
загружает и генерирует ваш макет? У меня сейчас аналогичная задача, только со страницами CMS.