如何爲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('...');
}
}
我對後者接近傾向是,這個事件被觸發控制器中的作用,這是比較邏輯連接與請求對象。這兩種方法都可以做到這一點。