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、デザイン パッケージのテーマに置き換えることで、これを確認できます。

デザイン/テーマ/レイアウトを別のテーマに設定すると、同じことが起こりlocal.xmlます。パッケージのファイルと、デザイン/テーマ/デフォルトのファイルは無視されます。すべてのファイルの内容をDesign / Themes / Layoutlocal.xmlの下の単一のファイルに結合することで、この問題を回避できますが、それは明らかに望ましい解決策ではありません。

以前にカスタム テーマを作成したことがありますが、この問題が発生したのはこれが初めてです。解決策はありますか?

4

1 に答える 1

4

問題

Magento のデザイン フォール バック階層の制限に遭遇しました。それが機能する方法は、最も具体的な場所から最も具体的でない場所へと逆方向に検索することです。

... カスタム テーマが「styles.css」という CSS ファイルを呼び出しても、Magento アプリケーションがカスタム テーマでファイルを見つけられない場合、Magento は階層内の次のテーマに移動してファイルを見つけます ... 「styles.css」というファイルが見つかるまで、テーマの階層を下って作業を続けます。</p>

設計を構築するこの方法は、要求されたファイルを取得してロードするために、アプリケーションが要求されたファイルの次の可能なソースに「フォールバック」するため、フォールバックと呼ばれます。

これが意味することは、レイアウト ファイルlocal.xmlは 1 つの場所からしか取得できず、現在のテーマに最も固有のものになるということです。そのため、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ます。

app/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>

app/design/frontend/$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 に答える