Несколько вопросов по темизации в Drupal 8

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

Аватар пользователя o-chelovek o-chelovek 22 июля 2016 в 8:45

Всем привет.
Сейчас я разбираюсь в том как устроена схема.
Понял как устроена info.yml, libraries.yml, и в общей структуре темы.
Но вот templates я ни как не могу разобрать!
И так, смотрите вопрос первый: Если установить тему Bartik, то виден заголовок темы
Скриншот

А если поставить тему например Professional Responsive Theme то заголовка статьи нет!

скриншот

  1. Как я понимаю, это проставляется в каком то файле twig. Но вот в каком??? Я обыскался!
  2. Объясните мне как это легко найти самому?
  3. Объясните мне где расписаны все переменные TWIG? я не смог найти.
  4. Как я понял названия twig файлов что то переопределяю, но что? Как понимать такие названия block--system-menu-block.html.twig? Они ведь что то значат.

Комментарии

Аватар пользователя o-chelovek o-chelovek 22 июля 2016 в 9:20

Я нашел этот файл. block.html.twig называется.
Вот его код

<div{{ attributes.addClass(classes) }}>
  {{ title_prefix }}
  {% if label %}
    <h2{{ title_attributes }}>{{ label }}</h2>
  {% endif %}
  {{ title_suffix }}
  {% block content %}
    {{ content }}
  {% endblock %}
</div>

Вывод заголовка идет в {{ content }}
А где он заполняется подскажите?
А так же я понял что он вызывается в каждом блоке который я использую.
Вот только вопрос, а где происходит вызов? И почему content не заполняется тем чем нужно?

Аватар пользователя gun_dose gun_dose 22 июля 2016 в 9:42
1

Я восьмёрку не юзал, но если экстраполировать сюда логику с семёрки, то у вас неверно следующее:
1. Заголовок никогда не выводится в content. В вашем случае это label.
2. Я так понял, что на скринах страница ноды, соответственно вам нужен не шаблон блока, а шаблон страницы.
3. Если на странице выводится несколько нод, то см. шаблон ноды.

Аватар пользователя o-chelovek o-chelovek 22 июля 2016 в 10:00

«1. Заголовок никогда не выводится в content. В вашем случае это label.»
Поэкспериментируем:
Устанавливаю Bartik
Изменяю файл block.html.twig так:

<div{{ attributes.addClass(classes) }}>
  {{ 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
В этом месте:

<main id="content" class="column main-content" role="main">
          <section class="section">
            <a id="main-content" tabindex="-1"></a>
            {{ page.content }}
          </section>
        </main>

И как я вижу, заголовок все равно вызывается {{ page.content }}
Но Label тут не учавствует. Как так?

Аватар пользователя Mihail.space Mihail.space 22 июля 2016 в 9:59
1

В бартике заголовок выводится на странице схемы блоков блоком "Заголовок страницы". Добавьте этот блок в Professional Responsive Theme и выведется и там, или в шаблоне node.html.twig выводите через {{ label }}

Аватар пользователя o-chelovek o-chelovek 22 июля 2016 в 10:07

В схеме 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 }} становится вдруг заголовком???

Аватар пользователя tlito tlito 22 июля 2016 в 10:24
1

как вам и сказали, заголовок - выводится блоком "Заголовок страницы"
и регион отображения этого блока настраивается тут /admin/structure/block
при переключении тем в д8 часто блоки могут отключаться или перемешиваться по регионам, так как в разных темах - разные имена регионов.
код твиг вам копать не обязательно

Аватар пользователя o-chelovek o-chelovek 22 июля 2016 в 10:41

Я кажется начинаю понимать!!!
В файле info.yml указываются регионы! Потом в этих регионах в панели администрирования в admin/structure/block я ставлю блоки в эти регионы.
А за отображения каждого региона отвечает page.html.twig на странице.
И у меня в теме professional_responsive_theme есть код. и он как раз и отвечает за

<!-- Page Title -->
{%  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
Теперь более понятней что откуда вылазит. Но все равно еще плаваю пока что в этом

Аватар пользователя Mihail.space Mihail.space 22 июля 2016 в 14:58

вы можете изменить условия проверки и удалить ненужное.
можете вообще не выводить этот блок и выводить заголовок в ноде через {{ label }}, но тогда заголовки других страниц, отличных от ноды выводиться не будут вообще. как вам удобно, так и делайте.

Аватар пользователя etulikov etulikov 3 августа 2016 в 13:24

o-chelovek wrote:

Как я понимаю, это проставляется в каком то файле twig. Но вот в каком??? Я обыскался!

Вы можете воспользоваться статьёй Debugging Twig templates. Очень помогает искать файлы. Только не забудте выключить на продакшене)