Заменить 'vocabulary1', 'vocabulary2', 'vocabulary3' на названия своих словарей, а тексты 'v1 text', 'v2 text', 'v2 text' на тексты, специфичные для данных словарей.
если это для определения условий видимости, то там вместо switch должно быть что-то типа if($voc_name->name=='Мой любимый терм 1') { return true;} else { return false;}
Это расшифровывается так:
если $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
$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 закинуть куда-то, нужная штукенция...
А уже исходя из nid определяется принадлежность к словарю.
Кстати в вашем варианте кода присутствует ошибка: если пройти по адресу /user/{id юзера}, то {id юзера} будет восприниматься как идентификатор ноды
Я не вижу там ошибки. Так как если "пройти по адресу /user/{id юзера}", то условие <?php if(arg(0)=='node'&&is_numeric(arg(1))) ?> не выполнится, и, соответственно, до "воспринятия идентификатора ноды" дело не дойдет. Ведь так?
есть словарь "Новости", а в нём термины.
Метод этот позволяет определить словарь к которому относится, а вот как доделать чтоб посмотреть к какому термину?
Чувствую что просто, только полный ламер я в пхп
есть словарь "Новости", а в нём термины......как доделать чтоб посмотреть к какому термину?
Если у словаря номер пять, то следующий код:
$terms = taxonomy_node_get_terms_by_vocabulary(arg(1), 5));
поместит в переменную $terms все термины из словаря "Новости", к которым привязана данная нода.
или нужно что-то другое?
надо вывести блок если нода принадлежит конкретному словарю.
сверху я писал такой запрос для принадлежности термину, как его переделать на проверку словаря - вот вопрос
Комментарии
taxonomy_node_get_terms($nid, 'vid');
возвращает массив результатов
рекомендую: http://drupal.kollm.org/
там лежит всегда последняя версия полного описания Drupal API для просмотра в Offline
"taxonomy_node_get_terms($nid, ‘vid’);
возвращает массив результатов"
э... а как этим пользоваться?
что конкретно прописать если мне надо выводить если словарь называется "статьи"?
up!
Создать блок, выбрать формат 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;}
эх... не стало мне понятнее...
как там вообще условия писать - никак не пойму, сейчас экспериментирую...
{
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 - выводит текст. Вместо нее можете вставить нужные вам комманды или изменить выводимый текст н нужный в зависимости от условий.
можно делать так:
{
echo "Эта нода принадлежит моему любимому словарю";
}
else
{
echo "Эта нода НЕ принадлежит моему любимому словарю";
}
ага... уже стало понятней ))
т.е. надо прописать в условии видимости блока PHP
$voc_name->name == 'myfavorvoc' правильно?
up?
вроде сам разобрался...
<?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))) ?> не выполнится, и, соответственно, до "воспринятия идентификатора ноды" дело не дойдет. Ведь так?
ошибка тут:
$nid=arg(1);
...
?>
Я понимаю что тут! Но эта строка в каком то предыдущем постинге была в теле if, тогда ошибки нет!
Ладно, проехали.
Вместо:
<?php
if ($voc_name->name == 'Новости'){
return TRUE;
} else return FALSE;
?>
Просто:
<?php
return ($voc_name->name == 'Новости');
?>
возник еще вопрос...
есть словарь "Новости", а в нём термины.
Метод этот позволяет определить словарь к которому относится, а вот как доделать чтоб посмотреть к какому термину?
Чувствую что просто, только полный ламер я в пхп
up
// последняя цифра - номер словаря
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
Что то я ничего тут не понял :(