Контрол над темата - Заглавия

След като сме създали текстовите полета на заглавията на услугите ще трябва да ги подадем към началната страница на темата. Нека като начало разгледаме какво се случва след натискане на бутона "Save Configuration". На практика всички стойности се подават към submit функция, разположена в ядрото, която ги записва в конфигурацията на темата. Сега нашата задача е да извлечем тези стойности от конфигурацията и да ги подадем към темплейта page--front.html.twig. За целта ще се запознаем с още нещо, често използвано в Drupal - препроцес функциите.

Препроцесс функциите както говори тяхното име са функции, които се изпълняват преди визуализиране на съдържанието. Това съдържание може да е различно - страница, node, меню, блок и т.н. Тези функции се регистрат отново с точното описание на името (за разлика от WordPress, където има филтър-функции, които се регистрират изрично с помощта на специална функция add_filter )

И понеже ние трябва да подадем нашите стойности към страница, то функцията, която трябва да използваме е hook_preprocess_page. За целта отново във файла deep_theme.theme създаваме функция

deep_theme_preprocess_page(&$vars)

Описвайки така функцията тя ще се изпълнява винаги преди да се визуализира страницата, като ще й бъдат подадени всички променливи (по референция), които темплейта ще използва. Нашата цел е да допълним тези променливи със стойностите от текстовите полета, попълнени в конфигурационната форма на темата, които създадохме в предишната статия. За да достъпим тези стойности използваме отново функция от ядрото - theme_get_setting, на която подаваме ключа на полето, чиято стойност искаме да получим:

function deep_theme_preprocess_page(&$vars) {
  $vars['left_service_title'] = theme_get_setting('left_service_title');
  $vars['middle_service_title'] = theme_get_setting('middle_service_title');
  $vars['right_service_title'] = theme_get_setting('right_service_title');
}

На практика създаваме нови променливи, които присвояваме на масива $vars. След изпълнението на функцията този масив с вече допълнените променливи ще се подаде на темплейта, който ще ги получи като TWIG - променливи и ще ги визуализира като с просто използване на оградени с двойни къдрави скоби имена на променливи. За да го направим в темплейта page--front.html.twig в секцията с услугите правим следните промени:

<section id="services">
      <div class="service left-service">
        <div class="service-image">
          <img class="picture" src="{{ base_path ~ directory }}/images/manicure-870857_1280.jpg" alt="" />
        </div>
        <h2><a href="#">{{ left_service_title }}</a></h2>
        <p>
          Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        </p>
      </div>
      <div class="service middle-service">
        <div class="service-image">
          <img class="picture" src="{{ base_path ~ directory }}/images/cosmetics-2130540_1280.jpg" alt="" />
        </div>
        <h2><a href="#">{{ middle_service_title }}</a></h2>
        <p>
          Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        </p>
      </div>
      <div class="service right-service">
        <div class="service-image">
          <img class="picture" src="{{ base_path ~ directory }}/images/fashion-3308387_1280.jpg" alt="" />
        </div>
        <h2><a href="#">{{ right_service_title }}</a></h2>
        <p>
          Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        </p>
      </div>
  </section>

Виждаме, че просто на местата, където преди са били някакви стойносtи на линка в <h2> тага поставяме нашите променливи. Можем да изпробваме дали всичко работи като зададем някакви стойности на полетата в конфигурационната форма на темата:

Theme settings form

И след натискане на бутона Save configuration да се върнем в сайта и да видим какво се е получило:

Custom Settings in template

Виждаме, че услугите вече съдържат заглавията, които сме подали в конфигурационната форма.

Като упражнение може да направите нови полета, в които да се въвеждат стойности за URL на линковете на услугите. Полетата за параграфите с кратко описание на услугите можете да направите по същия начин, но понеже те обикновено са по-дълги ще се наложи да се използва друг елемент вместо textfield. В следващата статия ще Ви покажа как ще го направя аз.

Ако нещо на работи както трябва проверете внимателно дали имената на променливите отговарят на имената в препроцес-функцията, а те съответно на ключовете с описание на полетата във формата за конфигуриране.