如何为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('...');
}
}
我对后一种方法的偏好是,该事件是在控制器操作中触发的,控制器操作与请求对象的逻辑连接更紧密。任何一种方法都能奏效。