@Exotic33

Откуда растут ноги у простоты в использовании Twig?

Доброго вечера, друзья. Уже давно начал разрабатывать тяжелый проект, и столкнулся с проблемой. Всё же, хочется чтобы блоки из вёрстки типа topbar, sidebar были в отдельных файлах, и уже в них происходила всякая байда и мешанина. На помощь пришел шаблонизатор, но представления не имею как им пользоваться, несмотря на описанную простоту. Функционал подразумевает также добавление блоков, но каков их смысл, если блоки определяются в базовом шаблоне и уже из него распространяются на другие файлы? К примеру в базовом есть блок content, и в дочернем, который его переопределяет, а также волшебное наследование базового шаблона {% extends %}Тогда ссылаться нужно на дочерний шаблон, потому что именно оттуда идет вызов всего остального? Это всё что я понял. Максимум что помогло, это {% include 'topbar.html.php' %} Так как же тогда описать скелет, используя всю мощь шаблонизатора, а не инклюдники? Спасибо. Документацию читаю.
  • Вопрос задан
  • 378 просмотров
Решения вопроса 1
prototype_denis
@prototype_denis
Symfony
{#- /views/header.twig -#}
<div>
    <div class="left">
        {% include "/views/header/left" %}
    </div>
    <div class="right">
        {% include "/views/header/right" %}
    </div>
</div>

{#- /views/header/left.twig -#}
<ul>
    <li><a href="#!">Link</a></li>
    <li><a href="#!">Link 2</a></li>
</ul>


{#- /views/header/right.twig -#}
<p class="text-left">Right</p>


{#- /views/base.twig -#}
<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>{% block title %}Hello!{% endblock %}</title>
    </head>
    <body>
        <div class="row">
            <div class="col-md-2">
                {% include "/views/header.twig" %}
            </div>
            <div class="col-md-10">
                {% block content %}{% endblock %}
            </div>
        </div>
        <div class="row">
            <div class="col-md-12">
                {% block footer %}{% endblock %}
            </div>
        </div>
    </body> 
</html> 


{#- /views/ajax.twig -#}
{% block content %}{% endblock %}




{#- /views/pages/base.twig -#}
{% extends "/views/base.twig" %}
{% block title %}
    Welcome.
{% endblock %}
{% block content %}{% endblock %}
{% block footer %} (c) 2015 {% endblock %}




{#- /views/pages/blog/index.twig -#}
{% extends app.isAjax() ? "/views/pages/ajax.twig" : "/views/pages/base.twig" %}
{% block title %}
    {{ parent() }} This best blog.
{% endblock %}
{% block content %}
    <h1>Header</h1>
    <p>Content text</p>
{% endblock %}
{% block footer %}{#- remove parent -#}{% endblock %} 


Что тут происходит.
При рендере /views/pages/blog/index.twig 
шаблонизатор будет подниматься вверх.

В нём переопределяем footer, дополняем title.
title  = "??? This best blog."
footer = ""
content = "<h1>...."

index (проверка переменной) +-> ajax.twig -> вывод
                            |
                            | or
                            |
                            +-> page/base.twig + 
                                               |
      +----------------------------------------+
      |      Тут по пути уже к базовому шаблону переопределяем footer и title
      |      title  = "Welcome. This best blog."
      |      footer = ""
      |      content = "<h1>...."
      |
      v                 А тут уже include
      base.twig - - - > header.twig - + - - > left.twig
      |                               + - - > right.twig
      v
    вывод


+---------------------------------------+
| +-----------------------------------+ |
| |                                   | |
| | +--------------+ +--------------+ | |
| | | left         | | right        | | | header
| | +--------------+ +--------------+ | |
| |                                   | |
| +-----------------------------------+ |
| |                                   | |
| | +----------------------------+    | | base | ajax
| | | Welcome. This best blog.   |    | | title
| | +----------------------------+    | |
| |                                   | |
| | +----------------------------+    | |
| | |  Header                    |    | | content
| | |  Content text              |    | |
| | +----------------------------+    | |
| |                                   | |
| +-----------------------------------+ |
+---------------------------------------+


Помимо простой иерархии блоков, в шаблонизаторе очень много интересного.
Только и успевай документацию читать...

ЗЫ. По умолчанию тут почему-то html подсветка. (бред)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы