我需要在Drupal中使用最新版本的jQuery。
jQuery更新模块是不够的,因为它不会将jquery更新到其最新版本。
有没有在前端使用最新版本的jquery,而后端包含drupal版本?
我应该处理主题模板文件吗?这会导致问题吗?
感谢
答案 0 :(得分:3)
Drupal在每个使用JavaScript的页面中都包含jQuery库。使用比Drupal更新版本的jQuery的唯一方法是安装jQuery Update,它还提供了一个脚本,用于与使用旧版本库的脚本兼容。 jQuery Update模块更新:
如果您只是简单地替换/ 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:
用
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 ...