如何为cms页面动态设置元数据(描述,标题,关键字)?应根据URL中的参数生成元数据(例如:?part=light
)。
我尝试在“元数据”标签的关键字中添加{{block type="myblock"}}
,但这不会评估。
我可以将此{{block type="myblock"}}
放在Content中,并在显示cms页面时调用我的块。从块我可以检查URL是什么,并基于创建元数据,但我不知道如何从我的块访问CMS页面的头块。
答案 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('...');
}
}
我对后一种方法的偏好是这个事件是在控制器动作中触发的,它与请求对象在逻辑上更加联系。任何一种方法都可以解决问题。