Magento CMS页面设置动态元数据

时间:2012-02-02 00:10:29

标签: templates magento layout content-management-system

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

我尝试在“元数据”标签的关键字中添加{{block type="myblock"}},但这不会评估。

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

1 个答案:

答案 0 :(得分:2)

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('...');
    }
}

我对后一种方法的偏好是这个事件是在控制器动作中触发的,它与请求对象在逻辑上更加联系。任何一种方法都可以解决问题。