使用某些 URL 键向所有 CMS 页面添加块
Add block to all CMS Pages with certain URL Key
我正在尝试发现这是否可能。我们有一系列代表我们图书馆的 CMS 页面。
因此这些页面的 URL 键类似于:
- 图书馆/
- library/top-ten
- library/five-questions
- library/faq
- 等...
想要添加将 仅 出现在图书馆 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>
我正在尝试发现这是否可能。我们有一系列代表我们图书馆的 CMS 页面。
因此这些页面的 URL 键类似于:
- 图书馆/
- library/top-ten
- library/five-questions
- library/faq
- 等...
想要添加将 仅 出现在图书馆 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>