Templates Magento CMS页面设置动态元数据

Templates Magento CMS页面设置动态元数据,templates,magento,layout,content-management-system,Templates,Magento,Layout,Content Management System,如何为cms页面动态设置元数据(描述、标题、关键字)?元数据应根据URL中的参数生成(例如:?part=light) 我已经试着将{{block type=“myblock”}}放在元数据选项卡的关键字中,但这不会计算 我可以把这个{{block type=“myblock”}}放在内容中,当显示cms页面时,它调用我的块。从块中,我可以检查URL是什么,并根据它创建元数据,但我不知道如何从块中访问CMS页面的头块 CMS模板指令通过模板过滤器(在Mage_CMS config.xml中指定)进

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

我已经试着将
{{block type=“myblock”}}
放在元数据选项卡的关键字中,但这不会计算


我可以把这个
{{block type=“myblock”}}
放在内容中,当显示cms页面时,它调用我的块。从块中,我可以检查URL是什么,并根据它创建元数据,但我不知道如何从块中访问CMS页面的头块

CMS模板指令通过模板过滤器(在Mage_CMS config.xml中指定)进行处理,并且仅用于CMS/页面块。请参阅
Mage\u Core\u Model\u Email\u Template\u Filter
(不是打字错误)

有很多方法可以做到这一点。一种可能的方法是在事件之后观察cms页面加载。在事件观察者方法中,您将执行以下操作:

if(Mage::app()->getRequest()->getParam('your_param_etc'))
{
    $observer->getObject()->setTitle('...')
                          ->setKeywords('...')
                          ->setDescription('...');
}
不过,我不是这种方法的最大支持者,因为它将请求直接与模型联系起来。通过
控制器\u操作\u布局\u呈现\u在\u cms\u页面\u视图
上的事件观察程序处理逻辑可能更合适,并改为执行以下操作:

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

    if($head){
        $head->setTitle('...')
             ->setKeywords('...')
             ->setDescription('...');
    }
}
我对后一种方法的偏好是,此事件在控制器操作中触发,控制器操作与请求对象的逻辑连接更为紧密。任何一种方法都会奏效