Как получить nodeid?


Как получить nodeid в Drupal для текущей страницы без использования информации из URL страницы? Т.е.:

if(arg(0)=='node' && is_numeric(arg(1))){
  $nid = arg(1);
}

Я не хочу использовать описанный выше подход.

 7
Author: Bala, 2011-01-31

6 answers

По-прежнему передается через URL-адрес косвенно, но это самый простой способ получить его: menu_get_object.

<?
if ($node = menu_get_object()) {
 $nid = $node->nid;
}
?>

Обратите внимание, что если узел есть, он все равно уже был загружен системой меню, и он загружается из статического кэша.

 16
Author: Berdir, 2011-01-31 19:26:43

Если нет какой-либо технической причины, по которой метод arg() недоступен (или вам НУЖНО проверить доступ, как в других сообщениях), метод arg() является самым простым и быстрым.

Если вам понадобятся дополнительные свойства, вы можете запустить node_load(), чтобы получить идентификатор. Предполагая, что вы пытаетесь получить текущий узел, это практически не влияет на производительность.

 1
Author: xtfer, 2011-02-01 23:25:33

Вы можете получить идентификатор узла, позвонив $node->nid. Действительно, получение идентификатора по URL-адресу - не лучшее решение, потому что в один прекрасный день вы можете переключиться на более удобные для SEO URL-адреса.

Из этой документации похоже, что $node определено в page.tpl.php, поэтому оно должно быть доступно вам.

<?php
  // In a template file...

  if ($node) {
    echo $node->nid;
  }
  else {
    // you are viewing taxonomy, view, etc
  }
?>
 0
Author: zourtney, 2011-01-31 20:14:35

Самый простой способ сделать это в Drupal 8:

$path_args = explode('/', current_path());
print $path_args[1];
 0
Author: Pouya Sanooei, 2014-07-07 13:10:18

Другим довольно прямым и надежным подходом в D7 был бы

<?php
if (isset($node->nid) && count($node->nid) > 0){
  $nodeid = $node->nid;
}
?>

Предложение Зуртни в моем случае вызывает ошибку неопределенного индекса.

 0
Author: cptstarling, 2017-04-13 12:46:55

Да, это смущало меня целую вечность, но использование массива arg должно работать практически при любых обстоятельствах, и Drupal позаботится о преобразовании фактического URL-адреса, созданного путем или pathauto.

 0
Author: James Shields, 2015-12-20 04:08:27