Вы не можете получить nid узла, из которого пользователь использует $ .post в вашем обратном вызове, не передав его в фоновом POST-запросе.Когда вы находитесь в обратном вызове, путь запроса, используемый arg (), является 'checkNID'.Вы не можете извлечь nid оттуда.
Вы можете использовать
$.post('/checkNID/', {nid: a_var_containing_the_current_page_nid}, function(data) {
console.log(data);
}, "json");
Или, если вам действительно нужно получить узел для nid, вы можете использовать wilcard Drupal.Аргумент загрузчика :
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");
Большинство тем выводит узел в контейнер div
, используя node-$nid
в качестве его идентификатора.Таким образом, без дополнительного серверного кода вы также можете получить nid текущей страницы в JavaScript с помощью
var current_nid = $('div[id^=node-]').attr('id').split('-')[1];
Вы также можете сохранить nid текущей страницы в переменной JavaScript из кода PHP с помощью 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');
}
}