2010-12-10 109 views
1

因此,在我的模塊中,我正在爲一個drupal菜單回調製作一個$ .post。有什麼方法可以找出哪個節點用戶正在從服務器端執行$ .post?謝謝。

示例代碼不起作用:如果您正在執行從節點頁面本身的帖子

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

    $items['checkNID'] = array(
     'title' => 'Check Users', 
     'page callback' => 'NIDCheck', 
     'access arguments' => array('access content'), 
     'type' => MENU_CALLBACK 
    ); 
    return $items; 

} 


function NIDCheck(){ 
    $result = array(); 
    $result['nid'] = arg(1); 

    return drupal_json($result);   
} 

$.post('/checkNID/', function(data) { 
    console.log(data); 
    // this should return the nid 
}, "json"); 
+1

你的問題字面上沒有任何意義。 「用戶正在做$ .post的哪個節點」 - 你錯過了一個動詞或其他東西。如果它是「當用戶執行$ .post時顯示哪個節點」 - 爲什麼不只是將節點ID添加到Drupal.settings中並將它複製到JS中的後期數組中? – chx 2010-12-10 08:26:27

+0

@chx對於混淆抱歉,我編輯了一下這個問題。你能解釋一下如何將節點ID添加到drupal.settings中嗎?謝謝。 – Mark 2010-12-10 20:57:50

回答

0

,您可以使用

$nid = arg(1); 

ARG()將獲取的價值drupal的路徑傳遞IE:

http://example.com/hi/mark/it/is/erik

arg(0) = hi 
arg(1) = mark 
arg(2) = it 
... 

因爲每個節點頁面的url是http://example.com/node/ $ nid,arg(1)將始終返回正確的nid,即使該節點具有別名。

編輯

使用preprocess_node(),並添加調用drupal_add_js():

drupal_add_js(array('my_module' => array('nid' => arg(1)), 'setting'); 

然後在你的JS,你可以訪問諸如所以這個值:

Drupal.settings.my_module.nid 

Erik

+0

感謝埃裏克,但我仍然不知道該怎麼做。我展示了我嘗試過的一些示例代碼不起作用。 – Mark 2010-12-11 04:29:28

0

你不能得到no的nid用戶在你的回調函數中執行$ .post,而不將它傳遞給你的後臺POST請求。當你在你的回調中時,arg()使用的請求路徑是'checkNID'。你不能從那裏提取nid。

您可以使用

$.post('/checkNID/', {nid: a_var_containing_the_current_page_nid}, function(data) { 
    console.log(data); 
}, "json"); 

或者,如果你確實需要檢索的NID的節點上,你可以使用Drupal的wilcard loader argument

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

    $items['checkNID/%node'] = array(
     'title' => 'Check Users', 
     'page callback' => 'NIDCheck', 
     'access arguments' => array('access content'), 
     'type' => MENU_CALLBACK 
    ); 
    return $items; 
} 

function NIDCheck ($node){ 
    $result = array(); 
    $result['nid'] = $node->nid; 
    return drupal_json($result);   
} 

而且在JS

$.post('/checkNID/'+ a_var_containing_the_current_page_nid, function(data) { 
    console.log(data); 
}, "json"); 

大多數主題使用node-$nid a輸出div容器中的節點是它的ID。因此,無需額外的服務器端代碼,您也可以與

var current_nid = $('div[id^=node-]').attr('id').split('-')[1]; 

檢索在JavaScript NID當前頁面也可以存儲在從PHP代碼中的JavaScript變量NID與drupal_add_js當前頁面。您需要在節點視圖(即包含頁面)上進行此操作,而不是在NIDCheck()中。所以像

function module_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) { 
    if($op === 'view') { 
    drupal_add_js(array('module' => array('nid' => $node->nid), 'setting'); 
    } 
}