使用某些 URL 键向所有 CMS 页面添加块

Add block to all CMS Pages with certain URL Key

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

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

想要添加将 出现在图书馆 CMS 页面上的静态块的权力。有没有办法在布局 XML 文件中定位所有包含关键字的页面,这样我就可以按照

的方式做一些事情
<default>
    ....
</default>
<library_*>
    <reference name="right">
        <block goes here/>
    </reference>
</library_*>

您可能会发现 this question 对于理解 CMS 页面布局很有用。因此,虽然您无法完全按照您的方式完成您正在尝试做的事情,但这里有几个选项可供考虑:

将您的布局 XML 添加到管理中的每个 CMS 页面

这可能是我的首选解决方案,因为它利用了开箱即用的功能,需要较少的维护并且不需要修改编码知识。

编辑 CMS 页面时,转到 设计 选项卡:

这里可以换成其他页面模板。您可以 select 自定义页面模板 - that you create 将静态块插入右列 - 在 布局 下,或添加自定义布局 XML直接进入文本字段:

诚然,这会违反 DRY 原则,因为您会在每个相关的 CMS 页面上执行此操作,但这并不过分违反,而且它使用了 Magento 的预期功能。

创建自定义布局句柄

类似于我之前链接的问题中的示例,您将创建一个简单的扩展,adds new layout handles 到相关的 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>