web-dev-qa-db-ja.com

管理テーマが使用されているときにjquery_updateを無効にするにはどうすればよいですか?

jQuery Update をインストールしましたが、管理UIを扱うのに苦労するいくつかのコア機能が壊れています。 jQuery Updateを有効にしたまま、管理テーマが表示されているときに無効にする方法はありますか?

4
markdorison

下線の問題は実際にはコアの問題であり、現在 http://drupal.org/node/1480568 で修正されていることに注意してください。

とにかく、人々がまだこれを修正する必要がある場合、これは私が実施しているものです。

/**
 * Implements hook_module_implements_alter().
 */
function hook_module_implements_alter(&$implementations, $hook) {
  // Make sure to check if the module is enabled or this will cause fatal errors
  if ($hook == 'library_alter' && module_exists('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 hook_library_alter(&$libraries, $module) {
  // If it is an admin path all we want to do is change the global $conf
  // variable so when jquery_update runs right after us it will use 1.5.
  if (path_is_admin(current_path())) {
    // Modifying global $conf variable, can be dangerous. Be carefull.
    global $conf;
    $conf['jquery_update_jquery_version'] = '1.5';
  }
}

これにより、jquery_udpateが管理パスの場合に変数を使用する直前に変数が変更されます。また、これは「admin」というURLをチェックするのにハードコード化されていません。管理パスは/ node/1/editなどにすることもできます。

4
ericduran

パッチを適用した 未解決の問題 がありますが、まだテストしていません。

また、更新によってctoolsポップアップで問題が発生する可能性があるため、 ctools パスも除外されるようにパッチを微調整する必要がある場合があることに注意してください。ノードの追加および編集ページを検出するためのロジックを追加する必要がある場合もあります。

2
mpdonadio

残念ながら、これは非常に困難です(私が考えていないハックがない限り)。

JQuery Updateモジュールは、jQuery/jQuery UIおよびその他の関連するJavaScriptファイルを jquery_update_library_alter() 関数のライブラリレベルで置き換えます。そのフックからのデータはキャッシュされ、システム全体で使用されます。

したがって、ページを読み込むたびにキャッシュをクリアし、独自のhook_library_alter()を実装して、すべてのライブラリを管理ページのみの元の状態にリセットしても、変更はシステム全体に反映されます。サイトのフロントエンドへの訪問者も、元のライブラリを使用します。

それが許容できる場合でも(私は想像もできませんが)、独自のhook_library_alter()実装のためにjQuery Updateによって行われた変更をリバースエンジニアリングする必要があります。

[〜#〜]更新[〜#〜]

一種のハックが思い浮かびました。 hook_js_alter() (テーマまたはモジュールレベルで)を実装して、更新されたjQueryファイルを古いファイルで手動で置き換えることができます。これらのファイルのどれを置き換える必要があるかを検討する必要がありますが、ページをロードするたびにキャッシュをクリアしなくても問題を解決できます。

1
Clive