Доброго времени суток
Ребята, нужна помощь с выводом родителя термина таксономии.
Есть словарь "Книги"
есть термин "Веб технологии"
и есть его дочерний термин "Друпал"
путем написания куска php кода, пытаюсь вывести РОДИТЕЛЯ термина "Друпал"
верчусь около кода:
id словаря задается руками.
<?php
$terms
= taxonomy_node_get_terms($node);
$parents = taxonomy_get_parents_all($terms->tid);
foreach ($parents as $parent){
if($parent->vid ==8){
print $parents->name;
}
}
?>
php совсем не знаю, сталкиваюсь впервый раз..
помогите, пожалуйста досообразить код
Комментарии
А в чем, собственно, сложности?
<?php
$vid = 8;
$terms = taxonomy_node_get_terms_by_vocabulary($node, $vid);
$parents = taxonomy_get_parents(key($terms));//родители первого встреченного термина из словаря 8
$parent = array_shift($parents);
print $parent->name;
?>
Огромное спасибо, как раз то чего я и хотел добиться!
--
Осталась еще одна задача, в которой я застрял,прошу еще помощи..
с помошью кода:
<?php
$terms = taxonomy_node_get_terms($node);
foreach($terms as $term){
if($term->vid==8){
$node_field[0]['value'] = $term->name; // использую модуль для CCK (computed field), чтобы все
//выводить чрз $content и легко менять позиции
//полей в админке
}
} ?>
вывожу термины словаря "8" присвоенные ноде..
выводить необходимо только один, самый последний(глубокий) в иерархии термин,
но проблема в том что на сайте используется hierarhical_select модуль, с помошью которого ноды закидываются не только в самый посл. термин а и в его родителя, что собственно нужно и откл. нельзя..
пытаюсь обойти как то этот момент, но пока не получилось:
пытался дописать в if'e
<?php
( ... && $term->parent !== 0) // выводить только термин у которого есть родитель
?>
но, увы, что то не вышло, толи знаний пхп нехватает, толи еще что..
прошу помочь достичь нужного эффекта, еще раз спасибо
функция taxonomy_node_get_terms($node) вроде только выводит термины,ассоциированные с типом материала ноды?
Чет опять не понятна задача...
Вам "крайние" термины словаря нужны? т.е. не "имеющие детей"?
А Вы выведите сначала объекты терминов на экран, чтобы посмотреть все свойства терминов и какое условие добавить с помощью print_r():
<?php
$terms = taxonomy_node_get_terms($node);
print_r($terms);
?>
интересно! сейчас попытаюсь..
Именно, а задача в том чтобы вывести в полном материале только один, нужный термин!
Словарь
- термин 1
-- термин 1.1
- термин 2
-- термин 2.1
...
вывести один термин 2.1, который присвоен ноде (taxonomy_node_get_terms($node))
с тем условием что ноде присвоен и термин 2, т.е. его , по сути, нужно отбросить из вывода
Вывел, а там и близко ничего нету о родителях
лишь - stdClass Object ( [tid] => 48 [vid] => 8 [name] => Кировский [description] => [weight] => 0 )
а как еще можно "отфильтровать"?
Блин сами запутались...и меня запутали...
Обыскался функции, которая термины ноды выводит...
А нет такой функции, потому что она не нужна...
посмотрите при помощи r_print переменную $node...
Обратите внимание на поле объекта 'taxonomy'....
посмотрел
Array ( [9] => stdClass Object ( [tid] => 9 [vid] => 4 [name] => Земельные участки [description] => [weight] => 7 ) [89] => stdClass Object ( [tid] => 89 [vid] => 6 [name] => сдать [description] => Снимем для наших клиентов: [weight] => 0 ) [69] => stdClass Object ( [tid] => 69 [vid] => 8 [name] => Оконешниковский [description] => [weight] => 0 ) [43] => stdClass Object ( [tid] => 43 [vid] => 8 [name] => Омская область [description] => [weight] => 0 ) )
нужно выводить только термины(район), т.е. по данной ноде из словаря 8 нужно чтобы был только "Оконешниковский", а область не выводилась, не вижу уникально отличия по которому можно было бы отбросить!
уникальное отличие в данном случае - родитель
находите для каждого термина из 8-го словаря родителя, если он присутствует в массиве $node->taxonomy
то удаляем его.
В итоге остануться только термины, у которых нет "детей".
да...
можно еще проще..:
if($value['vid']==8){
$children=taxonomy_get_children($value['tid']);
if(!count($chidren)){
print l($value['name'],"taxonomy/$value['vid']/$value['tid']");
}
}
}
как то так...
ааа taxonomy_get_children()
идею понял, здорово!
только не могу разобраться с пхп, ругается:
«Fatal error: Cannot use object of type stdClass as array in D:\wamp\www\sbr.localhost\sites\all\themes\sbr\node-robject.tpl.php on line 67
»
<?php
foreach($node->taxonomy as $key=>$value){
if($value['vid']==8){ // <-- line #67
$children=taxonomy_get_children($value['tid']);
if(!count($chidren)){
print $value['name'];
}
}
}
?>
АААА!!! Все правильно...извиняюсь..
Он говорит, типа не могу использовать объект как массив..
$value - это же не массив, а объект...
if($value['vid']==8){
$children=taxonomy_get_children($value->tid);
if(!count($chidren)){
print l($value->name,"taxonomy/$value->vid/$value->tid");
}
}
}
Вообщем вывожу вот так:
<?php
foreach($node->taxonomy as $key=>$value){
if($value->vid==8){
$children=taxonomy_get_children($value->tid);
if(!$children){
print $value->name;}
// if(count($chidren)){
// print l($value->name,"taxonomy/$value->vid/$value->tid");
//}
}
}
?>
не знаю правильно ли, но вроде показывает что надо
спасибо!