5

Drupal の新規インストールで CiviCRM をインストールし、CiviCRM をカスタマイズしてデータを追加しました。実際の Drupal サイトは、個別のインストールで個別に構築されました。完成したので、CiviCRM を新しい Drupal サイト (ファイルとデータベース) とマージしました。CiviCRM にログインしている場合を除いて、すべてが機能しているように見えます: http://example.com/civicrm/dashboardと書かれています:

「ダッシュボード機能を使用するには、ブラウザで Javascript を有効にする必要があります。」

はい、Javascriptが有効になっています。CiviCRM メニューはすべて壊れています。Chrome は次のエラーも報告します。

Uncaught TypeError: Object # has no method 'menu' jquery.textarearesizer.js:5Uncaught TypeError: Object # has no method 'TextAreaResizer' main.js:6Uncaught TypeError: Object # has no method 'cycle' jquery.textarearesizer.js:5Uncaught TypeError: オブジェクト # にはメソッド 'TextAreaResizer' がありません

パフォーマンスが低下している Javascript 圧縮が有効になっていません。何か案は?

4

2 に答える 2

2

CiviCRM は、Drupal JQuery ライブラリとの競合を避けるために、jQuery オブジェクトを $ ではなく cj として使用します。理論的には、名前空間が異なるため、異なるバージョンを使用しても問題ありません (jQuery は noConflict() を使用して公式にサポートしています)。

おそらく、変更によって Drupal または CiviCRM のいずれかがブートストラップの別の時点で jQuery ライブラリをロードしたり、jQuery を複数回ロードしようとしたりすることで競合が発生します。これにより、$ を cj に変換する操作は、Drupal jQuery オブジェクトがインスタンス化される前ではなく、インスタンス化された後に取得され、Drupal や CiviCRM は必要なライブラリを $ オブジェクトにアタッチする必要がなくなります (代わりに # を使用していますか?の $?)。

問題のページとその JavaScript インクルードのあらゆる場所で noConflict() を使用するすべてのコードを検索します。1 か所だけで見つける必要があります。demo.civicrm.org のページと比較して違いを確認すると、どこかに追加のページが見つかるはずです。これを修正するには、Drupal システム テーブルでカスタム モジュールのロード順序を調整するか、2 番目の noConflict() 呼び出しを cj オブジェクトがまだ存在しない場合に条件付きで実行するように設定することをお勧めします。

于 2012-02-17T16:13:17.537 に答える
1

バグレポートを完了しました。このパッチを適用すると、問題が一見クリーンな方法で解決されました。このようにして、jQuery ライブラリは、必要でない場合でも複数回ロードされることはありません。

于 2012-08-16T12:14:48.443 に答える