Magento 使用特定URL键向所有CMS页面添加块
我正试图发现这是否可能。我们有一系列代表我们图书馆的CMS页面 因此,这些页面的URL键类似于:Magento 使用特定URL键向所有CMS页面添加块,magento,layout,content-management-system,Magento,Layout,Content Management System,我正试图发现这是否可能。我们有一系列代表我们图书馆的CMS页面 因此,这些页面的URL键类似于: 图书馆/ 图书馆/前十名 图书馆/五个问题 图书馆/常见问题解答 等等 希望添加仅在库CMS页面上显示的静态块的电源。在布局XML文件中,有没有一种方法可以针对包含关键字的所有页面,这样我就可以按照 <default> .... </default> <library_*> <reference name="right">
- 图书馆/
- 图书馆/前十名
- 图书馆/五个问题
- 图书馆/常见问题解答
- 等等
<default>
....
</default>
<library_*>
<reference name="right">
<block goes here/>
</reference>
</library_*>
....
您可能会发现了解CMS页面布局很有用。因此,虽然你无法以你的方式完成你想要做的事情,但这里有几个选项需要考虑:
将布局XML添加到Admin中的每个CMS页面
这可能是我的首选解决方案,因为它利用了开箱即用的功能,需要较少的维护,并且无需修改编码知识
编辑CMS页面时,请转到“设计”选项卡:
您可以在此处更改为其他页面模板。您可以选择自定义页面模板-将静态块插入布局下的右列,或将自定义布局XML直接添加到文本字段中:
诚然,这违反了DRY原则,因为你会在每个相关的CMS页面上这样做,但这并不太违反,它使用了Magento的预期功能
创建自定义布局句柄
与我前面链接的问题中的示例类似,您将创建一个简单的扩展,扩展到相关的CMS页面。观察者可能看起来像这样:
class My_LayoutHandle_Model_Observer
{
public function addLibraryCmsHandle(Varien_Event_Observer $observer)
{
if ($observer->getAction()->getFullActionName() == 'cms_page_view') {
$page = Mage::getSingleton('cms/page');
if (substr($page->getIdentifier(), 0, 7) == 'library') {
/** @var $layout Mage_Core_Model_Layout */
$layout = $observer->getLayout();
$layout->getUpdate()->addHandle('CUSTOM_HANDLE_LIBRARY_PAGE');
}
}
}
}
<CUSTOM_HANDLE_LIBRARY_PAGE>
<reference name="right">
<block goes here/>
</reference>
</CUSTOM_HANDLE_LIBRARY_PAGE>
然后,您可以将新句柄作为目标,如下所示:
class My_LayoutHandle_Model_Observer
{
public function addLibraryCmsHandle(Varien_Event_Observer $observer)
{
if ($observer->getAction()->getFullActionName() == 'cms_page_view') {
$page = Mage::getSingleton('cms/page');
if (substr($page->getIdentifier(), 0, 7) == 'library') {
/** @var $layout Mage_Core_Model_Layout */
$layout = $observer->getLayout();
$layout->getUpdate()->addHandle('CUSTOM_HANDLE_LIBRARY_PAGE');
}
}
}
}
<CUSTOM_HANDLE_LIBRARY_PAGE>
<reference name="right">
<block goes here/>
</reference>
</CUSTOM_HANDLE_LIBRARY_PAGE>