В параметрах видимости блока можно указать либо Показывать только на перечисленных страницах, либо Показывать на всех страницах исключая перечисленные. Т.е. нельзя скомбинировать условия, и например показывать блок в первом уровне каталога catalog/*
, но не показывать в остальных catalog/*/*
.
Выручит опция Если введённый PHP-код возвращает значение TRUE, которая появляется при включении модуля PHP filter. Сам код будет примерно таким:
<?php
$request_path = request_path();
if (drupal_match_path($request_path, 'catalog/*') &&
!drupal_match_path($request_path, 'catalog/*/*')) {
return TRUE;
}
return FALSE;
?>
Так же добиться похожего результата можно используя модуль Block Visibility by RegExp.
Написанное актуально для
Drupal 7
Комментарии
Немного упростить можно:
Еще немного упростим:
if((arg(0) == 'catalog') && (arg(1) != 'search')) return 1;
arg
возвращает системный путь, аdrupal_match_path
работает с фактическимИз условия не ясно на чем и как построен каталог. вот я и предложил - откуда мне знать отличается фактический от системного или нет ;)
Есть рабочий вариант под друпал 6? Срочно нужно.
По этому варианту появляется ошибка:
Спасибо за быстрый ответ, попробовал - блок не отображается ни на какой странице.
Мне надо, чтобы он показывался на
catalog/page/*
и не показывался наcatalog/page
.Использовал такой код:
Показывать только на перечисленных страницах -
catalog/page/*
Попробывал:
Блок появляется на всех страницах.
И забыл уточнить, мне нужно, чтобы блок появлялся на всех страницах кроме
catalog/page
.предыдущий коммент прочитайте, вам не нужен php код
Спасибо большое!
Все, как всегда, оказалось проще, чем я думал :)
Для решения таких штук испольщую Context, там можно не только по пути отображать блоки, но и по другим условиям.
Кстати, если взглянуть на реализацию request_path, то можно ужаснуться количеству кода.
Я бы еще упростил код от Ch:
drupal_get_path_alias() в разы быстрее request_path().
там 60% комментариев
не правда
Проверил. Я был не прав. Признаю :)
Спасибо за подсказку, пригодилось.
А как добавить еще одну страницу для показа блока?
- не работает
(первое услови) || (второе условие)
а как добавить условие по типу ноды?
Как можно реализовать такое условие:
1. Создаю ноду. (Ноды под каждый url).
2. В дополнительное поле "field_url" прописываю, например: "catalog/page/konfety"
3. И нужно в блоке вывести текст из поля "body" только, если
Я так понимаю, сначала нужно
$request_path = request_path();
получить из базы ту ноду, у которой есть в поле "field_url" данный url
url создаётся сложно, через Facet API Pretty Paths.
Хотел блок через views сделать. Или тоже просто кодом вывести текст?
Как правильнее это реализовать?
Добавить комментарий