Joomla 3.4.1 cómo eliminar JCaption, llamado con jQuery?


10

Quiero eliminar JCaption del archivo head, jquery y jcaption que desactivé con los siguientes métodos:

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

Para eliminar jcaption en versiones anteriores donde se necesitan mootools en el uso:

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

También intenté eliminarlo en jquery pero no tengo experiencia con preg_replace () , ¿qué debo hacer para eliminar JCatpion de la cabeza?

Mi código:

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

Respuestas:


5

Esta es una pregunta muy antigua y probablemente ya nadie la lea, pero de todos modos publicaré mi respuesta.

En la expresión regular para el JQuerysubtítulo tienes errores. No necesita escapar de puntos, pero debe escapar de caracteres especiales. Y también debe apuntar a la clave correcta en la matriz, por lo que debe agregar ['text/javascript']después de llamar al objeto de script.

Entonces la expresión regular / preg_replace correcta sería:

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

No hace mucho tiempo, también estaba luchando con la expresión regular, pero este sitio me ayudó mucho: http://regexr.com/ Si prueba el sitio, tenga en cuenta que no necesita usar las etiquetas de abrir y cerrar porque ya está allí automáticamente .


Para evitar escapar de comillas simples, ajuste el patrón entre comillas dobles. Los puntos y comas no necesitan escapar. Si bien no escapar de los puntos seguirá ofreciendo el resultado esperado en este caso, es más preciso / eficiente hacer coincidir los puntos literales en lugar de un metacarácter de "cualquier carácter" en el patrón, por lo que recomiendo escapar de los puntos.
mickmackusa

4

Prueba esto:

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

¡Esto es genial! Me deshice de todos esos sin establecer ($ doc -> _ líneas de código de scripts y reemplace con 2.
mmundiff

Se siente bien saber que fui una ayuda para ti :)
Sahil Purav

¡Ojalá haya ayudado al póster original y aceptan la suya como respuesta! Gracias de nuevo
mmundiff

2

Prueba esto:

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

Si está dispuesto a usar un complemento para desarmar la etiqueta del script inyectada, lo siguiente puede ser útil.

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

El manual php no solo declara que strstr()es menos eficiente que strpos()cuando se verifica la existencia de una subcadena en una cadena, esta tarea no necesita buscar una subcadena, $keyes la coincidencia de cadena completa.
mickmackusa
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.