Разное содержимое одного блока для разных терминов

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

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 19 октября 2009 в 13:55

Так и не решил, для какого раздела форума это небольшое решение подошло бы больше, поэтому решил опубликовать его просто в своём блоге. Надеюсь, что поиск по терминам поможет нуждающимся найти его. Сразу оговорюсь, что это не моя «оригинальная разработка» — самое важное взято с сетегнома. Скорее всего, описанная «проблема» может поставить в тупик только новичков и ламеров вроде меня, поэтому опытные пользователи могут не тратить своего времени на чтение сего фрагмента.

Итак, решение задачи для тех, кто захотел:
а) показывать определённый блок только на страницах, отмеченных некоторыми терминами;
б) сделать содержимое этого блока уникальным для каждого из этих терминов.

Пункт а) решается с помощью сниппета, взятого с сетегнома. Предположим, что мы хотим показывать наш блок терминам с идентификаторами 1, 2 и 6. В таком случае мы должны для нашего блока в «Настройках видимости страницы» выбрать «Показать, если данный PHP-код возвращает TRUE (PHP-режим, только для экспертов)», а затем в поле ниже вставить следующий кусок кода:

<?php
$desired_terms 
= array(126);
if ( 
arg(0) == 'node' and is_numeric(arg(1)) ) {
    
$node node_load(arg(1));
   foreach (
$node->taxonomy as $term) {
        if (
in_array($term->tid$desired_terms)) {
            return 
TRUE;
        }
    }
}
return 
FALSE;
?>

Теперь, если вы посмотрите любую из страниц, отмеченных тегами с идентификаторами 1, 2 или 6, то ваш блок там будет отображаться (разумеется, если вы не забыли указать, в каком регионе он должен появиться).

Решение для пункта б) мне пришлось придумывать самому, но, слава богу, я быстро сообразил, что я могу привлечь на помощь тот же код, что я нашёл для пункта а). Итак, наш блок отображается на страницах, отмеченных определёнными тегами, но мы хотим, чтобы содержимое блока на страницах с тегом tid=1 отличалось от того, что мы видим на страницах с тегом tid=2, и, тем более, с тегом tid=6.

Для того, чтобы сделать это, мы должны убедиться, что php у нас включён в качестве формата ввода (jnrhsdftv yoursite.com/admin/build/modules/ и там ищем «PHP filter»). Не забудьте убедиться и в том, что этот формат ввода доступен только администратору, пользователю с идентификатором 1, под которым вы, разумеется, занимаетесь только настройкой системы!

Теперь выберите в качестве формата ввода в искомом блоке «PHP code», а дальше всё просто. Вставляем в тело блока следующий код:

<?php $node node_load(arg(1));
      foreach (
$node->taxonomy as $term) { 
?> 
<?php if ($term->tid == '1') { ?>
Мама мыла раму.
<?php }; ?>
<?php 
if ($term->tid == '2') { ?>
Мама мыла папу.
<?php }; ?>
<?php 
if ($term->tid == '6') { ?>
Рама мыла Кришну.
<?php }; ?>
<?php 
}; ?>

Не думаю, что вышеприведённый текст требует каких-либо комментариев — всё предельно ясно. Обращаю ваше внимание на то, что, если документ отмечен сразу несколькими тегами из числа интересующих вас, то текст блока будет объединять в себе сразу соответствующие разделы. Например, в документе, для которого вы выставили теги с tid 1 и 6, в нашем блоке появится текст «Мама мыла раму. Рама мыла Кришну». Если вас не устраивает такой вариант, вам достаточно всего-навсего «поиграть» с условиями вывода конкретных фрагментов текста, чтобы добиться нужного результата.

Автор выражает отдельную благодарность создателям ресурса Setegnom, так как решения и сниппеты, опубликованные там, не раз спасали его (то есть меня) в сложных ситуациях.