如何为cms页面动态设置元数据(描述,标题,关键字)?元数据应根据URL中的参数生成(例如:?part=light
)。Magento CMS页面设置动态元数据
我已经尝试将{{block type="myblock"}}
放置在Meta Data选项卡的关键字中,但是这并未评估。
我可以把这个{{block type="myblock"}}
放在内容中,当cms页面显示时它会调用我的块。从块我可以检查URL是什么,并基于创建的元数据,但我不知道如何访问我的块的CMS页头块。
如何为cms页面动态设置元数据(描述,标题,关键字)?元数据应根据URL中的参数生成(例如:?part=light
)。Magento CMS页面设置动态元数据
我已经尝试将{{block type="myblock"}}
放置在Meta Data选项卡的关键字中,但是这并未评估。
我可以把这个{{block type="myblock"}}
放在内容中,当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('...');
}
}
我对后者接近倾向是,这个事件被触发控制器中的作用,这是比较逻辑连接与请求对象。这两种方法都可以做到这一点。