Drupal context vs blocks

Context работает быстрее родных блоков, но не лучше

Интересная особенность всех сторонних drupal модулей — каждый нужно использовать с осторожностью и понимать как он работает, иначе беда. Вот с такой бедой и столкнулся вчера.

На одном проекте для вывода блоков используется context вместо стандартных функционала. По заверениям коллег он работает быстрее когда на проекте очень много блоков, да и сделан он на ctools, с features лучше интегрирован, поддерживает больше правил отображения, умеет не только блоки выводить (многое умеет), и в целом приятнее настраивать. Но, как у всех хороших инструментов всегда есть свое «но», столкнулся с проблемой что не подтягиваются темплейты из темы для некоторых блоков которые выведены через context, и, что удивительно, только для пользователей с ролью администратор.

Шаблоны в теме не работали для om_maximenu, который выводился в mini panels, которая в свою очередь выводилась через context. Да, зоопарк еще тот, но добавляет скорости в разработку и просто нереальной гибкости. Первым делом начал грозить на om_maximenu. Модуль написан не лучшим образом, по-этому решил дебажить его. Потратил почти пол дня и ничем это не закончилось, была даже идея избавится от него и переделать динамическую меню. Потом все таки решил разобраться в каких случаях темплейты подхватываются, а в каких нет.

Интересная деталь которая натолкнула меня на решение: при очистке кеша со страниц администрирования (и темой seven) темплейты не подтягивались, а при очистке через админ меню с фронтенда — все нормально. Какая-то мысль промелькнула у меня тогда в голове, а над головой включилась лампочка, как бывает в мультиках. И тогда я понял в чем дело.

А дело было в том что для блока maximenu который выведен в mini panels было включено кеширование! А модуль context при выводе блоков, в отличии от стандартного функционала, не учитывает тему . Вот же оно! Блок выведен в регион header, в теме seven этого региона нет, но рендер блока происходит (только он не подтягивает темплейты из фронтенд темы, потому что показывается блок в другой теме) и кеш создается, а когда пользователь переходит на другие страницы с темой сайта, то блок выводится из кеша.

Такой замечательный баг нашел, или это фича? Ну, во всяком случае, не ленитесь разбираться как работают другие contrib модули которые используете в проектах. И если хотите еще услышать о подобных «фичах» то подписывайтесь на блог в социалочках.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *