Optimizar Mootools en tu web II

Tamaño de letra:

¿Por qué desactivar MooTools?

Hasta ahora hemos conseguido reducir el archivo mootools-core.js (que a mi me parece una muy buena opción) pero seguro que estás leyendo esto porque de todos modos quieres desactivarlo. La principal duda que puede surgirte es si lo puedes desactivar sin que afecte a tu sitio web, por ejemplo en Joomla! ¿dónde se utiliza MooTools?. MooTools es utilizado por diversos componentes y una de las formas muy sencillas de saber qué componentes lo utilizan o qué parte de código de Joomla! llama a MooTools es usando el programa FileSeek y buscar las siguientes cadenas de texto (que ya hemos visto):

JHtml::_('behavior.caption');
JHTML::_ ( 'behavior.mootools' );

De ese modo verás exactamente qué componente o qué código carga las librerías de MooTools. Voy a obviar los componentes y pensar solamente en Joomla! tras una primera instalación. Mootools es utilizado por ejemplo cuando editas artículos en el front-end. En el back-end es muy utilizado pero no lo voy a desactivar ahí, ya que no tiene mucho sentido.

Creando código para desactivar MooTools

Voy a programar un poco en php y Joomla! > 1.6 para desactivar MooTools, voy a crear un plugin. Lo voy a explicar todo lo mejor que pueda para que sepas modificarlo a tu gusto y lo entiendas. Este código (o parte de) puedes usarlo también en tu template si no estás interesado en el plugin, pero lo más razonable es usar el plugin, así si un día no lo necesitas lo deshabilitas o lo desinstalas. En el anterior artículo puse un enlace de un hilo en el que los usuarios explicaron sus dudas. Verás también que las principales preocupaciones para deshabilitar Mootools son:

  • Si el usuario está registrado o no.
  • Si estamos en el back-end -> activado o estamos en el front-end -> desactivado
  • Yo añadiría las vistas: featured, categories, category y article y daré mi punto de vista.
  • Como es utilizado en muchos componentes, cuando éstos lo usen habilitarlo.
  • Y alguna más...

Sin más dilación, voy a explicar el código que voy a usar y las alternativas, paso a paso:

onAfterDispatch

Si programas en Joomla! un plugin de tipo System, puedes usar unas determinadas funciones para manipular los eventos. Voy a utilizar onAfterDispatch, que su nombre lo dice casi todo. Existen otras que pueden servirte. Así que ya tengo el principio del código:

function onAfterDispatch() {}

 

Soy administrador o no

Como dije antes, NO voy a desactivar MooTools cuando estemos en la interfaz del administrador. En Joomla! podemos usar esta función: isAdmin(). Es una función que devuelve un valor booleano. Podemos usarla del siguiente modo:

$app = JFactory::getApplication();
$app->isAdmin()

 

En qué vista estamos

Si queremos desactivar MooTools sólo en determinadas vistas podemos usar lo siguiente:

$vista = JRequest::getCmd( 'view' );
featured, article, category, categories.

 

Si el usuario está registrado o no

Como hemos visto esto es importante si existe un usuario que quiera por ejemplo editar un artículo desde el front-end ya que necesita MooTools. Podemos comprobarlo del siguiente modo:

$usuario =& JFactory::getUser();
if (!$usuario->guest) {}

 

Desactivar MooTools

Y esta es la parte más importante. La idea es la siguiente: extraigo los scripts de los datos del encabezado, elimino los scripts referentes a MooTools y después vuelvo a incorporar los scripts pero ya sin los relativos a MooTools. Se entiende ¿no?. This is very easy. Primero voy a extraer y guardar el encabezado:

$documento = JFactory::getDocument();
$encabezado = $documento->getHeadData();

Una vez obtenido el encabezado actual en un array, (puedes observar el archivo html.php en libraries\joomla\document\html) voy a guardar en la variable $scripts todos los scripts, del siguiente modo:

$scripts = (isset($encabezado['scripts']) && !empty($encabezado['scripts'])) ? $encabezado['scripts'] : array();

Podrás pensar que de dónde he sacado ese código. Pues sencillo, del archivo html.php que he dicho antes. Échale un vistazo. Es un código muy sencillo que debes entender porque en Joomla! y en php es muy utilizado. La condición es si se cumple que los scripts están definidos (isset) y no están vacíos (!empty). Dependiendo de si esa condición se cumple o no, ves el ? que es un operador ternario también usado en C, nos devuelve una expresión u otra. Esto es algo muy usado.

Bueno ya tenemos los scripts. Ahora como tengo guardados los scripts en la variable &scripts, voy a borrar los scripts originales:

$encabezado['scripts'] = array();

Y ahora ya casi está. MooTools puede cargar estos 4 archivos: mootools-core.js, mootools-more.js, core.js y caption.js. Voy a examinar la matriz con foreach y voy a escoger solamente los scripts que no contengan mootools. "direccion" contiene los enlaces donde se encuentran los scripts, mientras que "tipo" es un array que contiene el tipo de script (mime, defer, async). Lo voy probando ya que el primer código que hice me daba errores, hasta que llego a este código que funciona perfecto:

foreach($scripts as $direccion=>$tipo)
{
  if (strpos($direccion, 'mootools') === false && strpos($direccion, 'js/core.js') === false && strpos($direccion, 'caption.js') === false)
    {
      $encabezado['scripts'][$direccion] = $tipo;
    }
}

Ahora veremos esto mismo pero al revés es decir, en vez de obtener los scripts que no contengan MooTools voy a eliminarlos con la función unset. Esto nos evitará extraer los scripts, ya que podemos trabajar con los datos de $encabezado directamente:

foreach($encabezado['scripts'] as $direccion=>$tipo)
{
  if (strpos($direccion, 'mootools') !== false || strpos($direccion, 'js/core.js') !== false || strpos($direccion, 'caption.js') !== false )
    {
       unset($encabezado['scripts'][$direccion]);
    }
}

Y finalmente hay que volver a restaurar el encabezado con los nuevos scripts modificados:

$documento->setHeadData($encabezado);

He explicado el código paso a paso para que tú lo puedas modificar a tu gusto, después de unas cuantas modificaciones y probándolo sin depurador lo he testeado y funciona correctamente. De todos modos, si ves algo que está mal, coméntalo. En el siguiente tutorial crearemos el plugin para Joomla! > 1.6 y pondré uno en descarga para que puedas usarlo.

Última actualización: Domingo, 04 Septiembre 2011
Comentarios  
0 # Antonio 02-06-2015 00:13
Gracias a mi me ha servido tu código de php de operador terrnario para un código que estoy programando con javascript.
Responder | Responder con una citación | Citar
Escribir un comentario
Antes de publicar un comentario, usted debe aceptar nuestras condiciones de uso: Condiciones de uso. Debido al spam, todos los comentarios serán moderados. Normalmente se responde en unos minutos, refresca los comentarios para comprobarlo.



 
Visitas: 8490854