Magento:如何对以编程方式通过扩展添加的 js 文件使用 removeItem
Magento: how to use removeItem for js files added by extension programatically
我有一个通过观察者添加 JS 的第 3 方扩展:
<?php
class Anowave_Owl_Model_Observer extends Mage_Core_Model_Abstract
{
public function dispatch(Varien_Event_Observer $observer)
{
if (Mage::app()->getLayout()->getBlock('owl') && Mage::app()->getLayout()->getBlock('owl')->getSlider())
{
$format = Mage::app()->getLayout()->getBlock('owl')->getFormat();
if ($format instanceof Anowave_Owl_Block_Format)
{
$format->addCss()->addJs();
}
}
return $this;
}
}
其中 addJs 在块 class 中定义为:
public function addJs()
{
$script = 'js/jquery-1.11.0.min.js';
Mage::app()->getLayout()->getBlock('head')->addItem('skin_js', $script);
}
我不是破解模块,而是尝试通过 removeItem 删除加载的 jquery,即
<default>
<reference name="head">
<action method="removeItem">
<type>skin_js</type>
<name>js/jquery-1.11.0.min.js</name>
</action>
</reference>
</default>
在local.xml。但它不起作用。 (该 JS 文件仍然打印到头部的脚本标记中)。
即
<script type="text/javascript" src="http://mydomain.local/skin/frontend/base/default/js/jquery-1.11.0.min.js"></script>
我知道我的语法和路径是正确的,因为我可以通过这种方式在同一个文件夹中 unload/remove 其他 JS 文件(由扩展名布局 XML 指定的文件)。
我以为 local.xml 是在所有其他布局注册步骤之后处理的,但我想不是(?)
所以我不认为布局中的 removeItem 是一个选项。
我愿意使用
Mage::app()->getLayout()->getBlock('head')->removeItem('skin_js', $script);
在自定义模块中,但我怎么知道前面所有的 addJS() 处理都已执行完?
感谢任何想法或解决方案!
如果此第 3 方扩展在 community
代码池中,您可以在 local
代码池中重新创建此观察者的相同路径,Magento 将检查是否存在 class 首先在本地代码池中。
您必须创建路径 app/code/local/Anowave/Owl/Model/
并将 Observer.php
文件放入其中,这样您就可以针对您的业务逻辑安全地修改此 class 而无需破解原始扩展。
这个问题在 magento.stackexchange 的交叉帖子中得到了详细回答:
https://magento.stackexchange.com/questions/74778/magento-how-to-use-removeitem-for-js-files-added-by-extension-programatically/74781#74781
我有一个通过观察者添加 JS 的第 3 方扩展:
<?php
class Anowave_Owl_Model_Observer extends Mage_Core_Model_Abstract
{
public function dispatch(Varien_Event_Observer $observer)
{
if (Mage::app()->getLayout()->getBlock('owl') && Mage::app()->getLayout()->getBlock('owl')->getSlider())
{
$format = Mage::app()->getLayout()->getBlock('owl')->getFormat();
if ($format instanceof Anowave_Owl_Block_Format)
{
$format->addCss()->addJs();
}
}
return $this;
}
}
其中 addJs 在块 class 中定义为:
public function addJs()
{
$script = 'js/jquery-1.11.0.min.js';
Mage::app()->getLayout()->getBlock('head')->addItem('skin_js', $script);
}
我不是破解模块,而是尝试通过 removeItem 删除加载的 jquery,即
<default>
<reference name="head">
<action method="removeItem">
<type>skin_js</type>
<name>js/jquery-1.11.0.min.js</name>
</action>
</reference>
</default>
在local.xml。但它不起作用。 (该 JS 文件仍然打印到头部的脚本标记中)。 即
<script type="text/javascript" src="http://mydomain.local/skin/frontend/base/default/js/jquery-1.11.0.min.js"></script>
我知道我的语法和路径是正确的,因为我可以通过这种方式在同一个文件夹中 unload/remove 其他 JS 文件(由扩展名布局 XML 指定的文件)。 我以为 local.xml 是在所有其他布局注册步骤之后处理的,但我想不是(?) 所以我不认为布局中的 removeItem 是一个选项。 我愿意使用
Mage::app()->getLayout()->getBlock('head')->removeItem('skin_js', $script);
在自定义模块中,但我怎么知道前面所有的 addJS() 处理都已执行完?
感谢任何想法或解决方案!
如果此第 3 方扩展在 community
代码池中,您可以在 local
代码池中重新创建此观察者的相同路径,Magento 将检查是否存在 class 首先在本地代码池中。
您必须创建路径 app/code/local/Anowave/Owl/Model/
并将 Observer.php
文件放入其中,这样您就可以针对您的业务逻辑安全地修改此 class 而无需破解原始扩展。
这个问题在 magento.stackexchange 的交叉帖子中得到了详细回答: https://magento.stackexchange.com/questions/74778/magento-how-to-use-removeitem-for-js-files-added-by-extension-programatically/74781#74781