【发布时间】:2009-08-25 18:11:13
【问题描述】:
我的站点上有一个自定义 jQuery 手风琴菜单的模块,当启用该模块时,它会破坏我的 RokSlideshow 模块。
我无法让它们同时工作。
网站是http://www.fbcsheffield.org/2.0
任何帮助将不胜感激!
【问题讨论】:
我的站点上有一个自定义 jQuery 手风琴菜单的模块,当启用该模块时,它会破坏我的 RokSlideshow 模块。
我无法让它们同时工作。
网站是http://www.fbcsheffield.org/2.0
任何帮助将不胜感激!
【问题讨论】:
您必须先强制 MooTools 加载,然后加载 jQuery 并告诉它在执行任何 jQuery 代码或插件之前进入无冲突模式。检查第 183 页:http://www.packtpub.com/files/learning-joomla-1-5-extension-development-sample-chapter-8-using-javascript-effects.pdf 或 Joomla 论坛上的此线程:http://forum.joomla.org/viewtopic.php?f=231&t=283215
编辑:您实际上不必首先加载 MooTools,您只需要确保在加载 jQuery 之后立即调用 jQuery.noConflict(): http://www.designvsdevelop.com/jquery-in-joomla-i-was-wrong
【讨论】:
【讨论】:
Joomla 使用 ob_start() 缓冲所有内容。您可以通过以下方式获取当前缓冲区:
$body = JResponse::getBody();
然后您可以找到 JQuery 和 MooTools 脚本声明,并使用“onAfterRender”事件在系统插件中重新构造它们。
您可以使用 preg_replace() 来获取 JQuery 并在 MooTools 之后放入。然后,您可以在 JQuery 中启用无冲突模式。
jQuery.noConflict();
这是一个将 MooTools 从 1.1 更改为 1.2 的示例插件。您可以为 JQuery 的无冲突模式做一些类似的事情。
<?php
/**
* MooTools1.2 w/ 1.1 compat for AjaxChat
* @copyright www.fijiwebdesign.com
* @author gabe@fijiwebdesign.com
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
*/
// included only
defined( '_JEXEC' ) or die( 'Direct Access to this location is not allowed!' );
jimport( 'joomla.plugin.plugin' );
/**
* Joomla PHP Speedy Integration
*
* @author gabe@fijiwebdesign.com
*/
class plgSystemAjaxchat extends JPlugin
{
/**
* Constructor
*
* For php4 compatability we must not use the __constructor as a constructor for plugins
* because func_get_args ( void ) returns a copy of all passed arguments NOT references.
* This causes problems with cross-referencing necessary for the observer design pattern.
*
* @access protected
* @param object $subject The object to observe
* @param array $config An array that holds the plugin configuration
* @since 1.0
*/
function plgSystemAjaxchat(& $subject, $config)
{
parent::__construct($subject, $config);
$mainframe =& JFactory::getApplication();
$document =& JFactory::getDocument();
$doctype = $document->getType();
// deactivate for backend
if ($mainframe->isAdmin()) {
return false;
}
// add mootools 1.2
if ( $doctype == 'html' ) {
$document->addScript('components/com_ajaxchat/js/mootools-1.2-core.js');
$document->addScript('components/com_ajaxchat/js/mootools-1.2-more.js');
$document->addScript('components/com_ajaxchat/js/mootools-1.2-core-compat.js');
$document->addScript('components/com_ajaxchat/js/mootools-1.2-more-compat.js');
}
}
/**
* After Templte output is in buffer
*/
function onAfterRender() {
$mainframe =& JFactory::getApplication();
$document =& JFactory::getDocument();
$doctype = $document->getType();
// deactivate for backend
if ($mainframe->isAdmin()) {
return false;
}
// Only render for HTML output
if ( $doctype !== 'html' ) {
return;
}
// get the output buffer
$body = JResponse::getBody();
// remove mootools if not needed
if (stristr($body, 'mootools.js') || stristr($body, 'mootools-uncompressed.js')) {
$body = preg_replace("/<script.*?mootools(-uncompressed)?\.js.*?<\/script>/i", '', $body);
} else {
$body = preg_replace("/<script.*?mootools-1\.2\-.*?\.js.*?<\/script>[\s\t\r\n]*/i", "\n", $body);
}
JResponse::setBody($body);
}
}
?>
【讨论】:
你有 moo-tools 和 jquery 冲突。我建议使用 jquery 幻灯片模块 - 这将是最简单的方法。
编辑:冲突看起来他们正在使用相同的命名空间,但我没有太多时间去深入细节
【讨论】: