5

次のようなレイアウトXMLを介してjQueryを含むカスタム拡張機能があります。

<reference name="head">
    <action method="addJs"><script>jquery/jquery-1.8.1.min.js</script></action>
</reference>

jQueryを使用する他の拡張機能は、モジュールの後にロードして、jQueryが最上位にとどまるようにする必要があります。

デフォルトでは、Magentoはすべてをアルファベット順にロードします。拡張機能の並べ替え順序を指定する方法はありますか?

1つの方法は、テーマをオーバーライドpage.xmlして手動でjQueryをヘッドに含めるか、すべてのカスタムモジュールを、上に配置したいモジュールに依存するように設定できます。たとえば、次のようになります。

<depends>
    <Package_JQueryLib />
</depends>

他の推奨事項はありますか?

編集

Mage_Page_Block_Html_Headメソッドをオーバーライドして変更し、addItem()ファイルの並べ替えや先頭への追加を含めることもできると考えていました。

4

3 に答える 3

15

ノードは有効なアプローチです。<depends />これは、衝突するモジュールのxpath値を制御することを目的としていますが、子ノードが表示される順序に影響を与えるためにも使用できます。

もう1つのオプションであるクラスの書き換えはpage/html_head、しばらくの間必要とされていたものであり、実際には他の人によって行われていると思います。

のディレクティブは他のディレクティブの前に処理されるため、別のオプション<update>として、カスタムモジュールレイアウトXMLでディレクティブを使用することもできます。<update />これは、jQueryが他のすべてのファイルよりも先に読み込まれることを意味します。

<?xml version="1.0" encoding="UTF-8"?>
<layout>
    <default>
        <update handle="add_jquery_first" />
    </default>

    <add_jquery_first>
        <action method="addJs" block="head">
            <file>jquery/jquery-1.8.1.min.js</file>
        </action>
        <!-- or
        <reference name="head">
            <action method="addJs">
                <file>jquery/jquery-1.8.1.min.js</file>
            </action>
        </reference>
        -->
    </add_jquery_first>
</layout>
于 2012-09-27T02:31:08.023 に答える
3

これは私が思いついたものです:http: //pastebin.com/tMUnWBWR

これで、layout xmlまたはaddJsメソッドを使用して、sort_orderパラメーターを使用して、jsを含める場所を定義できます。

レイアウトxmlの例は次のようになります。

<action method="addJs">
<script>js/script.js</script>
<params/>
<sort_order>0</sort_order>
</action>
于 2012-09-27T05:19:47.747 に答える
1

Magentoは、保護されたメソッド_getDeclaredModuleFiles()のファイルapp / code / core / Mage / Core / Model/Config.phpにアルファベット順にapp/etc/modulesから構成ファイルをロードします

最初にMage_All.xmlがロードされ、次にすべてのMagento構成ファイル(Mage_で始まる)、最後にカスタムモジュールがアルファベット順にロードされることを示しています。

それで、ここに小さいが「汚い」トリックがあります-あなたの名前空間にAaaPackagenameという名前を付けてください。数字で始まる名前もトリックを行います:1Packagenameまたは000Packagename

于 2012-09-27T01:02:26.453 に答える