我需要在我的Drupal中使用最新版本的jQuery。Drupal和最新的jQuery
jQuery更新模块是不够的,因为它不会更新jquery到其最新版本。
无论如何要在前端使用最新版本的jquery,并在后端使用包含drupal的版本?
我应该使用主题模板文件吗?这是否会导致问题?
谢谢
我需要在我的Drupal中使用最新版本的jQuery。Drupal和最新的jQuery
jQuery更新模块是不够的,因为它不会更新jquery到其最新版本。
无论如何要在前端使用最新版本的jquery,并在后端使用包含drupal的版本?
我应该使用主题模板文件吗?这是否会导致问题?
谢谢
Drupal在每个使用JavaScript的页面中包含jQuery库。使用比一个Drupal附带的jQuery更新版本的唯一方法是安装jQuery Update,它还提供了一个脚本,用于与使用旧版本库的脚本兼容。 jQuery的更新模块的更新:
如果您要简单地替换/ misc中包含的jQuery库,那么Drupal脚本将停止工作(我试过这样做,那就是结果)。 在Drupal将该库加载到/ misc之后加载更新的版本也会导致问题。
为了完成这些信息,有一个模块附带了自己版本的jQuery库,然后绑定到$ui
;这样,其他代码仍然会使用默认的jQuery库,而您的模块/主题将使用更新的库。 只需将该模块加载了自己的jQuery的版本,然后执行以下JavaScript行:
window.$ui = jQuery.noConflict(true);
使用相同的方法,你就可以加载最新版本的jQuery的,且不会与现有模块的任何冲突。 如果您使用从其他人开发的模块并使用使用$
的Javascript代码,则此系统不起作用;它适用于您在您的网站上运行的自定义模块/主题。
您是否对前端和后端使用不同的主题?您可以在前端的template.php中添加一些代码到themename_preprocess_page()函数中,以替换该主题中的jquery文件。
是我使用不同的主题。确实..但我想知道这是否安全。例如..假设我正在使用需要jQuery的lightbox模块:它是使用旧的jquery开发的..可能会导致冲突吗? – aneuryzm 2010-08-06 20:22:16
问题是jQuery不是用于主题,而是来自Drupal核心代码。 – kiamlaluno 2010-08-07 06:22:05
当然,kiamlaluno是对的。然而,像CCK和Views这样的Drupal核心和模块主要在管理页面上使用jQuery,而在前端页面上则少得多。因此,如果您可以确保您的管理主题使用1.2.6,而您的前端主题使用1.4.2,则需要解决的问题更少。 – marcvangend 2010-08-07 07:25:24
1)下载jquery-1.4.2.js和jquery-1.4.2.min.js。
2)将它们复制到jquery_update /替换文件夹。
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')];
}
这会给我带来一些使用jquery前端模块的问题。查看其他答案/评论。 – aneuryzm 2010-08-08 09:22:41
约using jQuery.noConflict()
什么?我不知道Drupal模块在jQuery 1.2/1.3中有任何具体的例子,但是在1.4中打破了这个测试,但在Drupal加载jQuery 1.2/1.3之后,表面上加载了jQuery 1.4(所以,将它添加到你的主题中)并使用var jNew = jQuery.noConflict()
会将$()
返回给Drupal大部分期望的jQuery,并允许您使用jNew()
来执行您需要执行的jQuery 1.4操作。
我会试试这个解决方案。所以,看看我是否理解得很清楚:当我使用jNew()选择我的项目时,我正在使用新的jquery而不是旧的! – aneuryzm 2010-08-08 16:23:21
这是正确的。 Drupal及其模块仍然会使用'$()'或'jQuery()'来选择事物,并且从不怀疑还有另一个版本的jQuery也被加载。 – 2010-08-08 17:01:24
是的,您可以使用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/。
感谢您一直在寻找的东西,不需要补丁。 – chadpeppers 2013-04-25 19:53:47
对于前端我做了一些“坏”,但它的工作。
我包括了最新的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 ...
jQuery更新通常也是我推荐的,但不幸的是,最新的稳定版本随附于1.2.6版本,最新的alpha版本随附1.3.2。对于真正需要jQuery 1.4.x的人来说,目前还没有完美的解决方案。 – marcvangend 2010-08-07 07:29:39
@marcvangend:就是这一点。我完全同意,谢谢。 – aneuryzm 2010-08-08 09:21:32