2012-02-02 35 views
1

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

我已经尝试将{{block type="myblock"}}放置在Meta Data选项卡的关键字中,但是这并未评估。

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

回答

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

我对后者接近倾向是,这个事件被触发控制器中的作用,这是比较逻辑连接与请求对象。这两种方法都可以做到这一点。