【问题标题】:Joomla, jQuery modules conflictingJoomla,jQuery模块冲突
【发布时间】:2009-08-25 18:11:13
【问题描述】:

我的站点上有一个自定义 jQuery 手风琴菜单的模块,当启用该模块时,它会破坏我的 RokSlideshow 模块。

我无法让它们同时工作。

网站是http://www.fbcsheffield.org/2.0

任何帮助将不胜感激!

【问题讨论】:

    标签: jquery joomla


    【解决方案1】:

    您必须先强制​​ 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

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          你有 moo-tools 和 jquery 冲突。我建议使用 jquery 幻灯片模块 - 这将是最简单的方法。

          编辑:冲突看起来他们正在使用相同的命名空间,但我没有太多时间去深入细节

          【讨论】:

            【解决方案5】:
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-12-20
            • 2016-06-23
            • 2013-08-27
            • 2012-03-29
            • 1970-01-01
            • 1970-01-01
            • 2012-11-27
            相关资源
            最近更新 更多