使用特定网址密钥

时间:2015-06-19 18:25:15

标签: magento layout content-management-system

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

因此,这些页面的URL键如下:

  • 库/
  • 库/顶10
  • 库/五问题
  • 库/常见问题
  • 等...

要添加静态块的功能,该静态块将在库CMS页面上仅显示 。在布局XML文件中,是否有一种方法可以定位包含关键字的所有页面,因此我可以按照

的方式执行某些操作。
<default>
    ....
</default>
<library_*>
    <reference name="right">
        <block goes here/>
    </reference>
</library_*>

1 个答案:

答案 0 :(得分:1)

您可能会发现this question对了解CMS页面布局很有用。因此,虽然你无法按照正确的方式完成你想要做的事情,但这里有几个选择:

将您的布局XML添加到Admin

中的每个CMS页面

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

编辑CMS页面时,请转到设计标签:

enter image description here

您可以在此处更改为其他页面模板。您可以选择自定义页面模板 - that you create,并在右侧列中插入静态块 - 在布局下,或者将自定义布局XML直接添加到文本字段中:

enter image description here

不可否认,这会违反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>