web-dev-qa-db-fra.com

Joomla 3.4.1 comment supprimer JCaption, appelé avec jQuery?

Je veux supprimer JCaption du fichier head, jquery et jcaption i désactivé avec les méthodes suivantes:

unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery.min.js']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery-noconflict.js']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery-migrate.min.js']);
unset($doc->_scripts[JURI::root(true) . '/media/system/js/caption.js']);

Pour supprimer jcaption sur les versions précédentes où mootools est utilisé, utilisez:

$this->_script = preg_replace('%window\.addEvent\(\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\'\);\s*}\);\s*%', '', $this->_script);

J'ai aussi essayé de le supprimer sur jQuery mais je n'ai pas d'expérience avec preg_replace () , que faire pour supprimer JCatpion de head?

Mon code:

$this->_script = preg_replace('%jQuery\(window\)\.on(\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\');\s*}\);\s*%', '', $this->_script);
10
xxx

C'est une très vieille question et probablement personne ne la lit plus, mais de toute façon je posterai ma réponse.

Dans la regex de la légende JQuery, vous avez des erreurs. Vous n'avez pas besoin d'échapper aux points, mais vous devez échapper aux caractères spéciaux. Et vous devez également cibler la bonne clé dans le tableau, vous devez donc ajouter ['text/javascript'] après avoir appelé l'objet de script.

Donc, le regex/preg_replace correct serait:

$this->_script['text/javascript'] = preg_replace('%jQuery\(window\).on\(\'load\',\s*function\(\)\s*\{\s*new\s*JCaption\(\'img.caption\'\)\;\s*\}\)\;\s*%', '', $this->_script['text/javascript']);

Il n'y a pas si longtemps, je me débattais aussi avec regex, mais ce site a beaucoup aidé: http://regexr.com/ Si vous essayez le site, notez que vous n'avez pas besoin d'utiliser open et fermer les balises car il y est déjà automatiquement.

5
Laci K

Essaye ça:

$this->_scripts = array();
unset($this->_script['text/javascript']);
4
Sahil Purav

Essaye ça:

if (isset($this->_script['text/javascript']))
{ $this->_script['text/javascript'] = preg_replace('%window\.addEvent\    (\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\'\);\s*}\);\s*%',     '', $this->_script['text/javascript']);
if (empty($this->_script['text/javascript']))
unset($this->_script['text/javascript']);}
$this->_scripts = array();
2
stckvrw

Si vous souhaitez utiliser un plugin pour annuler la définition de la balise de script injectée, les éléments suivants peuvent être utiles.

public function onBeforeRender() {
    // Front end
    if ($this->app instanceof JApplicationSite) {
        $doc = JFactory::getDocument();

        foreach ($doc->_script as $key => $script) {
            if (stristr($key, 'text/javascript') !== false) {
                unset($doc->_script['text/javascript']);
            }
        }
    }
}
0
Mohd Abdul Mujib