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

Главные вкладки

Аватар пользователя guruken guruken 16 сентября 2013 в 4:00

И все-таки. Есть ли возможность простым php-кодом в видимости конкретного блока вывести его видимость на нодах, если те принадлежат какому-то определенному термину таксономии?

Много гуглил, но есть решения только для Drupal6, или нерабочие, или отсылающие к модулю Context. Но ставить этот громоздкий модуль ради 1-2 блоков не хочется.

Код

<?php
if ( arg(0) == 'taxonomy' 
 
&& is_numericarg(2) ) 
 && 
taxonomy_term_loadarg(2) )->vid == 5
// 5 надо заменить на id словаря, для которого должен выводится блок
// словарь != термин
 
return true;
return 
false;
?>

выводит блок только на страницах самого термина, а не в нодах, имеющих отношение к этому термину. А хочется - чтобы выводил не только на страницах термина, но и всех нод, имеющих этот термин.

Есть решение?

Комментарии

Аватар пользователя serega111 serega111 16 сентября 2013 в 11:55

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

Аватар пользователя ijfamily ijfamily 25 сентября 2013 в 16:29

вот как я вписала условия для вывода блока на страницах термина и нодах, пренадлежащих к одному словарю для 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 , но может кому-нибуть пригодится

Аватар пользователя vadim_n vadim_n 25 января 2016 в 21:29

Здравствуйте, подскажите пожалуйста.
Есть тип материала и два словаря таксаномии которые добавлены в этом типе полями.
Есть блок_1 который выводит все материалы, одного типа, которые относятся к терминам первого словаря таксаномии, его я вывел через "Только на перечисленных страницах" так как названия терминов являются частью адреса страницы.
Есть блок_2 который выводит все материалы, одного типа, которые относятся к терминам второго словаря таксаномии (field_poteme).
Что прописать в "Страницы, на которых данный PHP-код возвращает TRUE (только для опытных пользователей)" для вывода блок_2 на страницах которые относятся к этому термину второго словаря таксаномии?

Аватар пользователя vadim_n vadim_n 26 января 2016 в 9:54

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

Аватар пользователя vadim_n vadim_n 27 января 2016 в 13:05

Уважаемые специалисты так трудно даётся пшп Вы представить себе не сможете!
словарь таксаномии 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, желательно без пшп?