Incluindo uma versão diferente do jQuery apenas em uma página específica


16

O módulo de atualização do jQuery está incluindo este script.

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

Eu preciso disso em todas as páginas, exceto em um arquivo de modelo específico que estou usando, e preciso de uma versão posterior do jQuery.

Preciso excluir a atualização do jQuery de colocar o script acima $scriptsapenas na variável ON-page-media-photos.tpl.php. Como posso conseguir isso?

Respostas:


10

Aqui estão as suas opções:

  • Use o jQuery Multi , como mencionado em outra resposta. Ele pode ser configurado para carregar a versão superior do jQuery apenas nessa página e apenas na caixa sofisticada. Não interferirá no jQuery do Drupal ou no jQuery do jquery_update.
  • No Drupal 7, você pode usar hook_js_alter () , que permitirá trocar a versão do jquery_update pelo que você desejar.
  • No Drupal 6 com jQuery Update , ele fornece um gancho que permite alterar o JS depois que ele faz suas coisas. Você pode olhar o código do jQuery Multi 6.x para ver como ele usa esse gancho .
  • No Drupal 6 sem atualização do jQuery , você pode fazer isso usando um gancho preprocess_page. A $scriptsvariável estará disponível lá e você poderá alterá-la. Isso pode ficar um pouco complicado. Você também pode ver como o qmulti faz isso . O jQuery Update também faz isso de maneira semelhante.

Lembre-se de que trocar para uma versão mais alta do jQuery pode quebrar algumas coisas no núcleo e no contrib do Drupal, que é o problema que o jQuery Multi resolve. Portanto, se você fizer isso, verifique se não está quebrando nada. O benefício aqui é que você apenas carrega o jQuery necessário, enquanto que com o jQuery Multi você carrega os dois.


Note que hook_js_alter não está disponível no D6
David Thomas

2
Alterou a resposta para obter informações sobre o D6 também.
goron

Concordo em usar o jQuery multi se você quiser executar várias versões do jQuery. Eu recomendaria apenas a atualização do jquery se você quiser executar a versão mais recente de todo o site. Além disso, na minha experiência, a atualização do jquery para o jquery 1.7 e 1.8 ainda está com problemas para usar na produção.
ROOBY

3

Existe um módulo jQuery multi . Este módulo permite que você tenha multiple versions of jQuery run parallelem sua instância drupal. Ele fornece um aliaspara cada instância que você pode usar para chamar essa versão do jquery.


3

Se você tiver problemas com o jqueryupdate e visualiza as páginas de administração (por exemplo), tente instalar a versão Dev do ctools e tudo ficará bem, apenas testei a mim mesmo.


3

Por favor, encontre este código útil, coloque-o em seu 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 forneça o caminho de js para ex: sites / all / modules / og / og.js


função 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 ('cabeçalho', $ scripts); } isso parece não funcionar
albo

Voto a favor, mas ele não funciona.
albo

Atualizei o código para indicar que você precisa substituir MYTHEME pelo nome do tema em vez de usar "phptemplate". Além disso, eu não recomendaria o uso desse tipo de abordagem para remover uma biblioteca da qual outros js dependem, como o jQuery, porque isso não leva em conta a ordem em que o js é carregado e você pode acabar com erros indefinidos do jquery se Os plugins jQuery são carregados antes de uma versão do jQuery. Além disso, a maneira como a atualização do jQuery funciona é mais complexa do que apenas desarmar um arquivo js.
ROOBY

2

Drupal 7

Você pode ligar jquery_update_jquery_replace()para uma página específica (por exemplo, dentro hook_library_alter()), como demonstrado aqui 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

Minha solução foi mudar JQUERY_UPDATE_REPLACE_PATHconstante antes de jquery_updatecarregá-lo:

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

Portanto, ele pode ser adicionado no início do arquivo .module (que já foi carregado antes jquery_updateou no arquivo de configurações).


Não para seqüestrar sua resposta, mas talvez você também queira adicionar a variável D8 dela?
Pierre.Vriens

Eu não joguei muito 8, então não tenho certeza qual seria a solução para o D8, desculpe. Sinta-se livre para sugerir editar ou postar uma resposta. Ou talvez valha a pena criar outra pergunta para o D8 especificamente.
kenorb
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.