2012-04-14 2 views
0

ユーザーを完全なノードに誘導してJavaScriptが利用できない場合、Drupalの私のボタンが正常に機能しなくなるようにしたいと思います。JavaScriptが利用できないときに、drupalでjquery gracefulllyを悪化させます。アイデア?

私はこのjqueryのjavascriptコードを私のDrupal node-type-tpl.phpの頭に入れました。

ここには、node-type-tpl.phpのテーブルの行内にあるボタンがあります。

<button>More</button> 

これは、私のボタンをクリックするまで、CSSによって隠されている表の次の行です。

<tr class="more"><td>some php content</td></tr> 

現在、ユーザは、ビュー内でトリミングされたノードを見る。このノードを開くと、ボタンをクリックするとより多くのコンテンツが表示されます。私は、javascriptがオフになっている場合、ユーザーが完全なノードに誘導されるようにしたいと思います。

どうすればいいですか?

答えて

0

最も簡単な方法は、<button>タグの代わりに<a>タグを使用してから、e.preventDefault()を呼び出すことです。場合

Drupal.behaviors.morelink = function(context) { 
    $("a.morelink").click(function (e) { 
    e.preventDefault(); 
    $('.morelink').hide(); 
    $('.morelink').eq($('a.morelink').index($(this))).show(); 
    }); 
} 

<php print l('More', 'node/' . $node->nid, array('attributes' => array('class' => array('morelink'))); ?> 

、クラス形式はDrupalの6で異なることに注意して7、 http://api.drupal.org/api/drupal/includes%21common.inc/function/l/7

を参照してくださいそして、このようなジャバスクリプト:あなたはこのようなリンクを作成することができます実際のボタンコントロールにしたい場合は、<button>要素だけでJavascriptなしでブラウザをリダイレクトできないため、実際のフォームを使用する必要があります。このように見えます

<form action="<?php print url('node/' . $node->nid); ?>"> 
    <input type="submit" class="more" value="More" /> 
</form> 

ここでもe.preventDefault()が必要です。私は本当にこれに賛成するわけではありませんが、リンク方法は優雅な劣化のより一般的な方法です。

最後に、ノードテンプレートに直接入力するのではなく、drupal_add_js()を使用してJavascriptを組み込むので、自動キャッシングと圧縮を利用できます。

+0

うわー!それはうまくいった。コードにいくつか変更を加えてください。 $ {'more'}。hide(); $ {'more.link} {0} {{{{{{{{{}}} {Drupal.behaviors.morelink = function(context){ $( "a.morelink" $( '。more')。eq($( 'a.morelink')。index($(this))).show(); }); } 'と' More ' – Meggy

関連する問題