Drupal和最新的jQuery

时间:2010-08-06 17:42:45

标签: jquery drupal drupal-6

我需要在Drupal中使用最新版本的jQuery。

jQuery更新模块是不够的,因为它不会将jquery更新到其最新版本。

有没有在前端使用最新版本的jquery,而后端包含drupal版本?

我应该处理主题模板文件吗?这会导致问题吗?

感谢

6 个答案:

答案 0 :(得分:3)

Drupal在每个使用JavaScript的页面中都包含jQuery库。使用比Drupal更新版本的jQuery的唯一方法是安装jQuery Update,它还提供了一个脚本,用于与使用旧版本库的脚本兼容。 jQuery Update模块更新:

  • Drupal 5到jQuery 1.2.6
  • Drupal 6到jQuery 1.3.2
  • Drupal 7到jQuery 1.5.2,以及jQuery UI 1.8.11

如果您只是简单地替换/ misc中包含的jQuery库,那么Drupal脚本将停止工作(我尝试这样做,结果就是这样)。 在Drupal将库加载到/ misc之后加载更新的版本也会导致问题。

为了完成这些信息,有一个模块附带了自己版本的jQuery库,然后绑定到$ui;这样,其他代码仍将使用默认的jQuery库,而您的模块/主题将使用更新的库。 该模块只是加载了自己的jQuery版本,然后执行了以下JavaScript行:

window.$ui = jQuery.noConflict(true);

使用相同的方法,您将能够加载最新版本的jQuery,而不会与现有模块产生任何冲突。 如果您使用的是从其他人开发的模块,并且使用使用$的Javascript代码,则此系统不起作用;它适用于您在网站上运行的自定义模块/主题。

答案 1 :(得分:2)

是的,您可以使用jquery更新(如果您需要jQuery 1.8使用开发版)和模块中的代码来切换前端和后端的版本。

/**
 * Implements hook_module_implements_alter().
 */
function mymodule_site_module_implements_alter(&$implementations, $hook) {
  if ($hook == 'library_alter') {
    if(isset($implementations['jquery_update'])) {
      // Move jquery update to the end. This will make sure our hook_library_alter
      // is always called before the jquery_update.
      $jquery_update = $implementations['jquery_update'];
      unset($implementations['jquery_update']);
      $implementations['jquery_update'] = $jquery_update;
    }
  }
}

/**
 * Implements hook_library_alter().
 */
function mymodule_site_library_alter(&$libraries, $module) {
  // If it is the admin theme all we want to do is change the global $conf
  // variable so when jquery_update runs right after us it will use 1.5.
  // We are not using path_is_admin(current_path()) because some admin path can use
  // the frontend theme like node edit page
  global $theme_key;
  if (variable_get('admin_theme') == $theme_key) {
    // Modifying global $conf variable, can be dangerous. Be carefull.
    global $conf;
    $conf['jquery_update_jquery_version'] = '1.5';
  }
}

我写了一篇关于它的博客文章http://antistatique.net/blog/2013/01/04/drupal-use-a-different-jquerys-version-for-the-frontend-and-backend/

答案 2 :(得分:0)

您是否在前端和后端使用单独的主题?您可以在前端的template.php中的themename_preprocess_page()函数中添加一些代码,以仅替换该主题中的jquery文件。

答案 3 :(得分:0)

1)下载jquery-1.4.2.js和jquery-1.4.2.min.js 2)将它们复制到jquery_update / replace文件夹 3)编辑jquery_update.module:
   用

替换函数jquery_update_jquery_path(){}
function jquery_update_jquery_path() { 
    $jquery_file = preg_match('/(admin|edit|add)/', request_uri()) ?
        array('none' => 'jquery.js',       'min' => 'jquery.min.js') :
        array('none' => 'jquery-1.4.2.js', 'min' => 'jquery-1.4.2.min.js');
    return JQUERY_UPDATE_REPLACE_PATH . '/' . $jquery_file[variable_get('jquery_update_compression_type', 'min')];
} 

答案 4 :(得分:0)

using jQuery.noConflict()怎么样?我不知道在jQuery 1.2 / 1.3中工作的Drupal模块的任何具体示例,但在1.4中打破以测试它,但在Drupal加载jQuery 1.2 / 1.3(因此,将其添加到您的主题)并使用后表面上加载jQuery 1.4 var jNew = jQuery.noConflict()会将$()传递回Drupal期望的大部分jQuery,并允许您使用jNew()来执行您需要执行的jQuery 1.4操作。

答案 5 :(得分:0)

对于前端我做了一些事情"坏",但它确实有效。

我收录了最新的jQuery

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">$.browser = {msie: false}; // fix for scripts that use that property</script>

禁用了drupal的jQuery

<?php print str_replace(
    '<script type="text/javascript" src="/misc/jquery.js', 
    '<script no-drupal-jquery="', 
    $scripts
);
?>

我得到了

<script no-drupal-jquery="?W"></script>
<script ...