2011-07-07 9 views
1

私の質問は他の多くの人と似ていますが、詳細は新しい質問を正当化するのに十分であることを願っています。私が取り組んでいるjoomlaサイトは、mod_superfishmenuを使います。これはjQuery 1.2.6をロードします。それを伸ばす。私は、jQuery 1.3またはそれ以上を必要とするjQueryカラーボックス・プラグインを使用するコンポーネントを作成しており、JQueryを再拡張しています。両方を持つ1つの方法は、jQuery.noConflict()を使用して別の名前にjQueryを再割り当てすることです。例えば、 JoomlaのサイトでjQueryの名前を変更せずに複数のjQueryバージョンを使用する

<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js'> 
</script> 
<script type='text/javascript'> 
var jQuery1 = jQuery.noConflict(true); 
</script> 

、その後はjQuery1にカラーボックス用のJavaScriptコードではjQueryのすべてのインスタンスを変更し、SUPERFISHモジュールはjQueryのをロードする前に、必ずこのすべての負荷を作ります。しかし、私はカラーボックスのコードを編集したり、新しいバージョンにアップグレードすると再び編集するのを忘れてしまいます。だから、古いjQueryをロードしてからjQuery.noConflict(true)を使って名前を変更し、現在のjQueryをロードし、最初のjQueryに接続されているプラ​​グインを2番目のjQueryに転送することができると考えました。コピープラグインは次のようになり一部は:

<script type='text/javascript'> 
var oldJquery = null; 
if (jQuery != undefined) { 
    oldJquery = jQuery.noConflict(true); 
} 
</script> 

<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js'> 
</script> 

<script type='text/javascript'> 
jQuery.noConflict(); 
if (oldJquery) { 
    for (plugin in oldJquery.fn) { 
    if (!(plugin in jQuery.fn)) 
     jQuery.fn[plugin] = oldJquery.fn[plugin]; 
    } 
} 
</script> 

これが動作しているようですが、私は後で私をかむことができますいくつかの詳細を見落としてきたことを心配します。だから誰かがこのアプローチの欠陥を見たら、それを指摘してください。なぜこれが悪い考えであるかを示す批判も歓迎します。ありがとう。

+1

jQuery 1.3を使用するだけでいいですか?これはすべての1.2.6の機能も提供するはずです。 – iHaveacomputer

+0

私は本当に複数のjQueryバージョンの読み込みに対してアドバイスします。これによりページの読み込み時間が増加するだけでなく、問題を尋ねているだけです。 –

+0

@ iHaveacomputer、それはjQuery 1.2.6をロードするjoomlaモジュールです。私はjQuery 1.3をモジュールのjavascriptディレクトリに置くことができましたが、もう一度標準の(古くなっていれば)モジュールを変更しない方がいいです。 – yitwail

答えて

0

mod_superfishmenuを簡単に変更し、jQuery 1.2.6を含む行を削除してみませんか?このようにして、jQueryのcolorboxプラグインは、mod_superfishmenuも使用するjQuery 1.3自体をロードします。シンプルな1行の変更は難しくありません。

私はJoomlaのすべての開発者が、javascriptライブラリを含むすべての開発者が、バックエンド設定を持っている必要があります。ユーザーは、競合があればライブラリを有効または無効にする必要があります。

+0

が一般的です。問題は、それがjQuery 1.4を含む私のコンポーネントだということです。例えば、com_contentのように、ページが別のコンポーネントを表示しているときにsuperfishメニューが機能しなくなります。唯一のフレームワークjoomlaにはデフォルトでmootoolsが含まれています – yitwail

+0

シンプルなので、jQueryをコンポーネントから削除して、スーパーフィッシュメニューに残しておきます。または、すべてのjQueryを削除し、テンプレートにインクルードとして追加します。魚を調理する多くの方法。 – Martin

関連する問題