И все-таки. Есть ли возможность простым php-кодом в видимости конкретного блока вывести его видимость на нодах, если те принадлежат какому-то определенному термину таксономии?
Много гуглил, но есть решения только для Drupal6, или нерабочие, или отсылающие к модулю Context. Но ставить этот громоздкий модуль ради 1-2 блоков не хочется.
Код
<?php
if ( arg(0) == 'taxonomy'
&& is_numeric( arg(2) )
&& taxonomy_term_load( arg(2) )->vid == 5)
// 5 надо заменить на id словаря, для которого должен выводится блок
// словарь != термин
return true;
return false;
?>
выводит блок только на страницах самого термина, а не в нодах, имеющих отношение к этому термину. А хочется - чтобы выводил не только на страницах термина, но и всех нод, имеющих этот термин.
Есть решение?
Комментарии
Есть такая возможность. И еще есть модуль Views, его можно успешно использовать.
<?php
if (arg(0) === 'node' && is_numeric(arg(1))) {
$node = menu_get_object('node');
$items = field_get_items('node', $node, 'field_taxonomy_term');
// 'field_taxonomy_term' заменить на реальное название поля с термином
if (!empty($items)) {
foreach ($items as $delta => $value) {
// предполагается, что поле типа Term reference. Иначе ключ 'tid'
// должен быть заменен в зависимости от типа поля
if ($value['tid'] == 5) {
// 5 надо заменить на id термина, для которого должен выводится блок
// словарь != термин
return TRUE;
}
}
}
}
return FALSE;
?>
sergeybelya, а как через Вьюс это делается? Там разве есть указание, где выводить блок?
вот как я вписала условия для вывода блока на страницах термина и нодах, пренадлежащих к одному словарю для Drupal 6
if (arg(0) === 'node' && is_numeric(arg(1))) {//если нода
$node=node_load(arg(1));//загружаем ноду
if (!empty($node)) {
foreach ($node as $delta => $value) {
if ($node->taxonomy['1'] != '') { // смотрим не пуст ли кусок масива в котором хранятся данные о таксономии (можно и более конкретное условие вписать, но мне достаточно и того, что надо вообще к таксономии имеет отношение)
return TRUE;
}
}
}
}else if (arg(0)==='taxonomy'){ //если странца таксономии
return TRUE;
}
else {return FALSE;}
UPD простите, не заметила что тема относится в drupal7 , но может кому-нибуть пригодится
Здравствуйте, подскажите пожалуйста.
Есть тип материала и два словаря таксаномии которые добавлены в этом типе полями.
Есть блок_1 который выводит все материалы, одного типа, которые относятся к терминам первого словаря таксаномии, его я вывел через "Только на перечисленных страницах" так как названия терминов являются частью адреса страницы.
Есть блок_2 который выводит все материалы, одного типа, которые относятся к терминам второго словаря таксаномии (field_poteme).
Что прописать в "Страницы, на которых данный PHP-код возвращает TRUE (только для опытных пользователей)" для вывода блок_2 на страницах которые относятся к этому термину второго словаря таксаномии?
подскажите пожалуйста, блоки всё показывают как надо только не знаю как вывести только на страницах относящихся к термину словаря.
Уважаемые специалисты так трудно даётся пшп Вы представить себе не сможете!
словарь таксаномии field_poteme с терминами тема1, тема2, ...
блок_1 выводит материалы которые относятся к термину тема1
блок_2 выводит материалы которые относятся к термину тема2 ...
if термин словаря field_poteme этой страница = тема1 then
return TRUE //вывести блок_1
else
не выводить блок
end if
if термин словаря field_poteme этой страница = тема2 then
return TRUE //вывести блок_2
else
не выводить блок
end if
в настройках блока "Страницы, на которых данный PHP-код возвращает TRUE (только для опытных пользователей)" как правильно прописать?
Или как реализовать вывод блока через Views, желательно без пшп?