一部のJavaScriptファイルはモバイルテーマのカスタムJavaScriptと競合するため、削除したかったのです。
次のコードを試してみましたが、hook_preprocess_page()
では機能しません。 hook_preprocess_page()
の変更後にpage.tpl.phpの$scripts
の元の初期化が読み込まれるだけです。
// Load all js scripts
$scripts = drupal_add_js();
// Unset all unnecessary scripts
unset($scripts['module']['sites/all/modules/ajax/ajax.js']);
unset($scripts['module']['sites/all/modules/contribs/mollom/mollom.js']);
unset($scripts['module']['sites/all/modules/contribs/views_slideshow/js/jquery.cycle.all.min.js']);
unset($scripts['module']['sites/all/modules/contribs/views_slideshow/contrib/views_slideshow_singleframe/views_slideshow.js']);
unset($scripts['module']['sites/all/modules/contribs/views_slideshow/contrib/views_slideshow_thumbnailhover/views_slideshow.js']);
unset($scripts['module']['sites/all/modules/quicktabs/js/quicktabs.js']);
unset($scripts['module']['sites/all/modules/panels/js/panels.js']);
unset($scripts['module']['sites/all/modules/tipsy/javascripts/jquery.tipsy.js']);
unset($scripts['module']['sites/all/modules/tipsy/javascripts/tipsy.js']);
unset($scripts['module']['sites/all/modules/boxes/boxes.js']);
// Recreate the template variables
$vars['scripts'] = drupal_get_js('header', $scripts);
テーマの使用時に読み込まれるJavaScriptファイルのリストからJavaScriptファイルを削除するにはどうすればよいですか?
これは私の問題をどのように解決しました。
Jquery_updateがhook_theme_registry_alter()
を使用してDrupalコアでjqueryの設定を解除し、Jqueryの新しいバージョンを置き換えます。したがって、すべての後にこの_preprocess function
_がロードされています。何が私はhook_theme_registry_alter()
を作成し、_jquery_update
_モジュールよりも高いモジュールのweight
を更新して、jquery_update_theme_registry_alter()
を上書きできるようにしました。
このjquery_update_theme_registry_alter()
は、私の場合のようにいくつかの調整を行っている場合に、大きな頭痛の種となるjavascriptの変更を防ぎます。
コード:
_function my_module_theme_registry_alter(&$theme_registry) {
global $theme;
// Only apply this code in mobile theme
if($theme == 'myTheme') {
//Attach the my_module_preprocess_page in the theme registry preprocess functions
$theme_registry['page']['preprocess functions'][] = 'my_module_preprocess_page';
}
}
function my_module_preprocess_page(&$variables) {
// Perform the logic if either jQuery Update's jquery.js is newer than core's.
if (variable_get('jquery_update_replace', TRUE)) {
// Get an array of all the JavaScript files loaded by Drupal on this page.
$scripts = drupal_add_js();
// Replace jquery.js first.
$new_jquery = array(jquery_update_jquery_path() => $scripts['core']['misc/jquery.js']);
$scripts['core'] = array_merge($new_jquery, $scripts['core']);
unset($scripts['core']['misc/jquery.js']);
// Loop through each of the required replacements.
foreach (jquery_update_get_replacements() as $type => $replacements) {
foreach ($replacements as $find => $replace) {
// If the file to replace is loaded on this page...
if (isset($scripts[$type][$find])) {
// Create a new entry for the replacement file, and unset the original one.
$replace = JQUERY_UPDATE_REPLACE_PATH .'/'. $replace;
$scripts[$type][$replace] = $scripts[$type][$find];
unset($scripts[$type][$find]);
}
}
}
// Unset javascripts that is/are not needed in mobile theme
unset($scripts['module']['sites/all/modules/boxes/boxes.js']);
.....
// Recreate the scripts variable
$variables['scripts'] = drupal_get_js('header', $scripts);
}
}
_
これが他の人を助けることを願っています。このアプローチが違反であるかどうか教えてください。ありがとう
チェックアウト AdvAgg 。使用するフックがあり、jquery updateでうまく機能します。