Настройка страницы Magento CMS Динамические метаданные - PullRequest
1 голос
/ 02 февраля 2012

Как динамически настроить метаданные (описание, заголовок, ключевые слова) для страницы cms? Метаданные должны генерироваться в зависимости от параметров в URL-адресе (пример: ?part=light).

Я пытался поместить {{block type="myblock"}} в ключевые слова на вкладке метаданных, но это не дает оценки.

Я могу поместить это {{block type="myblock"}} в Контент, и он вызывает мой блок, когда отображается страница cms. Из этого блока я могу проверить, что такое URL, и на основании этого создать метаданные, но я не знаю, как получить доступ к головному блоку страницы CMS из моего блока.

1 Ответ

2 голосов
/ 02 февраля 2012

Директивы шаблона CMS обрабатываются через фильтр шаблона (указанный в config.xml Mage_Cms), и это только для блока cms / page. См. Mage_Core_Model_Email_Template_Filter (не опечатка).

Есть так много способов сделать это. Одним из возможных способов было бы наблюдать cms_page_load_after событие. В вашем методе наблюдателя событий вы будете делать что-то вроде следующего:

if(Mage::app()->getRequest()->getParam('your_param_etc'))
{
    $observer->getObject()->setTitle('...')
                          ->setKeywords('...')
                          ->setDescription('...');
}

Я не самый большой поклонник этого подхода, потому что он связывает запрос напрямую с моделью. Возможно, было бы более целесообразно обработать логику с помощью наблюдателя событий на controller_action_layout_render_before_cms_page_view и вместо этого сделать следующее:

if(Mage::app()->getRequest()->getParam('your_param_etc'))
{
    $head = Mage::app()->getLayout()->getBlock('head');

    if($head){
        $head->setTitle('...')
             ->setKeywords('...')
             ->setDescription('...');
    }
}

Мое предпочтение для последнего подхода заключается в том, что это событие инициируется в действии контроллера, которое более логически связано с объектом запроса. Любой подход сделает свое дело.

...