Drupal Складні умови видимості блоку

Дефолтних умов видимості блоку часто не вистачає. PHP filter рятує, але це не друпалвей. Рішення - hook_block_list_alter().

Приклад виведення блоку тільки для користувачів зареєстрованих менше 5 хвилин тому:

123 - це bid блоку. Подивитися можна в таблиці block або dsm($blocks); .

Якщо блоків буде багато, то можна піти далі і перевірити видимість в callback:

MODULE - ім'я модуля в якому створено блок DELTA - делта блоку

Написане актуально для Drupal 7 Схожі записи

Коментарі

здорово, знатиму

Самий Drupalway – це Context :)

"PHP filter рятує, але це не друпалвей."

А чому це не друпалвей? Що взагалі вважається друпалвей та не друпалвей? Розробкою сайтів на друпал займаюся не так давно і в таких тонкощах ще не дуже знаюся. Але якщо функціонал php фільтрів закладений по дефолту, то чому ж це не друпалвей?

коду в базі не повинно бути

Чому? Що кримінального коду в базі?

1. Важко писати 2. важко налагоджувати 3. Важко шукати 4. важко деплоїти 5. неможливо використовувати систему контролю версій 6. виконується довше 7. проблеми з безпекою 8. проблеми з кешуванням

бл. А якщо, наприклад, я створюю якийсь блок програмно (просто пишу файл php, в якому звертаюся до БД, роблю потрібні вибірки та інше), то як найкраще підключити цей блок на потрібні сторінки? На даний момент я використовую два варіанти: 1. php-фільтр у блоках, де просто інклужу свій файл. 2. у файлах .page.tpl де ставлю php-умову для показу блоку. Перший варіант - не "друпалвей", з описаних вами причин. Другий - "говнокод",тому що заважає php-код та верстку у шаблоні. Напевно, існують куди як оптимальніші варіанти?

Як програмно обмежити видимість блоку написано у пості вище

Це якщо блок - саме блок у структурі друпала. Тобто є у списку блоків. А якщо це просто php-файл?

не розумію питання

ну ось ви пишіть: if (!isset($blocks[$bid]).) де $bid - id блоку.

Тобто цей блок був створений у "структурі - блоках". Так? Має свій id і до нього можна дістатися через масив $blocks.

а я говорю, не про блок, а про просто php-файл, результат роботи якого мені потрібно підключати на моїх сторінках за аналогією з тим, як ми підключаємо блоки - на цій сторінці видно, а на цій немає. Питання в тому, як у друпал краще підключати подібні файли? Можна ж створити блок ("структура - блоки"), увімкнути PHP і написати include myfile.php, після чого вказати на яких сторінках цей блок відображатиметься, використовуючи стандартний інтерфейс блоків. А можна взагалі з блоками не зв'язуватись, а вказати у файлі node.tpl.php if (node ​​- > type == 'news') include myfile.php; Але обидва варіанти, як я розумію, не фонтан. так як же правильніше чинити в таких випадках?

А чи є в друпалі функція програмної реалізації видимості блоку на шляху? Наприклад, як програмно сказати, що блок повинен відображатися лише на сторінках blog/* наприклад

Трохи не те. Мені необхідно щоб блок відображався за наявності сесії $_SESSION['city'] і скажемо на всіх сторінках blog/* Ось як програмно реалізувати перевірку шляху по масці blog/*

Крутий, саме те, що потрібна. Велике спасибі, корисну справу робите!

Доброго дня, а підкажіть будь ласка як прописати, щоб на головний блок не виводився для адміністратора. Можназаборонити для адміністратора, але тоді не виповняться умова виводити тільки на головній, і блок виводиться просто скрізь.

А якщо потрібно вивести view(тип page) за складною умовою?