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) за складною умовою?