Як відобразити блоки для відображення на певній сторінці в Drupal?


10

Розглянемо модульні пустелі:

  • сторінка1: - deserts/*
  • сторінка2: - deserts/*/*
  • сторінка3: - deserts/*/*/*

Динамічний контент ...

У мене є три блоки, а саме a, b і c:

  • Блок a повинен відображатися лише на сторінці1
  • Блок b повинен відображатися лише на сторінці2
  • Блок a повинен відображатися лише на сторінці3

Як слід робити це обмеження?


Drupal 6 або 7? 6 полегшує визначення PHP-коду для видимості блоку.
Молот

Це drupal7 molot
Ajmal

2
@Ajmal Було б корисно, якби ви могли прокоментувати відповіді та пояснити, чому вони не допомогли. Люди, природно, припускають, що відповідь з високим голосом є правильною, і не продовжуватимуть надавати альтернативу, якщо ви не пояснили, чому ця відповідь не працює для вас.
Клайв

У мене сторінка desert/*/*/ desert/*/editмій блок має відображатися для всіх desert/*/*не для. desert/*/edit У такому випадку вона не працює для мене ..
Ajmal

1
Можливо, це лише я, але це здається заплутаним. *означає підстановку. Тому просимо рішення , де з'являється блок для desert/*/*припускає , що він повинен показати на desert/*/editабо, по цьому питанню, desert/*/whatever.
cdmo

Відповіді:


18

Використовуйте контекстний модуль. Хоча я, як правило, не шанувальник цього модуля, це один із випадків, коли він стане у нагоді.

Додайте умову для шляху. Отже, якщо я хочу блок на сторінці 1, але не на сторінці 2 або 3, я б записував такі шляхи, по одному для кожного блоку:

Випадок 1 - Блок А

пустелі / *
~ пустелі / * / *
~ пустелі / * / * / *

Випадок 2 - Блок Б

~ пустелі / *
пустелі / * / *
~ пустелі / * / * / *

Справа 3- Блок С

~ пустелі / *
~ пустелі / * / *
пустелі / * / * / *

~ Означає виключити в цьому випадку. Після цього додайте блок до регіону, який ви хочете, щоб він відображався. Ви також можете додавати назад в конкретні шляхи, які в іншому випадку можуть бути виключені, і навпаки.


Це добре для цієї справи. Але ми хочемо виправити це для всіх можливих сценаріїв, тобто оригінальне рішення, є випадок, коли це не відповідає успіху. я пояснив цей випадок вище. тому, будь ласка, зверніться до цього
Ajmal

Я оновив свою відповідь, тому, сподіваюся, це пояснить це краще. Ви складете одне правило для кожного блоку.
kyletaylored

4

Ви можете використовувати параметр видимості "Сторінки, на яких цей PHP-код повертає ІСТИНА (лише експерт)". Але введення PHP-коду в базу даних, IMHO, є поганою практикою. Натомість розгляньте можливість використання чогось типу модуля видимості розширеного блоку або реалізації такого hook_block_list_alter()типу

function MODULE_block_list_alter(&$blocks) {
  global $theme_key;
  foreach ($blocks as $key => $block) {
    if (!isset($block->theme) || !isset($block->status) || $block->theme != $theme_key || $block->status != 1) {
      // This block was added by a contrib module, leave it in the list.
      continue;
    }
    switch ("{$block->module}_{$block->delta}") {
      case "moduleA_deltaA":
        if (arg(0) != 'deserts' || !arg(1) || arg(2)) {
          unset($blocks[$key]);
        }
        break;
      case "moduleB_deltaB":
        if (arg(0) != 'deserts' || !arg(1) || !arg(2) || arg(3)) {
          unset($blocks[$key]);
        }
        break;
      case "moduleC_deltaC":
        if (arg(0) != 'deserts' || !arg(1) || !arg(2) || !arg(3)) {
          unset($blocks[$key]);
        }
        break;
    }
  }
}

Примітка. Мабуть, розумніший спосіб застосувати правило видимості.


0

Ви повинні мати можливість працювати з цим модулем видимості блоку Правила . Ось цитата зі сторінки проекту:

Модуль видимості блоку Правил дозволяє використовувати компоненти Правил для управління видимістю блоку. Це забезпечує адміністраторам та розробникам Drupal надзвичайну гнучкість у контролі, коли блоки повинні відображатися на їх веб-сайтах, на додаток до параметрів видимості за замовчуванням, які надає Drupal.

Загальна ідея полягає в тому, що якщо ви можете це зробити за допомогою правил, ви можете використовувати її для управління видимістю блоку, тому можливості є безмежними:

  • Потрібно показати блок лише для користувачів, зареєстрованих більше місяця тому?

  • Можливо, у вас є блок, який потрібно показувати лише між 8:00 та 17:00 у будні дні?

  • Що з відображенням або приховуванням блоку на основі поточних погодних умов?

Все це можна зробити, використовуючи Правила блоку видимості.

Зважаючи на це, і відповідно до " якщо ви можете це зробити за допомогою Правил, ви можете використовувати це для управління видимістю блоку " вище, ви звели своє запитання до того, щоб Правила перехоплювали різні URL-адреси, що відповідають вашій сторінці1, page2 та page3.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.