Joomla 3.4.1 comment supprimer JCaption, appelé avec jQuery?

10

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 en utilisant est nécessaire:

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

J'ai également 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);
xxx
la source

Réponses:

5

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 l'expression régulière de la JQuerylégende, 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 l'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 luttais aussi avec l'expression régulière, mais ce site a beaucoup aidé: http://regexr.com/ Si vous essayez le site, notez que vous n'avez pas besoin d'utiliser les balises d'ouverture et de fermeture car il est déjà là automatiquement .

Laci K
la source
Pour éviter d'échapper aux guillemets simples, enveloppez le motif entre guillemets doubles. Les points-virgules n'ont pas besoin d'être échappés. Bien que le fait de ne pas échapper aux points fournisse toujours le résultat escompté dans ce cas, il est plus précis / efficace de faire correspondre les points littéraux plutôt qu'un métacaractère "n'importe quel caractère" dans le modèle, donc je recommande d'échapper aux points.
mickmackusa
4

Essaye ça:

$this->_scripts = array();
unset($this->_script['text/javascript']);
Sahil Purav
la source
C'est bien! Je me suis débarrassé de toutes ces lignes de code non définies ($ doc -> _ scripts et les remplacer par 2.
mmundiff
Ça fait du bien de savoir que
Sahil Purav
J'espère que cela a aidé l'affiche originale et ils acceptent la vôtre comme réponse! Merci encore
mmundiff
2

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();
stckvrw
la source
0

Si vous êtes prêt à utiliser un plugin pour désactiver 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']);
            }
        }
    }
}
Mohd Abdul Mujib
la source
Non seulement le manuel php déclare qu'il strstr()est moins efficace que strpos()lors de la vérification de l'existence d'une sous-chaîne dans une chaîne, cette tâche n'a pas besoin de rechercher une sous-chaîne - $keyc'est la correspondance complète de la chaîne.
mickmackusa