Как программно определить к какому словарю относится нода?

Прислано: lexa74

чт, 26/10/2006 - 13:24

Другие статьи по теме:

вобщем надо выводить разные блоки в зависимости от того к какому словарю относится публикация...
как-то можно в php-условии это прописать?

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано inc в чт, 26/10/2006 - 14:07.

taxonomy_node_get_terms($nid, 'vid');
возвращает массив результатов


Опубликовано inc в чт, 26/10/2006 - 14:09.

рекомендую: http://drupal.kollm.org/
там лежит всегда последняя версия полного описания Drupal API для просмотра в Offline


Опубликовано lexa74 в чт, 26/10/2006 - 14:26.

"taxonomy_node_get_terms($nid, ‘vid’);
возвращает массив результатов"

э... а как этим пользоваться?
что конкретно прописать если мне надо выводить если словарь называется "статьи"?


Опубликовано lexa74 в пт, 27/10/2006 - 03:33.

up!


Опубликовано inc в пт, 27/10/2006 - 05:53.

Создать блок, выбрать формат 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' на тексты, специфичные для данных словарей.


Опубликовано lexa74 в пт, 27/10/2006 - 06:47.

спасибо!
"а тексты ‘v1 text’, ‘v2 text’, ‘v2 text’ на тексты, специфичные для данных словарей"
а это можно расшифровать?


Опубликовано emzi в пт, 27/10/2006 - 08:42.

если это для определения условий видимости, то там вместо switch должно быть что-то типа if($voc_name->name=='Мой любимый терм 1') { return true;} else { return false;}


Опубликовано lexa74 в пт, 27/10/2006 - 10:53.

эх... не стало мне понятнее...
как там вообще условия писать - никак не пойму, сейчас экспериментирую...


Опубликовано coyotle в пт, 27/10/2006 - 12:16.

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 "Эта нода НЕ принадлежит моему любимому словарю";
}


Опубликовано lexa74 в пт, 27/10/2006 - 15:33.

ага... уже стало понятней ))
т.е. надо прописать в условии видимости блока PHP
$voc_name->name == 'myfavorvoc' правильно?


Опубликовано lexa74 в вс, 29/10/2006 - 14:25.

up?


Опубликовано lexa74 в вс, 29/10/2006 - 15:23.

вроде сам разобрался...

<?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 закинуть куда-то, нужная штукенция...


Опубликовано inc в ср, 01/11/2006 - 16:46.

Кстати если нода находится в нескольких словарях, то будет определяться ее принадлежность только к первому из них


Опубликовано lexa74 в чт, 02/11/2006 - 06:30.

хм... а интересно как оно будет реагировать на panels где собрано со многих словарей...


Опубликовано inc в чт, 02/11/2006 - 09:53.

node isn't selected
т.к. выделение nid (node id) происходит из пути в адресной строке (при использовании алиасов тоже будет работать):

if(arg(0)=='node'&&is_numeric(arg(1)))
{

А уже исходя из nid определяется принадлежность к словарю.
Кстати в вашем варианте кода присутствует ошибка: если пройти по адресу /user/{id юзера}, то {id юзера} будет восприниматься как идентификатор ноды


Опубликовано ultraboy@drupal.org в пт, 03/11/2006 - 08:25.

Я не вижу там ошибки. Так как если "пройти по адресу /user/{id юзера}", то условие <?php if(arg(0)=='node'&&is_numeric(arg(1))) ?> не выполнится, и, соответственно, до "воспринятия идентификатора ноды" дело не дойдет. Ведь так?


Опубликовано inc в вс, 05/11/2006 - 06:43.

ошибка тут:

<?php
$nid=arg(1);
...
?> 


Опубликовано ultraboy@drupal.org в вс, 05/11/2006 - 07:02.

Я понимаю что тут! Но эта строка в каком то предыдущем постинге была в теле if, тогда ошибки нет!

Ладно, проехали.


Опубликовано Dan в пн, 06/11/2006 - 19:46.

Вместо:

<?php
if ($voc_name->name == 'Новости'){
  return 
TRUE;
} else return 
FALSE;
?>

Просто:

<?php
return ($voc_name->name == 'Новости');
?>


Опубликовано lexa74 в вт, 14/11/2006 - 19:45.

возник еще вопрос...

есть словарь "Новости", а в нём термины.
Метод этот позволяет определить словарь к которому относится, а вот как доделать чтоб посмотреть к какому термину?
Чувствую что просто, только полный ламер я в пхп :(


Опубликовано lexa74 в пт, 17/11/2006 - 06:43.

up


Опубликовано Dan в пт, 17/11/2006 - 07:32.

// последняя цифра - номер словаря
taxonomy_node_get_terms_by_vocabulary(arg(1), 1));


Опубликовано lexa74 в чт, 23/11/2006 - 17:59.

мдя... тяжело быть ламером...

щас стоит скрипт

<?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;
?>

что тут поменять чтоб использовать его не для термина 'Юрист на связи', а для категории "Статьи"


Опубликовано Dan в чт, 23/11/2006 - 19:53.

Я, наверное, чего-то не понимаю...

есть словарь "Новости", а в нём термины......как доделать чтоб посмотреть к какому термину?
Если у словаря номер пять, то следующий код:
$terms = taxonomy_node_get_terms_by_vocabulary(arg(1), 5));
поместит в переменную $terms все термины из словаря "Новости", к которым привязана данная нода.
или нужно что-то другое?


Опубликовано lexa74 в чт, 23/11/2006 - 19:58.

надо вывести блок если нода принадлежит конкретному словарю.
сверху я писал такой запрос для принадлежности термину, как его переделать на проверку словаря - вот вопрос


Опубликовано Dan в чт, 23/11/2006 - 20:10.

в настройке блока:

<?php
return(count(taxonomy_node_get_terms_by_vocabulary(arg(1), 5)));
?>


Опубликовано Dan в чт, 23/11/2006 - 20:13.

возвращает TRUE, если нода привязана хотябы к одному термину словаря номер пять


Опубликовано lexa74 в пт, 24/11/2006 - 18:34.

работает ))))
правда при выводе словаря не выводит... только на нодах
http://zavedi.ru/taxonomy/term/457
http://zavedi.ru/node/1189


Опубликовано Dan в вс, 20/09/2009 - 14:17.

ну да, только для нодов :)
...как и код в http://drupal.ru/node/2756#comment-14026


Опубликовано Sasha_ne в вс, 20/09/2009 - 14:02.

Что то я ничего тут не понял :(


Новое на сайте