Как назвать файлы веток по региону, в котором они находятся? - PullRequest
0 голосов
/ 18 апреля 2019

Я использую Drupal с Commerce Module для создания интернет-магазина.Я использую Commerce Cart Block для отображения значка корзины с количеством товаров в корзине на панели навигации.

Теперь я также хотел бы отобразить блок корзины на странице корзины, но с другим шаблоном, отличным от используемого на панели навигации.

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

<!-- THEME DEBUG -->
<!-- THEME HOOK: 'commerce_cart_block' -->
<!-- BEGIN OUTPUT from 'themes/custom/verdamigo/templates/commerce-cart-block.html.twig' -->

Это показано над обеими корзинамиблоки (которые находятся на той же странице).Итак, как я могу использовать два разных шаблона для обоих блоков.

primary_menu--commerce-cart-block.html.twig

не работает.

Я хотел бы иметь возможность редактировать как блок в primary_menu, так и блок в области содержимого.Но обе тележки получают вывод с одинаковым шаблоном.

1 Ответ

1 голос
/ 19 апреля 2019

Чтобы отделить блоки от дисплеев, Drupal 8 отображает блок независимо от того, в каком дисплее он находится, и какой области / веса он имеет на этом дисплее (см. Соглашения об именах шаблонов веток ):

Шаблоны блоков для конкретных регионов недоступны в Drupal 8.

Это удаляет возможность переопределять block.tpl.php по регионам, а hook_preprocess_block() настраивать переменные на основе этого. Вместо этого разработчики ядра рекомендуют управлять переопределениями шаблонов блоков с помощью CSS или с использованием дополнительных блоков.

Но вы все еще можете обойти это, реализовав hook_theme_suggestions_HOOK_alter():

function SOME_theme_suggestions_block_alter(array &$suggestions, array $variables) {
  if (!empty($variables['elements']['#id'])) {
    $block_id = $variables['elements']['#id'];
    $block = Drupal\block\Entity\Block::load(block_id);
    $region = $block->getRegion();
    // Allow per-region block templating.
    $suggestions[] = 'block__' . $region . '__' . $block_id;
  }

  return $suggestions;
}

Примечание: имя шаблона должно начинаться с " block ", поскольку вы переопределяете шаблон блока, поэтому в вашем случае файл переопределения должен иметь имя block - primary_menu - commerce-cart- block.html.twig .

...