Как получить nodeid?
Как получить nodeid в Drupal для текущей страницы без использования информации из URL страницы? Т.е.:
if(arg(0)=='node' && is_numeric(arg(1))){
$nid = arg(1);
}
Я не хочу использовать описанный выше подход.
6 answers
По-прежнему передается через URL-адрес косвенно, но это самый простой способ получить его: menu_get_object.
<?
if ($node = menu_get_object()) {
$nid = $node->nid;
}
?>
Обратите внимание, что если узел есть, он все равно уже был загружен системой меню, и он загружается из статического кэша.
Если нет какой-либо технической причины, по которой метод arg() недоступен (или вам НУЖНО проверить доступ, как в других сообщениях), метод arg() является самым простым и быстрым.
Если вам понадобятся дополнительные свойства, вы можете запустить node_load(), чтобы получить идентификатор. Предполагая, что вы пытаетесь получить текущий узел, это практически не влияет на производительность.
Вы можете получить идентификатор узла, позвонив $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
}
?>
Самый простой способ сделать это в Drupal 8:
$path_args = explode('/', current_path());
print $path_args[1];
Другим довольно прямым и надежным подходом в D7 был бы
<?php
if (isset($node->nid) && count($node->nid) > 0){
$nodeid = $node->nid;
}
?>
Предложение Зуртни в моем случае вызывает ошибку неопределенного индекса.