Joomla 3.4.1 Wie lösche ich JCaption, das mit jQuery aufgerufen wird?

10

Ich möchte JCaption aus der Datei head, jquery und jcaption löschen , die ich mit folgenden Methoden deaktiviert habe:

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']);

Um jcaption in früheren Versionen zu löschen, in denen mootools verwendet wird, ist Folgendes erforderlich:

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

Ich habe auch versucht, es auf jquery zu löschen, aber ich habe keine Erfahrung mit preg_replace () . Was tun, um JCatpion aus dem Kopf zu löschen?

Mein Code:

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

Antworten:

5

Dies ist eine sehr alte Frage und wahrscheinlich liest sie niemand mehr, aber ich werde trotzdem meine Antwort posten.

In der Regex für die JQueryBeschriftung haben Sie Fehler. Sie müssen keinen Punkten entkommen, aber Sie müssen Sonderzeichen entkommen. Außerdem müssen Sie den richtigen Schlüssel im Array auswählen, damit Sie ihn ['text/javascript']nach dem Aufrufen des Skriptobjekts hinzufügen können .

Der richtige reguläre Ausdruck / preg_replace wäre also:

$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']);

Vor nicht allzu langer Zeit hatte ich auch Probleme mit Regex, aber diese Site hat mir sehr geholfen: http://regexr.com/ Wenn Sie die Site ausprobieren, beachten Sie, dass Sie die Tags zum Öffnen und Schließen nicht verwenden müssen, da sie bereits automatisch vorhanden sind .

Laci K.
quelle
Um zu vermeiden, dass einfache Anführungszeichen angezeigt werden, schließen Sie das Muster in doppelte Anführungszeichen ein. Semikolons müssen nicht maskiert werden. Wenn in diesem Fall keine ausgeblendeten Punkte das erwartete Ergebnis liefern, ist es genauer / effizienter, wörtliche Punkte zuzuordnen, als ein Metazeichen "beliebiges Zeichen" im Muster. Ich empfehle daher, den Punkten zu entkommen.
Mickmackusa
4

Versuche dies:

$this->_scripts = array();
unset($this->_script['text/javascript']);
Sahil Purav
quelle
Das ist toll! Ich habe all diese nicht gesetzten ($ doc -> _ scripts Codezeilen
losgeworden
Fühlt sich gut an zu wissen, dass ich eine Hilfe für Sie war :)
Sahil Purav
Hoffentlich hat es dem Originalplakat geholfen und sie akzeptieren deins als Antwort! Nochmals
vielen
2

Versuche dies:

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
quelle
0

Wenn Sie bereit sind, ein Plugin zu verwenden, um das injizierte Skript-Tag zu deaktivieren, kann Folgendes hilfreich sein.

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
quelle
Das PHP-Handbuch erklärt nicht nur, dass dies strstr()weniger effizient ist als strpos()bei der Überprüfung des Vorhandenseins eines Teilstrings in einem String, diese Aufgabe muss auch nicht nach einem Teilstring suchen - es $keyist die vollständige String-Übereinstimmung.
Mickmackusa