简体   繁体   中英

How to remove a previously added script file in a Zend Framework controller?

Is it possible to remove a script that was previously added like this?

$this->view->headScript()->appendFile("/js/my.js");

The situation here is that in my Bootstrap.php several JavaScript files are appended like in the above example but in a particular controller I want one particular JavaScript file not to be loaded. Is there a way to remove it during the initiation of the controller?

I am looking for something like this.

$this->view->headScript()->removeFile("/js/my.js");

This works, but really isn't a good practice but rather for exceptional purposes. I recommend trying to not load the unwanted scripts in the first place.

It is possible to remove scripts subsequently with a function like this one.

/**
 * 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;
}

Note that the strpos function is used here. This will remove every script that has $src in its path. Of course you can change that to your needs.

It's an old question, but here is an alternative: I used the minifyHeadScript and changed his helper adding this custom function:

/**
 * 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);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM