Joomla 3.4.1 come eliminare JCaption, chiamato con jQuery?


10

Voglio eliminare JCaption dal file head, jquery e jcaption che ho disattivato con i seguenti metodi:

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

Per eliminare jcaption nelle versioni precedenti in cui è necessario l'uso di mootools:

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

Ho provato anche a eliminarlo su jquery ma non ho esperienza con preg_replace () , cosa devo fare per eliminare JCatpion dalla testa?

Il mio codice:

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

Risposte:


5

Questa è una domanda molto antica e probabilmente nessuno la legge più, ma comunque posterò la mia risposta.

Nella regex per la JQuerydidascalia hai errori. Non è necessario sfuggire ai punti ma è necessario sfuggire ai caratteri speciali. Inoltre, è necessario scegliere come target la chiave corretta nell'array, quindi è necessario aggiungerla ['text/javascript']dopo aver chiamato l'oggetto script.

Quindi il regex / preg_replace corretto sarebbe:

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

Non molto tempo fa stavo anche lottando con regex ma questo sito mi ha aiutato molto: http://regexr.com/ Se provi il sito nota che non devi usare i tag di apertura e chiusura perché è già lì automaticamente .


Per evitare la fuga tra virgolette singole, avvolgi il motivo tra virgolette doppie. I punti e virgola non devono essere salvati. Anche se non sfuggire ai punti si otterrà comunque il risultato atteso in questo caso, è più preciso / efficiente abbinare i punti letterali piuttosto che un metacarattere "qualsiasi carattere" nel motivo, quindi consiglio di sfuggire ai punti.
Mickmackusa

4

Prova questo:

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

Questo è FANTASTICO! Mi sono sbarazzato di tutti quelli non impostati ($ doc -> _ script di righe di codice e sostituisco con 2.
mmundiff

È bello sapere che sono stato di aiuto per te :)
Sahil Purav,

Spero che abbia aiutato il poster originale e che accettino il tuo come risposta! Grazie ancora
mmundiff

2

Prova questo:

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();

0

Se si desidera utilizzare un plug-in per annullare l'inserimento del tag script inserito, può essere utile quanto segue.

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

Non solo il manuale di php dichiara che strstr()è meno efficiente di strpos()quando si verifica l'esistenza di una sottostringa in una stringa, questa attività non ha bisogno di cercare una sottostringa: $keyè la corrispondenza della stringa completa.
Mickmackusa
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.