Как получить tid ноды?

Главные вкладки

Аватар пользователя egor_bright egor_bright 10 декабря 2009 в 10:44

Подскажите, пожалуйста, как получить tid, к которому принадлежит текущая нода.

По примеру $node->nid - как-то также можно или нет?

Комментарии

Аватар пользователя egor_bright egor_bright 10 декабря 2009 в 11:25

Спасибо за статью в блоге, действительно может оказаться очень полезной.

Я наверное не объяснил основную проблему.

Каждая нода состоит в 2-ух словарях.

мне нужно вывести в ноде её termID в словаре vocalbuaryID=1

Аватар пользователя graker graker 10 декабря 2009 в 11:31

Ну так можно например в лоб:

<?php
foreach ($node->taxonomy as $tid => $term) {
  if (
$term['vid'] == 1) {
    print 
$tid;
  }
}
?>

Если терминов не много, то вполне нормально. Нет?

Аватар пользователя egor_bright egor_bright 10 декабря 2009 в 13:07

в ноду вставляю сл. код

print_r(taxonomy_node_get_terms_by_vocabulary($nid, $vid, $key = 'tid'));

получаю вывод пустого массива

вставляю вот этот:

print_r(taxonomy_node_get_terms_by_vocabulary($nid, 1, $key = 'tid'));

получаю вывод пустого массива

Аватар пользователя graker graker 10 декабря 2009 в 13:48

egor_bright wrote:

print_r(taxonomy_node_get_terms_by_vocabulary($nid, 1, $key = 'tid'));

Попробуйте так:
print_r(taxonomy_node_get_terms_by_vocabulary($node->nid, 1, 'tid'));

Если снова что-то не так, сделайте
print_r($node->taxonomy); и посмотрите, что там.

Аватар пользователя egor_bright egor_bright 11 декабря 2009 в 11:42

А при использовании кода, который Вы привели в своем комментарие, получаю ошибку:

warning: Invalid argument supplied for foreach() in Y:\home\www\******.ru\includes\common.inc(1486) : eval()'d code on line 3.

Аватар пользователя egor_bright egor_bright 11 декабря 2009 в 10:53

Круто! Тепрь я вижу вот это:

Array ( [3] => stdClass Object ( [tid] => 3 [vid] => 1 [name] => Выполнен [description] => [weight] => 10 ) )

Можно еще вопрос?

как теперь вывести только [3]

Аватар пользователя graker graker 11 декабря 2009 в 11:10

Чтобы вывести все термины, возвращенные функцией, вместо print_r(...) надо:

<?php
$terms 
taxonomy_node_get_terms_by_vocabulary($nid1'tid');
foreach (
$terms as $tid => $term) {
  print 
$tid;
}
?>

Только учтите, что arg(1) - это не совсем безопасная конструкция и хотя в taxonomy_node_get_terms_by_vocabulary уже используется плейсхолдер в запросе к БД, лучше предварительно валидировать возврат arg(). Например через ctype_digit.

Аватар пользователя egor_bright egor_bright 11 декабря 2009 в 11:18

Ошибка пропала, спасибо за ответы Smile огромнейшеЕ спасибо вообще Smile
Думаю, эта ветка будет полезной еще для кого-нибудь Smile