Как программно определить к какому словарю относится нода?
Прислано: lexa74
чт, 26/10/2006 - 13:24
вобщем надо выводить разные блоки в зависимости от того к какому словарю относится публикация...
как-то можно в php-условии это прописать?
- lexa74's blog
- Для комментирования войдите или зарегистрируйтесь
taxonomy_node_get_terms($nid, 'vid');
возвращает массив результатов
- Для комментирования войдите или зарегистрируйтесь
рекомендую: http://drupal.kollm.org/
там лежит всегда последняя версия полного описания Drupal API для просмотра в Offline
- Для комментирования войдите или зарегистрируйтесь
"taxonomy_node_get_terms($nid, ‘vid’);
возвращает массив результатов"
э... а как этим пользоваться?
что конкретно прописать если мне надо выводить если словарь называется "статьи"?
- Для комментирования войдите или зарегистрируйтесь
Создать блок, выбрать формат PHP, вставить в него текст:
<?php if(arg(0)=='node'&&is_numeric(arg(1))) { $nid=arg(1); $res=taxonomy_node_get_terms($nid); $vid=current($res); $vid=$vid->vid; $voc_name=taxonomy_get_vocabulary($vid); switch($voc_name->name?$voc_name->name:'') { case 'vocabulary1': echo 'v1 text'; break; case 'vocabulary2': echo 'v2 text'; break; case 'vocabulary3': echo 'v3 text'; break; default: echo 'no vocabulary??'; } } else { echo 'node isn\'t selected'; } ?>
Заменить 'vocabulary1', 'vocabulary2', 'vocabulary3' на названия своих словарей, а тексты 'v1 text', 'v2 text', 'v2 text' на тексты, специфичные для данных словарей.
- Для комментирования войдите или зарегистрируйтесь
спасибо!
"а тексты ‘v1 text’, ‘v2 text’, ‘v2 text’ на тексты, специфичные для данных словарей"
а это можно расшифровать?
- Для комментирования войдите или зарегистрируйтесь
если это для определения условий видимости, то там вместо switch должно быть что-то типа if($voc_name->name=='Мой любимый терм 1') { return true;} else { return false;}
- Для комментирования войдите или зарегистрируйтесь
эх... не стало мне понятнее...
как там вообще условия писать - никак не пойму, сейчас экспериментирую...
- Для комментирования войдите или зарегистрируйтесь
switch($voc_name->name?$voc_name->name:'') { case 'vocabulary1': echo 'v1 text'; break; case 'vocabulary2': echo 'v2 text'; break; case 'vocabulary3': echo 'v3 text'; break; default: echo 'no vocabulary??'; }
Это расшифровывается так:
если $voc_name->name совпадает с 'vocabulary1' - то выполнить echo 'v1 text';
если $voc_name->name совпадает с 'vocabulary2' - то выполнить echo 'v2 text';
...
если совпадений не было - то выполнить echo 'no vocabulary??';
команда echo - выводит текст. Вместо нее можете вставить нужные вам комманды или изменить выводимый текст н нужный в зависимости от условий.
можно делать так:
if ($voc_name->name == 'myfavorvoc') { echo "Эта нода принадлежит моему любимому словарю"; } else { echo "Эта нода НЕ принадлежит моему любимому словарю"; }
- Для комментирования войдите или зарегистрируйтесь
ага... уже стало понятней ))
т.е. надо прописать в условии видимости блока PHP
$voc_name->name == 'myfavorvoc' правильно?
- Для комментирования войдите или зарегистрируйтесь
вроде сам разобрался...
<?php
$nid=arg(1);
$res=taxonomy_node_get_terms($nid);
$vid=current($res); $vid=$vid->vid;
$voc_name=taxonomy_get_vocabulary($vid);
if ($voc_name->name == 'Новости'){
return TRUE;
} else return FALSE;
?>работает... надо бы в faq закинуть куда-то, нужная штукенция...
- Для комментирования войдите или зарегистрируйтесь
Кстати если нода находится в нескольких словарях, то будет определяться ее принадлежность только к первому из них
- Для комментирования войдите или зарегистрируйтесь
хм... а интересно как оно будет реагировать на panels где собрано со многих словарей...
- Для комментирования войдите или зарегистрируйтесь
node isn't selected
т.к. выделение nid (node id) происходит из пути в адресной строке (при использовании алиасов тоже будет работать):
А уже исходя из nid определяется принадлежность к словарю.
Кстати в вашем варианте кода присутствует ошибка: если пройти по адресу /user/{id юзера}, то {id юзера} будет восприниматься как идентификатор ноды
- Для комментирования войдите или зарегистрируйтесь
Я не вижу там ошибки. Так как если "пройти по адресу /user/{id юзера}", то условие <?php if(arg(0)=='node'&&is_numeric(arg(1))) ?> не выполнится, и, соответственно, до "воспринятия идентификатора ноды" дело не дойдет. Ведь так?
- Для комментирования войдите или зарегистрируйтесь
ошибка тут:
<?php $nid=arg(1); ... ?>
- Для комментирования войдите или зарегистрируйтесь
Я понимаю что тут! Но эта строка в каком то предыдущем постинге была в теле if, тогда ошибки нет!
Ладно, проехали.
- Для комментирования войдите или зарегистрируйтесь
Вместо:
<?php
if ($voc_name->name == 'Новости'){
return TRUE;
} else return FALSE;
?>Просто:
<?php
return ($voc_name->name == 'Новости');
?>- Для комментирования войдите или зарегистрируйтесь
возник еще вопрос...
есть словарь "Новости", а в нём термины.
Метод этот позволяет определить словарь к которому относится, а вот как доделать чтоб посмотреть к какому термину?
Чувствую что просто, только полный ламер я в пхп :(
- Для комментирования войдите или зарегистрируйтесь
// последняя цифра - номер словаря
taxonomy_node_get_terms_by_vocabulary(arg(1), 1));
- Для комментирования войдите или зарегистрируйтесь
мдя... тяжело быть ламером...
щас стоит скрипт
<?php
$nid=arg(1);
$res=taxonomy_node_get_terms($nid);
$vid=current($res); $vid=$vid->vid;
$voc_name=taxonomy_get_vocabulary($vid);
if ($voc_name->name == 'Юрист на связи'){
return TRUE;
} else return FALSE;
?>что тут поменять чтоб использовать его не для термина 'Юрист на связи', а для категории "Статьи"
- Для комментирования войдите или зарегистрируйтесь
Я, наверное, чего-то не понимаю...
есть словарь "Новости", а в нём термины......как доделать чтоб посмотреть к какому термину?
Если у словаря номер пять, то следующий код:
$terms = taxonomy_node_get_terms_by_vocabulary(arg(1), 5));
поместит в переменную $terms все термины из словаря "Новости", к которым привязана данная нода.
или нужно что-то другое?
- Для комментирования войдите или зарегистрируйтесь
надо вывести блок если нода принадлежит конкретному словарю.
сверху я писал такой запрос для принадлежности термину, как его переделать на проверку словаря - вот вопрос
- Для комментирования войдите или зарегистрируйтесь
в настройке блока:
<?php
return(count(taxonomy_node_get_terms_by_vocabulary(arg(1), 5)));
?>- Для комментирования войдите или зарегистрируйтесь
возвращает TRUE, если нода привязана хотябы к одному термину словаря номер пять
- Для комментирования войдите или зарегистрируйтесь
работает ))))
правда при выводе словаря не выводит... только на нодах
http://zavedi.ru/taxonomy/term/457
http://zavedi.ru/node/1189
- Для комментирования войдите или зарегистрируйтесь
ну да, только для нодов :)
...как и код в http://drupal.ru/node/2756#comment-14026
- Для комментирования войдите или зарегистрируйтесь
Что то я ничего тут не понял :(
- Для комментирования войдите или зарегистрируйтесь




Комментарии