Как отобразить блок только на перечисленных страницах с помощью подстановочных знаков и исключая подстраницы?

У меня есть блок, который я показываю, используя параметр блока «Только перечисленные страницы». Я использую звездочку дикой карты, чтобы показать блок на всех страницах, следующих за about-us/. Например: about-us/*

Проблема в том, что я ТОЛЬКО хочу страницы сразу после about-us/, чтобы показать. Например, about-us/faq будет показывать блок, но about-us/faq/content НЕ должен показывать блок.

Я попробовал about-us/*/, но это не повлияло.

Любые предложения?

4 голоса | спросил Sam 15 PM00000070000004931 2015, 19:18:49

4 ответа


6

Метод 1. Фильтр PHP

Я думаю, что ваш вопрос частично ответил здесь:

Как добавить ограничения страниц для блоков в drupal?

Только вы можете использовать этот код:

<?php
$arg = explode('/', drupal_get_path_alias());
if ($arg[0] == 'about-us' && $arg[1] && $arg[2] == NULL) {
  return TRUE;
}
else {
  return FALSE;
}
?>

Метод 2: Контекстный модуль

В качестве альтернативы вы можете попробовать Context модуль, который предлагает более надежные параметры видимости. Например, помимо включения путей вы можете префикс пути с тильдой «~» до exclude .

Я думаю, что это должно сделать это:

about-us/*
~about-us/*/*

Изменить: добавлен второй метод.

Изменить: использование $ _GET ['q'] в методе 1 вместо arg () (Thx, @leymannx!)

ответил othermachines 15 PM00000080000005731 2015, 20:09:57
1

Использование модуля фильтрации PHP В настройках блока> Страницы: проверка

  

Страницы, на которых этот PHP-код возвращает TRUE (только для экспертов)

Вставьте это:

<?php
return preg_match('/^about-us(\/[a-z]*)?(\/)?$/',
drupal_get_path_alias($_GET['q']));
?>
ответил ar7max 15 PM00000090000000131 2015, 21:33:01
1

Задайте настройки отображения блока, чтобы отобразить на экране about-us /*, затем добавьте следующий модуль к вашему модулю.

<?php
/**
 * Implements hook_block_list_alter().
 */
function my_module_block_list_alter(&$blocks) {
  $alias = explode('/', drupal_get_path_alias());
  if ($alias[0] == 'about-us' && isset($alias[1]) && isset($alias[2])) {
    // unset the bid (block id)
    unset($blocks[55]);
  }
}
?>

Изменить: fixed condition - arg () не возвращает псевдоним.

ответил superdrupal 15 PM00000080000005331 2015, 20:55:53

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132