Вывод пользовательских блоков в D8

Главные вкладки

Аватар пользователя Vladi-D7-D8 Vladi-D7-D8 17 апреля 2020 в 19:25

Моё почтение, граждане. Возник вопрос: пользовательские блоки выводятся каким-то своим оригинальным способом?

В D8 (8.8) наблюдаю разделение блоков на системные и кастомные. Ок. Сделал свою тему, вывел нужные регионы в info. Всё замечательно работает, но до тех пор, пока не вывожу в регион кастомный блок. Т.е., скажем, есть у меня регион formblock, я создаю свой блок в админке (аля свой хтмл в ) и кладу его в этот регион. В шаблон страницы ставлю {{ page.formblock }}

И... И ничего. Что-то не могу найти в чём юмор...

Комментарии

Аватар пользователя Vladi-D7-D8 Vladi-D7-D8 17 апреля 2020 в 19:40
ivnish wrote:
Покажи скрин info.yml темы, скрин шаблона и скрин страницы с блоками

Page:

info:

Блоки:

Эти же блоки в списке кастомных:

Аватар пользователя Vladi-D7-D8 Vladi-D7-D8 17 апреля 2020 в 19:44

ivnish wrote:
На первый взгляд все верно. А что в инспекторе браузера?

В инспекторе пусто. Только то, что выводит {{ page.content }}

Аватар пользователя Vladi-D7-D8 Vladi-D7-D8 17 апреля 2020 в 22:37

Пилюлю для вывода кастомных (пользовательских) блоков нашёл. Если вдруг кому в будущем будет надо.
Проблема: системные блоки (views, menu, content) выводятся в регион стандартно.
Кастомные блоки, созданные в разделе блоков вручную приходится пинать, чтобы заработало.

1. Идём в настройки блока,чтобы узнать машинное имя блока. На моём примере это 'formakontaktov2'. Условно назовём его 'machinname_block'

2. По адресу редактирования контента блока мы можем увидеть его id. У меня он 2, условно назовём его 'ID'

3. Далее идём и редактируем .theme файл темы. Условно your.theme. Он имеет формат php, блвгодаря чему передаём данные в тему. (Потому инициализируется не как шаблон twig, а по старому доброму способу <?php)

Заносим наш блок в шаблоны темы:


<?php
function mythem_preprocess_page(&$variables) {
    
$block_entity Drupal\block_content\Entity\BlockContent::load(ID);// BLOCK_ID
    
$block_view = \Drupal::entityTypeManager()->getViewBuilder('block_content')->view($block_entity'machinname_block');
    
$variables['block_machinname_block'] = $block_view;
}
?>

В моём случае вывод выглядит таковым:

<?php
function art_preprocess_page(&$variables) {
    
$block_entity Drupal\block_content\Entity\BlockContent::load(2);// BLOCK_ID
    
$block_view = \Drupal::entityTypeManager()->getViewBuilder('block_content')->view($block_entity'formakontaktov2');
    
$variables['block_formakontaktov2'] = $block_view;
}
?>

4. Идём в наш page.html.twig и вставляем:
{{ block_machinname_block }}

5. Сбрасываем кэш и видим блок.

6. Если надо в ноду блок закинуть, то всё то же самое, только используем preprocess_node()


<?php
function mythem_preprocess_node(&$variables) {
    
$block_entity Drupal\block_content\Entity\BlockContent::load(ID);// BLOCK_ID
    
$block_view = \Drupal::entityTypeManager()->getViewBuilder('block_content')->view($block_entity'machinname_block');
    
$variables['block_machinname_block'] = $block_view;
}
?>
Аватар пользователя ivnish ivnish 17 апреля 2020 в 22:41

Откуда инфа? У меня на куче сайтов выводятся кастомные блоки в свои регионы.

На bartik надо попробовать

Аватар пользователя Vladi-D7-D8 Vladi-D7-D8 17 апреля 2020 в 22:49

ivnish wrote:
Откуда инфа? У меня на куче сайтов выводятся кастомные блоки в свои регионы.
На bartik надо попробовать

По мотивам этого мануала. Только он не работает. Видимо, написан для ядра 8.6, не знаю. Пришлось допиливать на основе выброшенных мне ошибок на белом экране.

У меня 8.8.5. Ну не хочет выводит кастомные блоки. Не знаю почему. Я его и в стандартный {{ page.content }} закидывал. Ни в какую. Пришлось вот это пилить. Конечно, позже ещё на дефолтной теме попробую. Но что-то мне подсказывает, что дело не в теме.