当local.xml的自定义主题处于活动状态时,不会加载包的local.xml

时间:2015-05-10 08:47:02

标签: magento magento-layout-xml

我安装了ThemeForest的设计包,它一直运行得很好,但我正在尝试创建一个新的自定义主题,其中包含custom.css样式表和{{1}布局文件,只添加对local.xml的引用。

在Magento Admin中, 系统>的值配置>一般>设计/包/当前包名称 设置为我安装的设计包。这很好用,直到我将 Design / Themes / Default 设置为我的新自定义主题,这会导致设计包的custom.css文件被忽略。我可以通过删除自定义主题的local.xml或将其替换为设计包中的主题来验证这一点。

当我将 设计/主题/布局 设置为另一个主题时,同样的事情发生了,现在是包中的local.xml文件,而< strong> 设计/主题/默认 将被忽略。我可以通过将所有local.xml文件的内容合并到 设计/主题/布局 下的单个文件来解决此问题,但这显然不是理想的溶液

之前我制作过自定义主题,但这是我第一次遇到这个问题,是否有人有解决方案?

1 个答案:

答案 0 :(得分:4)

问题

您遇到了Magento’s design fall back hierarchy的限制。它的工作方式是从最具体的位置向后搜索,最不具体。

  

...如果您的自定义主题调用名为“styles.css”的CSS文件,但Magento应用程序无法在您的自定义主题中找到该文件,Magento将转到层次结构中的下一个主题以查找该文件...它将继续在主题层次结构中工作,直到它能够找到名为“styles.css”的文件。

     

这种构建设计的方法称为后备,因为应用程序“回退”到下一个可能的所需文件源,以便检索和加载所请求的文件。

这对您来说意味着布局文件local.xml只能来自一个位置,而且它将是当前主题最具体的内容。所以Magento将按以下优先级搜索它:

  1. app/design/frontend/$package/$theme/layout/local.xml
  2. app/design/frontend/$package/default/layout/local.xml
  3. app/design/frontend/base/default/layout/local.xml
  4. 要认识到的重要一点是,这些文件中的每一个都会覆盖下一个文件而不是添加它们。我听说Magento 2.x可能会解决这种情况,但对于1.x我们需要解决这个问题。

    可能的解决方案

    我要解决此问题的方法是创建一个简单的扩展,只需在单独的布局文件中加载自定义css文件。然后,您不需要新主题中的local.xml文件,它将继续回归default

    应用的/ etc /模块/ My_Theme.xml

    <?xml version="1.0"?>
    <config>
        <modules>
            <My_Theme>
                <active>true</active>
                <codePool>local</codePool>
            </My_Theme>
        </modules>
    </config>
    

    应用/代码/本地/我/主题的/ etc / config.xml中

    <?xml version="1.0"?>
    <config>
        <modules>
            <My_Theme>
                <version>0.1.0</version>
            </My_Theme>
        </modules>
        <frontend>
            <layout>
                <updates>
                    <my_theme>
                        <file>my_theme.xml</file>
                    </my_theme>
                </updates>
            </layout>
        </frontend>
    </config>
    

    应用/设计/前端/ $包/ $主题/布局/ my_theme.xml

    <?xml version="1.0"?>
    <layout version="0.1.0">
        <default>
            <reference name="head">
                <action method="addCss"><stylesheet>css/my_theme.css</stylesheet></action>
            </reference>
        </default>
    </layout>
    

    这也使用Magento的设计后备方法来加载文件。因此,您可以将其放在skin/frontend/$package/$theme/css/my_theme.css$package/default/css/子目录中。