Magento CMS页面设置动态元数据



如何为cms页面动态设置元数据(描述、标题、关键字)?元数据应该根据URL中的参数生成(例如:?part=light)。

我尝试过将{{block type="myblock"}}放在元数据选项卡的关键字中,但这并没有起到作用。

我可以把这个{{block type="myblock"}}放在Content中,当cms页面显示时,它会调用我的块。从这个区块,我可以检查URL是什么,并在此基础上创建元数据,但我不知道如何从我的区块访问CMS页面的头部区块。

CMS模板指令通过模板过滤器(在Mage_CMS-config.xml中指定)进行处理,并且它仅用于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('...');
    }
}

我对后一种方法的偏好是,该事件是在控制器操作中触发的,控制器操作与请求对象的逻辑连接更紧密。任何一种方法都能奏效。

最新更新