2011-02-04 16 views
2

編集:私の質問はDrupal 6 & 7に適用されますが、私のコード例はDrupal 6です。Drupal 6&7 unset Javascript from header

私は現在、Drupal 6のウェブサイトのモバイルテーマを作成していて、template.phpファイルのpreprocess_page機能で不要なコアとモジュールのJavaScriptとCSSをすべて削除しようとしています。 CSSファイルは正常に削除されますが、JavaScriptを削除することはできません。ここに私が持っているものがあります。この例では、ajaxスクリプト以外はすべて正常に削除されています。

私が間違っていることを知っていますか?

<?php 
function mytheme_preprocess_page(&$vars) { 
    //////// remove unneccesary drupal head files for mobile version 
    // CSS 
    $css = drupal_add_css(); 
     // core 
    unset($css['all']['module']['modules/user/user.css']); 
    unset($css['all']['module']['modules/node/node.css']); 
    unset($css['all']['module']['modules/system/defaults.css']); 
    unset($css['all']['module']['modules/system/system.css']); 
    unset($css['all']['module']['modules/system/system-menus.css']); 
     // contributed -- automatically generate the path—— just easier this way 
    $rm[] = drupal_get_path('module','filefield').'/filefield.css'; 
    $rm[] = drupal_get_path('module','flickr').'/flickr.css'; 
    $rm[] = drupal_get_path('module','logintoboggan').'/logintoboggan.css'; 
    $rm[] = drupal_get_path('module','logintoboggan').'/logintoboggan.css'; 
    $rm[] = drupal_get_path('module','fieldgroup').'/fieldgroup.css'; 
    $rm[] = drupal_get_path('module','views').'/css/views.css'; 
    $rm[] = drupal_get_path('module','content').'/theme/content-module.css'; 
     // remove the contribs from the array 
    foreach ($rm as $key => $value) { 
     unset($css['all']['module'][$value]); 
    } 
    // JAVASCRIPT 
    $scripts = drupal_add_js(); 

    unset($scripts['module']['sites/all/modules/ajax/ajax.js']); 
    unset($scripts['module']['sites/all/modules/ajax/jquery/jquery.a_form.packed.js']); 

    // recreate the tempalate variables 
    $vars['styles'] = drupal_get_css($css); 
    $vars['scripts'] = drupal_get_js('header', $scripts); 
} 
?> 

ETA:

<script type="text/javascript" src="/sites/all/modules/ajax/jquery/jquery.a_form.packed.js?P"></script> 
<script type="text/javascript" src="/sites/all/modules/ajax/ajax.js?P"></script> 

答えて

1

のAjaxモジュールuses hook_preprocess_pageそのスクリプトを追加するには:ここではスクリプトがヘッダーにプリントアウトの方法があります。 Ajaxモジュールは、モジュールの後にフック実装を実行している可能性があります。その場合、Ajaxの後で起動するためにadjust the weight of your moduleとすることができます。設定を解除する直前に、$スクリプトの内容を(Devel moduleの関数dpm()のようなものを使って)出力することで、最初に確認することができます。

UPDATE:テンプレートの前処理機能の変化を作っているので、それはモジュールの重量の問題であることについての私の最初の仮説が適用されません。私はあなたのテンプレート機能をテストサイトに追加し、私はそれらの2つのスクリプトを削除しました。私はajaxモジュールが/ sites/all/modules/contribの下にあったので、パスを調整しなければなりませんでした。それが私のcontribモジュールを保持する場所ですが、正しいパスを使用していることを再度確認することができます。

私が数分間捨てたもう一つのことは、間違ったテーマにコードを誤って追加したことです。そう、それはチェックする別のものです。また、[パフォーマンス]ページでJavascriptのキャッシュが無効になっていることを確認します。

+0

感謝を必要としないjavascriptの他のモジュールをきれいにすることができますDrupalの7 でdrupalのヘッダーを使用することができます。これは役に立ちます。私はまだ、Develの助けを借りても、フックや物事が出力される方法についてのダミーです。私は実際にはモジュールではなく、template.phpファイルでそれをやっています。特に、2つの使用されたテーマのうちの1つに固有のものなので、そのままにしておきたいと思います。そのように体重を定義することは可能ですか?また、実際のajax_preprocess_page()関数をインターセプトできる方法はありますか? mytheme_ajax_preprocess_page()を使ってみましたが、うまくいきませんでした。私が言ったように、この時点で処理とフックでダミー。 – Kerri

+0

@Kerri申し訳ありませんが、あなたがtempalte_preprocess_pageを使用していて、hook_preprocessページを使用していると思われませんでした。詳細については、上記の更新された回答を参照してください。 –

+0

ああ、ありがとう。少なくともそれは私が何をやっているのか知っていることを意味します! ;)元の投稿にスクリプトのパスを追加しました。チェックしてパスをダブルチェックしても(コピー/ペーストしても)、多分私は何かを見逃しています。私はそれが半分(CSSの半分)働くので、私は正しいテンプレートに関数を置くことを知っている。ああ、はい、すべてのパフォーマンスキャッシュがオフになっています。私はブラウザキャッシュを念入りにリフレッシュしています。 – Kerri

0

あなたはそれを逆にしなければなりません。他のcontribモジュールのファイルを設定解除すると、jsをヘッダに出力する他のすべてのモジュールにモジュールが明示的に結合されます。あなたはそれが壊れる前にあまりにも長い間それを維持することができません。 jsファイルがcontribモジュールによって追加されるとどうなりますか?

出力するパスのマスクを作成し、それら以外のすべての設定を解除することをお勧めします。

Drupal 7には、そのようにするフックがいくつかありますが、私はそれらを覚えていません。もしあなたがD6にいるなら、あなたはちょっと固まっている。

私はCSSファイルを使用してこの同じ問題のためにDrupalの6ため汚い回避策を書きました。ここにモジュール全体があります(3つの関数だけでした)。私はあなたもjsファイルにそれを適応させることができると確信しています。

は(変数テーブルに公開)

function destroy_mask_styles() { 
    return variable_get('destroy_mask_styles', array('all/modules/mymodule', 'themes/mytheme')); 
} 

をあなたのマスクを作成します。そして、ここでdodgey部分です。この関数は、ヘッダー内のcssファイルのパスを検索し、一致しない場合はそれらのパスを解除します。preprocess_pageで次に

function destroy_styles($var_styles) { 
    //this is a bit dodgey. But it's probably the easiest way to implement 
    $masks = destroy_mask_styles(); 
    $styles = array(); 
    foreach(explode("\n", $var_styles) as $style) { 
    foreach($masks as $mask) { 
     if(strpos($style, $mask) > 0) { 
     $styles[] = $style; 
     } 
    } 
    } 
    return implode("\n", $styles); 
} 

(dodgynessが起こるところ、これは考えられるかもしれない)

function destroy_preprocess_page(&$variables) { 
    //destroy some css and scripts we don't want 
    $styles = destroy_styles($variables['styles']); 
    $variables['styles'] = empty($styles) ? $variables['styles'] : $styles; 
} 

あなたが(例えば)一つのモジュールからすべてを含めたい場合は、単にそのパスを変更モジュールのルートフォルダへのパスを含むように一致させます。ファイル名は気にしないでください。

これは理想的な方法ではないことに注意してください。 D6には良い方法があるかもしれませんが、ここにはフックがありません。

幸運を祈る!

2

が見つかりました。この種の問題に対しては、より良い解決策です。私はKerriのアプローチを試してみましたが、Matt Vは彼のために働いたと言いますが、私がそれを避けることができれば私の環境では動作していなかったのですが、template.phpを編集したくありませんでした。私の問題は、いくつかのJSファイルが特定のページにエラーを投げるということでした。私がしたのは、望みのページでしか動かない非常に単純な新しいモジュールを書くことでした。だから私は基本的な.infoファイルを作成し、以下は.moduleコードです。私の魅力のように働いた。単に "mysite_mymodule"をあなたのモジュールの名前に置き換え、 "my-page-alias"をあなたが有効にしようとしているページエイリアスに置き換えてください。

<?php 
/** 
* Implements hook_js_alter(). 
*/ 

function mysite_mymodule_js_alter(&$javascript) { 
    $alias = drupal_get_path_alias($_GET['q']); 
    if ($alias == "my-page-alias") { 
    /** 
    * documentation about what I did and why I did it... 
    */ 
    unset($javascript['sites/all/modules/dhtml_menu/dhtml_menu.js']); 
    unset($javascript['sites/all/modules/apachesolr_autocomplete/apachesolr_autocomplete.js']); 
    } 
} 
+1

これはDrupal 7でのみ有効ですFYI –

2

あなたが直接あなたが

function module_preprocess_page(&$vars) { 
    // clean unnecesary script from the page 
    if (arg(0) != 'admin' || !(arg(1) == 'add' && arg(2) == 'edit') || arg(0) != 'panels' || arg(0) != 'ctools') { 
    $javascript = &drupal_static('drupal_add_js', array()); 
    unset($javascript['misc/jquery.js']); 
    unset($javascript['misc/jquery.once.js']); 
    drupal_static('drupal_add_js', $javascript); 
    } 
} 
+0

これは信じられないほど古い投稿ですが、私はここでしばらくここにいません。私はこの問題がDrupal 6のため、より具体的なオリジナルの質問を編集しました。 – Kerri

+0

こんにちは@Kerri - あなたが提供するコード例はDrupal 6です。しかし、Drupal 6&7の有用な答えが提供されているので、これらの回答は他の場所で見つけるのが非常に困難な場合があります。 –

+0

この質問と回答を見る他の人には、http://drupal.stackexchange.com/questions/39305でDrupal 7に固有の回答があることに注意してください –

関連する問題