Всем привет.
Сейчас я разбираюсь в том как устроена схема.
Понял как устроена info.yml, libraries.yml, и в общей структуре темы.
Но вот templates я ни как не могу разобрать!
И так, смотрите вопрос первый: Если установить тему Bartik, то виден заголовок темы
А если поставить тему например Professional Responsive Theme то заголовка статьи нет!
- Как я понимаю, это проставляется в каком то файле twig. Но вот в каком??? Я обыскался!
- Объясните мне как это легко найти самому?
- Объясните мне где расписаны все переменные TWIG? я не смог найти.
- Как я понял названия twig файлов что то переопределяю, но что? Как понимать такие названия block--system-menu-block.html.twig? Они ведь что то значат.
Комментарии
Я нашел этот файл. block.html.twig называется.
Вот его код
{{ title_prefix }}
{% if label %}
<h2{{ title_attributes }}>{{ label }}</h2>
{% endif %}
{{ title_suffix }}
{% block content %}
{{ content }}
{% endblock %}
</div>
Вывод заголовка идет в {{ content }}
А где он заполняется подскажите?
А так же я понял что он вызывается в каждом блоке который я использую.
Вот только вопрос, а где происходит вызов? И почему content не заполняется тем чем нужно?
Я восьмёрку не юзал, но если экстраполировать сюда логику с семёрки, то у вас неверно следующее:
1. Заголовок никогда не выводится в content. В вашем случае это label.
2. Я так понял, что на скринах страница ноды, соответственно вам нужен не шаблон блока, а шаблон страницы.
3. Если на странице выводится несколько нод, то см. шаблон ноды.
«1. Заголовок никогда не выводится в content. В вашем случае это label.»
Поэкспериментируем:
Устанавливаю Bartik
Изменяю файл block.html.twig так:
{{ title_prefix }}
{% if label %}
<h2{{ title_attributes }}>{{ label }}</h2>
{% endif %}
{{ title_suffix }}
{% block content %}
<div{{ content_attributes.addClass('content') }}>
before content
{{ content }}
after content
</div>
{% endblock %}
</div>
Просто добавил before content и after content
Смотрим теперь что вышло:
Скриншот
По всей видимости вывод заголовка именно от сюда идет. Но теперь рассмотрим:
«В вашем случае это label.
2. Я так понял, что на скринах страница ноды, соответственно вам нужен не шаблон блока, а шаблон страницы.»
И так, для начала я посмотрел на самой странице что выводит заголовок:
Скриншот
Там видно что выводит именно из файла page.html.twig
В этом месте:
<section class="section">
<a id="main-content" tabindex="-1"></a>
{{ page.content }}
</section>
</main>
И как я вижу, заголовок все равно вызывается {{ page.content }}
Но Label тут не учавствует. Как так?
В бартике заголовок выводится на странице схемы блоков блоком "Заголовок страницы". Добавьте этот блок в Professional Responsive Theme и выведется и там, или в шаблоне node.html.twig выводите через {{ label }}
В схеме Professional Responsive Theme имеется файл block.html.twig. И в нем все есть:
set classes = [
'block',
'block-' ~ configuration.provider|clean_class,
'block-' ~ plugin_id|clean_class,
]
%}
<div{{ attributes.addClass(classes) }}>
{{ title_prefix }}
{% if label %}
<h2{{ title_attributes }}>{{ label }}</h2>
{% endif %}
{{ title_suffix }}
{% block content %}
{{ content }}
{% endblock %}
</div>
«или в шаблоне node.html.twig выводите через {{ label }}»
Это работает
Но как barik делает так что {{ page.content }} становится вдруг заголовком???
как вам и сказали, заголовок - выводится блоком "Заголовок страницы"
и регион отображения этого блока настраивается тут /admin/structure/block
при переключении тем в д8 часто блоки могут отключаться или перемешиваться по регионам, так как в разных темах - разные имена регионов.
код твиг вам копать не обязательно
Я кажется начинаю понимать!!!
В файле info.yml указываются регионы! Потом в этих регионах в панели администрирования в admin/structure/block я ставлю блоки в эти регионы.
А за отображения каждого региона отвечает page.html.twig на странице.
И у меня в теме professional_responsive_theme есть код. и он как раз и отвечает за
{% if page.page_title and not is_front %}
<div id="page-title">
<div id="page-title-inner">
<!-- start: Container -->
<div class="container">
{{ page.page_title }}
</div>
</div>
</div>
{% endif %}
<!-- End Page Title ---- >
И тут видно if page.page_title and not is_front
Если есть заголовок страницы и страница не первая то выводится заголовок.
А мне просто нужно изменить логику и убрать and not is_front
Теперь более понятней что откуда вылазит. Но все равно еще плаваю пока что в этом
вы можете изменить условия проверки и удалить ненужное.
можете вообще не выводить этот блок и выводить заголовок в ноде через {{ label }}, но тогда заголовки других страниц, отличных от ноды выводиться не будут вообще. как вам удобно, так и делайте.
Вы можете воспользоваться статьёй Debugging Twig templates. Очень помогает искать файлы. Только не забудте выключить на продакшене)