一个包中有多个local.xml布局文件


13

假设打包中有两个主题:

  • 基本(设置为默认值)
  • 儿童(设置为主题)

两者都在布局文件夹中包含local.xml-仅会加载Child主题中的local.xml,因此不会加载Base local.xml中的任何CSS,JS或布局更新。

在不使用page.xml的情况下(因此允许与local.xml相同的功能,但具有继承性),我将如何为Base和Child分别创建一个xml文件?

这是否需要仅出于添加可用xml文件(例如:base-local.xml)的目的而构建模块?

Answers:


9

您是正确的,对于具有多个主题的网站,这是一种有效且常用的方法。还有两个附加选项(鲜为人知,很少使用),这些选项可用于适用于不同商店范围的布局更新:商店句柄和主题句柄。

从动作控制器超类Mage_Core_Controller_Varien_Action(链接)

public function addActionLayoutHandles()
{
    $update = $this->getLayout()->getUpdate();

    // load store handle
    $update->addHandle('STORE_'.Mage::app()->getStore()->getCode());

    // load theme handle
    $package = Mage::getSingleton('core/design_package');
    $update->addHandle(
        'THEME_'.$package->getArea().'_'.$package->getPackageName().'_'.$package->getTheme('layout')
    );

    // load action handle
    $update->addHandle(strtolower($this->getFullActionName()));

    return $this;
}

对于具有代码“ deutsch”和主题配置为“ default”包,“ german”主题的商店,以下句柄几乎适用于每个视图,因为大多数视图都使用它们:

<STORE_deutsch>
<THEME_frontend_default_german>

通过实施,可以使用与这些句柄几乎相同的方式来使用这些句柄<default />


嗯,这很有帮助-我想我的用例与您所建议的略有不同-您在'base'主题中仍将有一个local.xml,然后使用<THEME_frontend_default_german>定位子主题从该基本主题local.xml-在每个子主题中都没有单独的local.xml?那是正确的还是我误会了?
Glo

而已。不幸的是,目标句柄广泛应用,因此无法说“更新商店X中catalog_product_view页面的根块模板”。但是,如果商店X在所有页面上都需要自定义JS文件,则可以使用<STORE_x><action method="addJs" block="head"><file>custom/js.js</file></action></STORE_x>
benmarks

非常感谢,虽然我没有具体考虑,但还是很有趣的新信息。
Glo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.