Здравствуйте ув. разработчики.
Имеется словарь таксономии и в нем произвольное число терминов, которое будет меняться.
Есть ли возможность задать видимость блока для страниц всех терминов словаря, т.е. чтобы какой-либо блок отображался на страницах всех терминов словаря?
Задание адресов страниц терминов для видимости блока не подходит, т.к. количество терминов и их иерархия будет меняться динамически.
Комментарии
Урлы у терминов все разные по политическим соображениям?
Шоб враги не догадались)
Ответ здесь:
href="http://drupal.org/node/1481256"
<?php
// This snippet returns TRUE if the node we are
// currently viewing is tagged with a term which belongs
// to the 'desired_vocab' and we are not in edit mode (arg(2)).
// put here the vocabulary ID you're interested in
$desired_vocab = 9;
if arg(0) == 'node' and is_numeric(arg(1)) {
// Yes, we're viewing a node in view mode.
$node = node_load(arg(1)); // cached
// If the term does not exist we're done
if (is_array($node->taxonomy)) {
foreach ($node->taxonomy as $term) {
if ($term->vid == $desired_vocab) {
return TRUE;
}
}
}
}
return FALSE;
?>
Спасибо за ответы.
урлами однакось реально проще )
Однако, Вы что-то недоговариваете в сабже!
Да не, просто словарь-то будет редактироваться, термины добавляться и меняться, а блок-то должен быть виден на всех страницах терминов словаря.
В данном случае термины словаря используются для систематизации материалов по рубрикам.
Проверил много снипетов, все работают, но сводятся к проверке принадлежности ноды термину таксономии.
Нашел для себя решение в виде модуля
http://drupal.org/project/context
Очень богатый выбор настроек видимости для разных объектов, не только блоков, по множеству критериев, страницы и ноды термина таксономии, тип материала, язык и др.
Фактически управление видимостью всех объектов сайта собрано в одном месте, что может показаться неудобным. Но это дело привычки.
Вот об этом мой пост выше. Гуглопереводчиком бы хотя бы комментарии в коде перевели.
Блоков на странице как минимум три, словарей как минимум пять, в каждом тьма терминов, замахаешься каждому термину для блоков пути или tid'ы прописывать.
Сдается мне, что Вы не заметили возможность подставления символа
*
для замены любых символов в пути.Я понял Вас, просто не знаю, как прописать словарь (vid) в адресе.
модуль pathauto - назначает автоматом алиасы для системных путей по шаблону..
в шаблоне пути первая часть - машинное имя словаря, вторая транслитирированный заголовок термина.
что-то типа slovar1/termin1-name
в настройках блока ставим - показывать только на страницах slovar1/*
как-то так..
Решено с помощью:
Pathauto+Transliteration+Token и все-таки плюс Context
Context нужен был для задания видимости по типу материала и одновременно по адресу, т.к. одновременное задание видимости по адресу (термина таксономии, словаря или любого др.) и по типу ноды на странице редактирования блока не работает.
Теперь блоки отображаются и по адресу словаря slovar/* и по типу ноды,да еще мультиязычно.
РЕШЕНО.
Так в сабже надо было указывать, что еще и в нодах надо блок отображать.
Поставьте "Решено" в заголовке темы.
urikor,спасибо. Открыл для себя модуль Context.
Какую версию модуля используете?
А как задать условие видимости блока на странице ноды, если заполнен определенный словарь?
Если задано условие "Таксономия", то там можно выбрать только термин(ы), а не словарь.
Таким образом при добавлении термина в словарь каждый раз нужно ментяь условие...
Заметьте, Artu , что я использовал связку Pathauto+Transliteration+Token а у термина таксономии указано автосоздание псевдонима адреса.
Тогда у термина, принадлежащего определенному словарю в адресе появляется последовательно
имя-словаря/имя-термина, для всех терминов этого словаря имя словаря в адресе будет одно и то же.
Если не нужно дополнительных специфических условий, то достаточно прописать условие видимости в виде имя-словаря/*
на странице редактирования блока и модуль context не использовать.
В моем случае необходимо было одновременное указание видимости для типа материала, для чего я не нашел решения в виде PHP-сниппетов, а
Context отсюда: http://drupal.org/project/context, версия 3 бета3
Просто добавляете условие видимости по адресу: имя-словаря/*
urikor, про Pathauto+Transliteration+Token и видимость по пути я в курсе, использую изначально.))
Если задать видимость по адресу: имя-словаря/*, то блок будет показан на странице термина этого словаря, а мне нужно на и на ноде так же.
Повторю вопрос:
«А как задать условие видимости блока на странице ноды, если заполнен определенный словарь?»
В том и сложность вопроса. Поскольку решения другого не нашлось, просто создал разные типы материалов, соответствующие разным словарям.
Ох и хорош же модуль Context!
Позволяет вводить классы по множеству критериев.