Magento 使用特定URL键向所有CMS页面添加块

Magento 使用特定URL键向所有CMS页面添加块,magento,layout,content-management-system,Magento,Layout,Content Management System,我正试图发现这是否可能。我们有一系列代表我们图书馆的CMS页面 因此,这些页面的URL键类似于: 图书馆/ 图书馆/前十名 图书馆/五个问题 图书馆/常见问题解答 等等 希望添加仅在库CMS页面上显示的静态块的电源。在布局XML文件中,有没有一种方法可以针对包含关键字的所有页面,这样我就可以按照 <default> .... </default> <library_*> <reference name="right">

我正试图发现这是否可能。我们有一系列代表我们图书馆的CMS页面

因此,这些页面的URL键类似于:

  • 图书馆/
  • 图书馆/前十名
  • 图书馆/五个问题
  • 图书馆/常见问题解答
  • 等等
希望添加仅在库CMS页面上显示的静态块的电源。在布局XML文件中,有没有一种方法可以针对包含关键字的所有页面,这样我就可以按照

<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>