Incluyendo una versión diferente de jQuery solo en una página específica

16

El módulo de actualización de jQuery incluye este script.

<script type="text/javascript" src="/sites/all/modules/jquery_update/replace/jquery.min.js?6"></script>

Necesito esto en cada página, excepto un cierto archivo de plantilla que estoy usando, y necesito una versión posterior de jQuery.

Necesito excluir la actualización de jQuery de poner el script anterior en la $scriptsvariable SOLAMENTE en page-media-photos.tpl.php. ¿Cómo puedo conseguir esto?

albo
fuente

Respuestas:

10

Aquí están tus opciones:

  • Use jQuery Multi , como se menciona en otra respuesta. Se puede configurar para cargar la versión superior de jQuery solo en esa página y solo para el cuadro elegante. No interferirá con jQuery de Drupal o con jQuery de jquery_update.
  • En Drupal 7, puede usar hook_js_alter () , que le permitirá intercambiar la versión de jquery_update con lo que quiera.
  • En Drupal 6 con jQuery Update , proporciona un enlace que le permite alterar el JS después de que haya hecho lo suyo. Puede mirar el código jQuery Multi 6.x para ver cómo usa este gancho .
  • En Drupal 6 sin actualización de jQuery , puede hacerlo utilizando un enlace de preprocess_page. La $scriptsvariable estará disponible allí, y puede cambiarla. Esto puede ser un poco complicado. También puedes ver cómo qmulti hace esto . jQuery Update también hace esto de manera similar.

Recuerde que cambiar a una versión superior de jQuery puede romper algunas cosas en Drupal core y contrib, que es el problema que resuelve jQuery Multi. Entonces, si haces esto, asegúrate de no romper nada. El beneficio aquí es que solo carga la jQuery que necesita, mientras que con jQuery Multi cargará ambas.

goron
fuente
Nota, hook_js_alter no está disponible en D6
David Thomas
2
Cambió la respuesta para tener información D6 también.
goron
Estoy de acuerdo con el uso de jQuery multi si desea ejecutar varias versiones de jQuery. Solo recomendaría jquery update si desea ejecutar la versión más nueva para todo su sitio. Además, en mi experiencia, la actualización de jquery para jquery 1.7 y 1.8 todavía tiene errores para usar en la producción.
rooby
3

Hay un módulo jQuery multi . Este módulo le permite tener multiple versions of jQuery run parallelen su instancia de drupal. Proporciona un aliaspara cada instancia que puede usar para llamar a esa versión de jquery.

Gokul NK
fuente
3

Si tiene problemas con jqueryupdate y visualiza páginas de administración (por ejemplo) intente instalar la versión Dev de ctools y todo estará bien, solo lo probé.

Molfar
fuente
3

Por favor, encuentre este código útil, coloque este código en su template.php

function MYTHEME_preprocess_page(&$vars) {
  $scripts = drupal_add_js();
  if (in_array('page-media-photos', $vars['template_files'])) {
    unset($scripts['all']['module']['PATH_OF_JS_NEED_TO_REMOVE']);
  }
  $vars['scripts'] = drupal_get_js('header', $scripts);
}

PATH_OF_JS_NEED_TO_REMOVE da la ruta de js para ex: sites / all / modules / og / og.js

Ramesh Babu TB
fuente
función phptemplate_preprocess_page (& $ vars) {$ scripts = drupal_add_js (); if (in_array ('page-media-photos', $ vars ['template_files'])) unset ($ scripts ['all'] ['module'] ['/ sites / all / modules / jquery_update / replace / jquery. min.js ']); $ vars ['scripts'] = drupal_get_js ('encabezado', $ scripts); } esto no parecía funcionar
albo
Voté pero no funciona
albo
Actualicé el código para indicar que necesita reemplazar MYTHEME con el nombre de su tema en lugar de usar "phptemplate". Además, no recomendaría usar este tipo de enfoque para eliminar una biblioteca de la que dependen otros js, como jQuery, porque esto no tiene en cuenta el orden en que se carga js y podría terminar con jquery si hay errores indefinidos si otros Los complementos de jQuery se cargan antes de una versión de jQuery. Además, la forma en que funciona la actualización de jQuery es más compleja que simplemente desarmar un archivo js.
rooby
2

Drupal 7

Puede llamar jquery_update_jquery_replace()a una página específica (por ejemplo, en hook_library_alter()) como se demuestra aquí por drupalmoff :

<?php
/**
 * Implements hook_module_implements_alter().
 */
function your_module_module_implements_alter(&$implementations, $hook){
  if( $hook == 'library_alter' ){
    $group = $implementations ['your_module'];
    unset($implementations ['your_module']);
    $implementations ['your_module'] = $group;
  }
}

/**
 * Implements hook_library_alter().
 */
function your_module_library_alter(&$javascript, $module) {
  if( $module === 'system' && current_path() == 'path/to/page' ) {
    // Make sure we inject either the minified or uncompressed version as desired.
    $min = variable_get('jquery_update_compression_type', 'min') == 'none' ? '' : '.min';
    $cdn = variable_get('jquery_update_jquery_cdn', 'none');
    $path = drupal_get_path('module', 'jquery_update');

    $version = '1.7';

    jquery_update_jquery_replace($javascript, $cdn, $path, $min, $version);
  }
}
?>

Drupal 6

Mi solución fue cambiar la JQUERY_UPDATE_REPLACE_PATHconstante antes de jquery_updatecargarla:

<?php
/**
 * Replace jQuery files on specified paths (fix for IE 6&7 - jQuery bug: bugs.jquery.com/ticket/6498)
 */
// if (array_search($_GET['q'], array('my_page')) !== FALSE) {
if (arg(0) == 'node' && arg(1) == '123') {
  define('JQUERY_UPDATE_REPLACE_PATH', 'sites/all/libraries/jquery/1.5.2');
}
?>

Por lo tanto, se puede agregar ya sea al comienzo del archivo .module (que se carga antes jquery_updateo intentarlo en el archivo de configuración).

kenorb
fuente
No para secuestrar tu respuesta, pero ¿quizás también quieras agregarle la variante D8?
Pierre.Vriens
No jugué demasiado 8, así que no estoy seguro de cuál sería la solución para D8, lo siento. No dude en sugerir editar o publicar una respuesta. O puede valer la pena crear otra pregunta para D8 específicamente.
kenorb