Magento模块布局xml加载顺序

rin*_*rce 5 xml layout module magento magento-layout-xml

我有一个自定义扩展,包括jQuery到布局XML,如下所示:

<reference name="head">
    <action method="addJs"><script>jquery/jquery-1.8.1.min.js</script></action>
</reference>
Run Code Online (Sandbox Code Playgroud)

使用jQuery的其他扩展需要在我的模块之后加载,以便jQuery保持在最顶层.

默认情况下,Magento按字母顺序加载所有内容.有没有办法为扩展指定排序顺序?

一种方法是page.xml在我的主题中覆盖并手动将jQuery包含在头部中,或者我可以将每个自定义模块设置为依赖于我想要的模块,例如:

<depends>
    <Package_JQueryLib />
</depends>
Run Code Online (Sandbox Code Playgroud)

还有其他建议吗?

编辑

我在想我也可以覆盖Mage_Page_Block_Html_Head和修改addItem()方法,以包括排序或预先添加文件到头部.

ben*_*rks 15

<depends />节点是一个有效的方法-它的目的是在发生碰撞模块的XPath值提供了控制,但它也可以用来影响其子节点出现的顺序.

另一个选择,重写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>
Run Code Online (Sandbox Code Playgroud)