3

我安装了来自ThemeForest的设计包,它一直运行良好,但我正在尝试创建一个新的自定义主题,该主题由一个custom.css样式表和一个local.xml仅添加对custom.css.

在 Magento Admin 中,System > Configuration > General > Design / Package / Current Package Name的值设置为我安装的设计包。在我将Design / Themes / Default设置为我的新自定义主题之前,它工作正常,这会导致local.xml设计包的文件被忽略。我可以通过删除local.xml我的自定义主题或将其替换为设计包中的主题来验证这一点。

当我将Design / Themes / Layout设置为另一个主题时,也会发生同样的事情,现在local.xml包中的文件和Design / Themes / Default中的文件被忽略。我可以通过在Design / Themes / Layoutlocal.xml下将所有文件的内容组合成一个文件来解决这个问题,但这显然不是一个理想的解决方案。

我以前做过自定义主题,但这是我第一次遇到这个问题,有人有解决方案吗?

4

1 回答 1

4

问题

您遇到了Magento 设计回退层次结构的限制。它的工作方式是从最具体的位置向后搜索,到最不具体的位置。

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

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

这对您来说意味着布局文件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

要意识到的重要一点是,这些文件中的每一个都会覆盖下一个文件,而不是添加到它们中。我听说 Magento 2.x 可能会解决这种情况,但是对于 1.x,我们需要解决这个问题。

一个可能的解决方案

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

应用程序/etc/modules/My_Theme.xml

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

app/code/local/My/Theme/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>

应用程序/设计/前端/$package/$theme/layout/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/子目录中。

于 2015-05-12T18:43:53.443 回答