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

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

Аватар пользователя cristobal-junta cristobal-junta 21 мая 2009 в 20:17

Прогуглил по drupal.ru и drupal.org, посмотрел в код модуля block, но так и не смог найти ответа на следующий вопрос:

Можно ли управлять видимостью блока с помощью регулярных выражений без использования PHP-кода?

Т.е. можно ли зайти в

настройки блока -> Page specific visibility settings -> Show on only the listed page

и указать не просто blog/*, а регулярное выражение?!

Например, я хочу, чтобы блок отображался на страницах

/blog/tolstoy/4
/blog/tolstoy/8
/blog/chekhov/15
/blog/chekhov/16

но не хочу, чтобы отображался на

/blog/tolstoy/contents
/blog/chekhov/contents

Было бы здорово написать что-то типа

<blog\/[a-z]+\/[0-9]+>

, но у меня это упорное не получается.

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

Комментарии

Аватар пользователя AkeLLbl4 AkeLLbl4 21 мая 2009 в 20:50

Хочешь писать:

/blog/tolstoy/4
/blog/tolstoy/8
/blog/chekhov/15
/blog/chekhov/16

Так пиши.
Только немного по другому:

blog/tolstoy/4
blog/tolstoy/8
blog/chekhov/15
blog/chekhov/16
Аватар пользователя cristobal-junta cristobal-junta 21 мая 2009 в 20:51

Да, можно было бы сделать это так, как Вы говорите.
Но у меня довольно много таких страниц (кроме того, периодически появляются новые), и все перечислять вручную неразумно.

Потому меня интересует именно возможность использования регулярных выражений.

Аватар пользователя AkeLLbl4 AkeLLbl4 21 мая 2009 в 20:54

Ну, Вы спрашивали насчет того, почему не отображаются такие, я показал почему.
Сделайте так,
blog/tolstoy/*
Тоже самое с остальными авторами.

Аватар пользователя cristobal-junta cristobal-junta 21 мая 2009 в 21:10

Спасибо.
Но я не перестаю надеяться, что сюда заглянет какой-нибудь drupal-гуру и покажет, как все же можно использовать регулярные выражения Smile

Аватар пользователя cristobal-junta cristobal-junta 21 мая 2009 в 23:05

Спасибо.

Ох... Версия только для 5.x, и создается дополнительная таблица.
Все-таки придется использовать PHP для управления видимостью блоков.