2012-03-26 47 views
0

我使用Drupal 6並在layout.css中創建了2個相同的列
在左列中,我有一個包含節點列表的視圖。 每個節點都有一個帶有其子節點列表的附加視圖(使用視圖附加和節點引用參數)。使用ajax將drupal視圖加載到右邊距

我希望能夠點擊每個這些左列節點上的鏈接,並使用ajax調出右欄中的子視圖。

我試過把jQuery的/ JavaScript中的節點xxx.tpl.php呼籲通過一個名爲ajaxview.php即一個外部頁面的viewsattach的頭:

<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外部執行。

您應該考慮在菜單鉤子中創建一個路徑,並在node-xxx.tpl.php中用ajax調用該路徑。

<?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(); 
} 

此代碼將創建一個新的路徑「myajax」(你應該重新命名爲更有meaningfuyl給你),它應該有一個節點ID被稱爲像這樣:

http://yoursite/myajax/999 

,其中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 ='default'; $ myArgs = array(999); print views_embed_view($ viewName,$ display_id,$ myArgs); 這是行得通的,但是如何在