Usar jQuery 1.4.2 en Drupal 6
Hace un tiempo necesité hacer una cosa bastante divertida en jQuery, pero a sabiendas de que con jQuery 1.4.2 iba a ir mas rápido mi desarrollo, me tome el atrevimiento de ponerlo a disposición de mi modulo.
Lo primero que hay que hacer es registrar a la función que se va a encargar de inyectar el nuevo jQuery en las funciones que se ejecutan al pre procesar page.tpl.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/** * Implementation of hook_theme_registry_alter(). * la usamos para reemplazar jquery core por la v 1.4.2 */ function mimodulo_theme_registry_alter(&$theme_registry) { /* Me fijo si ya está seteada la funcion nuestra y si la encuentro la quito del array de funciones para poder incluirla mas adelante al fondo de la cola de ejecucion. Este paso es importante, ya que si nuestra funcion estuviera ejecutandose antes que cualquier otra, correriamos el riesgo de que algun otra funcion resetee el cambio que estamos queriendo hacer. */ if (isset($theme_registry['page'])) { if ($key = array_search('inyecta_jquery', $theme_registry['page']['preprocess functions'])) { unset($theme_registry['page']['preprocess functions'][$key]); } $theme_registry['page']['preprocess functions'][] = 'inyecta_jquery'; } } |
Vamos a aclarar una cosa antes de seguir. Drupal 6 NO fue pensado para funcionar correctamente con versiones superiores de jQuery, y mucho menos los módulos de terceros.
Esto lo aclaro porque dentro del siguiente trozo van a ver que evalúo dentro de que URL estoy antes de inyectar la nueva versión de jQuery, y lo hago porque en mi caso, solamente me hace falta en esa pagina.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
/** * @param $variables array de todas las variables que tiene el theme. * @return void */ function inyecta_jquery(&$variables) { //esta modificacion es muy puntual, y si no estamos sobre la pagina que queremos no hacemos nada //supongamos que la url es www.ecapy.com/prueba/jquery/1-4-2 if (check_plain(arg(0)) == "prueba" && check_plain(arg(1)) == "jquery" && check_plain(arg(2)) == "1-4-2") { // como hay paginas en las que no se carga ningun js lo checkeamos antes de nada if (!empty($variables['scripts'])) { //Obtenemos el array de js que se van a cargar $scripts = drupal_add_js(); //preparamos la ruta hasta donde tenemos guardado nuestro jquery 1.4.2 $jqNew = drupal_get_path('module', 'mimodulo') . '/js/jquery.1.4.2.min.js'; $new_jquery[$jqNew] = array("defer" => false, "cache" => false, "preprocess" => true); //lo incluimos en el array de js's en lo que viene a ser los js del core $scripts['core'] = array_merge($new_jquery, $scripts['core']); //volamos el anterior jquery (el del core) unset($scripts['core']['misc/jquery.js']); //por ultimo reemplazamos en $variables["scripts"] el array anterior por el que hemos manipulado $variables['scripts'] = drupal_get_js('header', $scripts); } } } |
Por que seteas cache como false en esta linea?:
$new_jquery[$jqNew] = array(“defer” => false, “cache” => false, “preprocess” => true);
la verdad es que no lo se. si lo activas anda bien.