私の現在のDrupal 6インストールでは、多数のJavascriptスクリプトがロードされています(コアスクリプト、jQuery、モジュールなど)。
私のテーマには必要なスクリプトが1つしかないので、そのファイルのみをインクルードし、他のすべてを削除します。
これを達成するための最良の方法は何ですか?
template.php
では、$vars['scripts']
の生成をオーバーライドして、ファイルだけにすることができます。
しかし、これは非常に悪い考えであり、多くの結果をもたらす可能性があると思います。
あなたはあなたのtemplate.phpにこのようなものを置くことができます:
function phptemplate_preprocess_page(&$vars) {
drupal_add_js($theme_path . '/js/your_js.js', 'theme');
$js = drupal_add_js();
unset($js['core']);
unset($js['module']); // or
unset($js); // but then it would also clear the drupal_add_js above
$vars['scripts'] = $js;
}
DrupalはjQueryをデフォルトのJavaScriptライブラリとして出荷します。以下を使用して推奨される方法でJavaScriptコードを追加しない限り、システムには含まれません。
scripts
配列にエントリを追加する他の多くのスクリプトもコアとモジュールによって追加されます。
テーマのphptemplate_preprocess_page
をオーバーライドして、それらを停止することができますtemplate.php
大量のスクリプトをロードするとパフォーマンスが低下するため、単一のJSファイルを含める場合は、Optimize JavaScript files
をexample.com/admin/settings/performance
でオンにすることができます。有効にした後、変更を有効にするためにキャッシュをフラッシュする必要があります。
Drupalには、削除の動機に関係なく、特定の資産を削除するための認可されたメカニズムが1つしかありません。
CSSの場合:
JSの場合:
.info
スタイルとスクリプトを除くすべてのスタイルとスクリプトを削除するには、以下のコードを使用します:
function hook_css_alter(&$css) {
$themes=list_themes();
foreach($css as $key=>$item) {
if (!in_array($key, $themes['yourthemename']->stylesheets['all'])) {
unset($css[$key]);
}
}
}
function hook_js_alter(&$js) {
$themes=list_themes();
foreach($js as $key=>$item) {
if (!in_array($key, $themes['yourthemename']->scripts)) {
unset($js[$key]);
}
}
}
テーマ/モジュールがカスタムの場合、当然のことながら、問題のあるコードを手動で削除できます。
これはかなり古い問題ですが、ここで良い解決策を実際に見ることができないので、私はそれを書こうと思いました。
基本的に、template.phpで行う必要があるのは、hook_js_alter($js)
を使用してから、devel(またはデバッグに使用するもの)を使用して$js
配列に含まれています。
組み込みたいものを解除します。 drupal.settingsを削除すると、多くの機能が失われることに注意してください。
JQueryを維持することをお勧めします。別のバージョンのjQueryを使用する必要がある場合は、jquery更新モジュール( http://drupal.org/project/jquery_update )を使用するか、別のソースからJSをインポートする場合は、バージョンを確認してくださいdrupal.settingsが読み込まれる場所の上に読み込まれます。