Прогуглил по drupal.ru и drupal.org, посмотрел в код модуля block
, но так и не смог найти ответа на следующий вопрос:
Можно ли управлять видимостью блока с помощью регулярных выражений без использования PHP-кода?
Т.е. можно ли зайти в
и указать не просто blog/*
, а регулярное выражение?!
Например, я хочу, чтобы блок отображался на страницах
/blog/tolstoy/8
/blog/chekhov/15
/blog/chekhov/16
но не хочу, чтобы отображался на
/blog/chekhov/contents
Было бы здорово написать что-то типа
, но у меня это упорное не получается.
Update (2009-05-21, 22:53) Вероятно, регулярные выражения использовать все-таки нельзя: за видимость блока отвечает функция block_list()
(файл modules/block/block.module
), она вызывает функцию drupal_match_path()
(файл includes/path.inc
), чтобы проверить подходит ли путь под указанный шаблон. Так вот, drupal_match_path()
«переваривает» только «*» и «<front>», а все спецсимволы «закавычивает» с помощью preg_quote()
. Что ж, будем ждать, когда поддержка регулярных выражений для видимости блоков будет встроена в ядро.
Update (2009-05-21, 23:42) Сделал вот так (жалкий грязный трюк!):
<?php
$subject = drupal_get_path_alias($_GET['q']);
$pattern = '/^blog\/tolstoy|chekhov\/\d+$/';
return preg_match($pattern, $subject);
?>
Комментарии
Хочешь писать:
/blog/tolstoy/8
/blog/chekhov/15
/blog/chekhov/16
Так пиши.
Только немного по другому:
blog/tolstoy/8
blog/chekhov/15
blog/chekhov/16
Да, можно было бы сделать это так, как Вы говорите.
Но у меня довольно много таких страниц (кроме того, периодически появляются новые), и все перечислять вручную неразумно.
Потому меня интересует именно возможность использования регулярных выражений.
Ну, Вы спрашивали насчет того, почему не отображаются такие, я показал почему.
Сделайте так,
blog/tolstoy/*
Тоже самое с остальными авторами.
По другому, только через php.
Спасибо.
Но я не перестаю надеяться, что сюда заглянет какой-нибудь drupal-гуру и покажет, как все же можно использовать регулярные выражения
сюрприз, из первого попавшегося. поищите там ещё что-то было по вашей теме
Спасибо.
Ох... Версия только для 5.x, и создается дополнительная таблица.
Все-таки придется использовать PHP для управления видимостью блоков.
там же есть "Показать, если данный PHP-код возвращает TRUE" в видимости блока, вот тут немного и копнуть