Подключаем шаблонизатор

Внимательный читатель заметит, что смешивать html и php-логику — плохая практика. И с этим сложно не согласиться. Будем идти в ногу со временем и подключим Twig в качестве шаблонизатора к нашему сайту.

Замечание. Twig входит в пакет библиотек, устанавливаемых вместе с дистрибутивом CMS начиная с версии 3.10.1

Создадим файл www/.templates/bootstrap.php в котором произведем инициализацию Twig:

$a = $application;
// Сервер
$s = $a->getServer();
// Активный раздел
$c = $a->getCatalog();
 
$twig = $a->getTwig();
$twig->addGlobal('server',  $s);
$twig->addGlobal('catalog', $c);

bootstrap.php, если присутствует, подключается всегда перед подключением основного скрипта шаблона. В нем мы конфигурируем twig, определяем константы и переменные для дальнейшего использования.

Теперь в каталоге www/.templates/design/ создадим 3 twig шаблона:

  • layout.twig — основной каркас сайта
  • page_index.twig — главная страница
  • page_ordinary.twig — рядовая страница

www/.templates/design/layout.twig:

<!doctype html>
<html class="no-js" lang="ru">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  </head>
  <body>
 
    <div class="row">
      <div class="large-12 columns">
 
        <a href="/" title="На главную"><img src="{{ server.picture }}" alt="LOGO" align="left"></a>
        <h1>{{ server.name|raw }}</h1>
 
      </div>
    </div>
 
    {# Основное содержимое #}   
    {% block main %}{% endblock %}   
 
  </body> 
</html>

Макет индексной страницы — в www/.templates/design/page_index.twig:

{% extends "layout.twig" %}

Макет рядовой страницы — в www/.templates/design/page_ordinary.twig:

{% extends "layout.twig" %}

Теперь контроллер главной страницы www/.templates/default.php будет выглядеть гораздо проще:

$twig->display('page_index.twig');

По такому же принципу создадим контроллер рядовой страницы www/.templates/ordinary.php:

$twig->display('page_ordinary.twig');

Для всех разделов первого уровня надо указать, что они используют контроллер ordinary.php:

Пример

Сравним результат:

Пример

Ничего не сломалось. Можно двигаться дальше.


Мы на связи

фото Алены Ратниковой

Алена Ратникова
Отвечаю за всё производство

фото Марии Лебедевой

Мария Лебедева
Занимаюсь новыми клиентами


Cetera Labs

График работы

Понедельник-пятница
9:00-18:00

Телефон

8 (800) 775-52-93