Получение идентификатора узла страницы, выполняющей запрос $ .post - PullRequest
1 голос
/ 10 декабря 2010

Так что в моем модуле я делаю $ .post для обратного вызова меню drupal.Есть ли какой-нибудь способ узнать, с какого узла пользователь делает $ .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");

Ответы [ 2 ]

0 голосов
/ 11 декабря 2010

Вы не можете получить 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');
  }
}
0 голосов
/ 11 декабря 2010

если вы выполняете публикацию со страницы самого узла, вы можете использовать

$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, даже если у узла есть псевдоним.

EDIT

Используйте preprocess_node () и добавьте вызов drupal_add_js ():

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

Тогда в вашем JS вы можете получить доступ к этому значению следующим образом:

Drupal.settings.my_module.nid

Эрик

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...