web-dev-qa-db-ja.com

Javascriptファイルを削除するにはどうすればよいですか?

一部の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ファイルを削除するにはどうすればよいですか?

2
ninjascorner

これは私の問題をどのように解決しました。

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);
    }
}
_

これが他の人を助けることを願っています。このアプローチが違反であるかどうか教えてください。ありがとう

1
ninjascorner

チェックアウト AdvAgg 。使用するフックがあり、jquery updateでうまく機能します。

1
mikeytown2