是否可以删除以前这样添加的脚本?
$this->view->headScript()->appendFile("/js/my.js");
这里的情况是在我的Bootstrap.php
几个 JavaScript 文件像上面的例子一样被附加,但是在一个特定的控制器中,我希望不加载一个特定的 JavaScript 文件。有没有办法在控制器启动期间将其删除?
我正在寻找这样的东西。
$this->view->headScript()->removeFile("/js/my.js");
是否可以删除以前这样添加的脚本?
$this->view->headScript()->appendFile("/js/my.js");
这里的情况是在我的Bootstrap.php
几个 JavaScript 文件像上面的例子一样被附加,但是在一个特定的控制器中,我希望不加载一个特定的 JavaScript 文件。有没有办法在控制器启动期间将其删除?
我正在寻找这样的东西。
$this->view->headScript()->removeFile("/js/my.js");
这有效,但实际上不是一个好习惯,而是出于特殊目的。我建议首先不要加载不需要的脚本。
随后可以使用类似这样的功能删除脚本。
/**
* Removes a previously appended script file.
*
* @param string $src The source path of the script file.
* @return boolean Returns TRUE, if the removal has been a success.
*/
public function removeScript($src) {
$headScriptContainer = Zend_View_Helper_Placeholder_Registry::getRegistry()
->getContainer("Zend_View_Helper_HeadScript");
$iter = $headScriptContainer->getIterator();
$success = FALSE;
foreach ($iter as $k => $value) {
if(strpos($value->attributes["src"], $src) !== FALSE) {
$iter->offsetUnset($k);
$success = TRUE;
}
}
Zend_View_Helper_Placeholder_Registry::getRegistry()
->setContainer("Zend_View_Helper_HeadScript",$headScriptContainer);
return $success;
}
请注意,strpos
这里使用了该函数。这将删除$src
其路径中的每个脚本。当然,您可以根据自己的需要进行更改。
这是一个老问题,但这里有一个替代方案:我使用了minifyHeadScript并更改了他的助手,添加了这个自定义函数:
/**
* Removes all script file.
*
*/
public function clearAllScripts(){
$this->getContainer()->exchangeArray(array());
$container = $this->getContainer();
Zend_View_Helper_Placeholder_Registry::getRegistry()->setContainer("Zend_View_Helper_HeadScript", $container);
}