Добавьте включенный и/или эффективный режим в виджеты
Я пытаюсь расширить функциональность вставки виджетов magento (в меню CMS). в частности, я хотел бы добавить "Включено", а также активное От/До.
Я могу сделать это в интерфейсе администратора обычным способом, однако, похоже, я не могу отследить, как загружаются обновления макета. в идеале я хотел бы иметь возможность перехватить точку, в которой он получает список виджетов из коллекции db\, и применить некоторую условную логику, чтобы игнорировать виджеты, которые еще не активны. Я знаю, что если я заставлю это работать, кэширование может сделать его ненадежным, но это меньше беспокоит.
Если бы кто-нибудь мог указать мне правильное направление, я был бы признателен.
Заранее благодарю.
2 answers
Итак, с точки зрения внешнего интерфейса, что происходит с этими обновлениями макета, выглядит следующим образом.
Сначала они хранятся в таблице core_layout_update
. Это сохранит дескриптор и необходимый фрагмент кода xml. Обратите внимание, что связь между обновлением виджета и макета находится в таблице widget_instance_page_layout
.
Во время загрузки макета в файле Mage_Core_Model_Layout_Update
есть вызов для объединения всей информации о макете на основе дескриптора.
Это, в свою очередь, вызывает $this->fetchDbLayoutUpdates($handle);
, который будет загружать любую информацию на основе заданный дескриптор макета из таблицы core_layout_update
и создайте строку xml из результатов. Затем это обновление будет добавлено в макет.
Я бы предположил, что одной из функций, которую вы могли бы расширить, было бы Mage_Core_Model_Resource_Layout::fetchUpdatesByHandle
и добавление ваших проверок фильтров здесь.
Похоже, что это сделано в Mage/Widget/Model/Widget.php
. Функция getWidgetsXml() строит список настроенных виджетов. Похоже, у него уже есть опция фильтрации, но переписать эту функцию, кажется, проще всего. Просто сначала проверьте, что вы хотите жестко закодировать, а затем позвольте ему выполнить проверку фильтра.