重新排序Magento JavaScript包含(addJs)

Ada*_*oss 8 javascript magento

我会保持这个简单....在我的产品页面上我需要删除prototype.js文件并将其替换为最新版本的原型.到目前为止使用local.xml我已经使用以下方法成功替换了它:

<action method="removeItem"><type>js</type><name>prototype/prototype.js</name></action>
<action method="addJs"><script>prototype/prototype-new.js</script></action>
Run Code Online (Sandbox Code Playgroud)

问题是现在原型被加载到其他包含阻止其工作的所有内容之下.

有没有办法设置JavaScript的顺序包括使用local.xml而不必再删除和添加每个文件?

Dmi*_*nko 45

你可以使用params元素,其中包含"data-group"HTML属性,Magento会在没有设置"params"的任何项目之后设置带有"params"的项目.您可以在主题中使用local.xml来确保这些元素的顺序(我建议让Magento首先添加其标准文件):

<action method="addJs">
    <script>prototype/javascript0.js</script>
    <params><![CDATA[data-group="js002"]]></params>
    <!-- creates first group js002 -->
</action>
<action method="addJs">
    <script>prototype/javascript1.js</script>
    <params><![CDATA[data-group="js002"]]></params>
    <!-- appends to created group js002, after javascript0 -->
</action>
<action method="addJs">
    <script>prototype/javascript2.js</script>
    <params><![CDATA[data-group="js001"]]></params>
    <!-- creates first group js001 -->
</action>
<action method="addJs">
    <script>prototype/javascript3.js</script>
    <params><![CDATA[data-group="js001"]]></params>
    <!-- appends to created group js001, after javascript2 -->
</action>
<action method="addJs">
    <script>prototype/javascript4.js</script>
    <params><![CDATA[data-group="js002"]]></params>
    <!-- appends to created group js002, after javascript1 -->
</action>
<action method="addJs">
    <script>prototype/javascript5.js</script>
    <!-- no params supplied, will be rendered before any groups -->
</action>
Run Code Online (Sandbox Code Playgroud)

设置"params"的元素的顺序仅由执行操作的顺序决定.项目按"params"的值进行分组,因此一旦组"js001"由第一个动作(javascript2.js)定义,具有相同组名的连续动作将附加到该组,等等.

在上面的示例中,渲染顺序为:

  • prototype/javascript5.js(没有params,首先出现)
  • prototype/javascript0.js(首先创建了params group"js002")
  • prototype/javascript1.js(首先创建了params group"js002")
  • prototype/javascript4.js(首先创建了params group"js002")
  • prototype/javascript2.js(第二个创建的params组"js001")
  • prototype/javascript3.js(第二个创建的params组"js001")

使用addItem addJs,addCss等添加的项目以相同的方式进行威胁,但是它们的类型不同(并且将相应地进行超级分组)(按照下面的顺序),超级组中的每个组在内部排序,如上所述:

  • JS
  • skin_js
  • js_css
  • skin_css

  • 很好的解决方案,但只能在同一区域内工作 - 如果你想强制将include包含在所有这些区域的顶部或底部,你就不能.至少,除非你在mage/page/block/html/head的&_prepareStaticAndSkinElements中添加`krsort($ items)` (4认同)
  • 我不相信这有任何影响.正如@ l-barker指出的那样,它将参数添加到脚本标记中,但不使用此参数进行排序.我逐步完成了代码,并没有发生排序.我认为你很幸运,你的文件恰好包含在你想要的顺序中,但不能保证.我不知道他们为什么不支持"after =''"和"before =''"参数,比如布局.我会继续寻找解决方案. (2认同)

Ant*_*n S 1

Mage_Page_Block_Html_Head $_data; 保存这些项目的数组,所以我想你可以为了自己的利益而过滤它。默认方法不允许定义添加项目的顺序。