2012-03-26 13 views
0

Drupal 6を使用していて、layout.cssに2つの等しい列を作成しました
左側の列にはノードのリストが表示されています。 各ノードには、(ビューアタッチとノード参照引数を使用して)子ノードのリストが添付されたビューがあります。drupalビューをajaxで右余白にロード

これらの左側の列ノードのリンクをクリックして、ajaxを使用して右側の列に子ビューを表示したいと考えています。

私はajaxview.phpすなわちという名前の外部のページを経由してviewsattachを呼び出しノードxxx.tpl.phpの頭の中でjqueryの/ JavaScriptを配置しようとしました:

<script type="text/javascript"> 
Drupal.behaviors.ajaxview = function(context) { 
$("#ajaxclick").click(function(){ 
     $("#container").load("http://path/to/ajaxview.php 
     }); 
} 
</script> 

<a id="ajaxclick" href= "#">Click me</a> 
<div id="container"></div> 

そしてajaxview.phpで:

<div id="rightcolumn"><?php print $node->content[Comments_node_content_1]['#value'];?></div> 

私は空白のページが、何を取得...

どのように私は、子ビューが左の列のノードがクリックされるたびに右の列に表示されるように得ることができますか?

良い方法がありますか?

答えて

1

あなたのajaxview.phpファイルは、node-xxx.tpl.phpのあなたのコードと同じコンテキストにはないので、$ node変数にアクセスすることはできません。あなたのajaxview.phpファイルは新しいスクリプトとして実行されます。おそらくあなたが本当にajaxview.phpという名前をつけていれば、おそらくDrupalの外にあります。

メニューフックにパスを作成し、そのパスをajaxでnode-xxx.tpl.phpに呼び出すことを検討してください。

<?php 

function test_menu() { 
    $items = array(); 

    $items['myajax'] = array(
    'title' => 'My Ajax', 
    'page callback' => 'test_myajax', 
    'description' => 'Test', 
    'access arguments' => array('access content'), 
    'type' => MENU_CALLBACK, 
); 

    return $items; 
} 


function test_myajax($nid) { 
    $node = node_load($nid); 
    print '<div id="rightcolumn">'; 
    print $node->content['Comments_node_content_1']['#value']; 
    print '</div>'; 
    exit(); 
} 

このコードは、このようなノードIDと呼ばれるべきです(あなたはあなたにもっと何かmeaningfuylに名前を変更する必要があります)、新しいパス「myajax」を作成します:

999は
http://yoursite/myajax/999 

ノードID

これは、ajaxを呼び出すコードでは、現在表示されているノードのnidを渡す必要があることを意味します。これを行うさまざまな方法があり、あなたの状況にもよります。

ここに、上記のコードで動作するサンプルのJavaScriptがあります(ローカルでテストしました)。

<script type="text/javascript"> 
Drupal.behaviors.ajaxview = function(context) { 
    $("#ajaxclick").click(function(){ 
     $("#container-test").load(Drupal.settings.basePath + "myajax/" + 999); 
    }); 
} 
</script> 

<a id="ajaxclick" href= "#">Click me</a> 
<div id="container-test"></div> 
+0

ありがとうございますRoychri、これは非常に作業に近いです! しかし、何らかの理由で引数が に渡されていません。print $ node-> content ['Comments_node_content_1'] ['#value'];だから私は代わりに、デフォルトのビューを埋め込むことを試みた。 < $ viewName = 'コメント'; $ display_id = 'デフォルト'; $ myArgs = array(999); print views_embed_view($ viewName、$ display_id、$ myArgs);