2016-04-19 4 views
2

Я использую Twig для использования в качестве шаблонов для моделирования, и у меня есть общая правая боковая панель, которая должна быть включена на всех страницах.Расширение или включение нескольких экземпляров TWIG

_base.twig

/* Page HTML header */ 
    {% block content %} {% endblock %} 
/* Page HTML Footer */ 

index.twig

{% extends "_base.twig" %} 
    {% block content %} 
     <div id="left-bar">Dynamic Content</div> 
     <div id="right-bar">Static Content</div> 
    {% endblock %} 

about.twig

{% block content %} 
     <div id="left-bar">Dynamic Content</div> 
     <div id="right-bar">Static Content</div> 
    {% endblock %} 

.... поэтому на протяжении многих страниц. , Я хочу, чтобы right-bar была внешней страницей и должна быть включена в каждую страницу, так как контент всегда такой же.

Я пробовал использовать {% extends %} два раза, но Twig терпит неудачу, поскольку я читаю, что несколько расширений не допускаются. Поэтому любые решения, пожалуйста.

+0

Вы пытались использовать тег 'use'? http://twig.sensiolabs.org/doc/tags/use.html – Miro

ответ

1

С Twig, у вас есть много возможностей для решения вашей проблемы:

A/Родительское решение Официальный документ является here

Это решение отображает содержимое родительского блока вашего ребенка блока.

_base.twig

/* Page HTML header */ 
{% block content %} 
    <div id="left-bar">Dynamic Content</div> 
    <div id="right-bar">Static Content</div> 
{% endblock %} 
/* Page HTML Footer */ 

index.twig

{% extends "_base.twig" %} 
{% block content %} 
    {{ parent() }} 
{% endblock %} 

about.twig

{% extends "_base.twig" %} 
{% block content %} 
    {{ parent() }} 
{% endblock %} 

other.twig

{% extends "_base.twig" %} 
{% block content %} 
    <div> If you don't place the parent twig attribute, your menu can't appear and will be overrided</div> 
{% endblock %} 

B/The Включают Solution Официальный документ является here

Это решение создать еще один блок, и вызвать блок в детском блоке.

_base.twig

/* Page HTML header */ 
{% block content %} 
{% endblock %} 
/* Page HTML Footer */ 

navBar.twig

<div id="left-bar">Dynamic Content</div> 
<div id="right-bar">Static Content</div> 

index.twig

{% extends "_base.twig" %} 
{% block content %} 
    {{ include('navBar.twig') }}\] 
{% endblock %} 

около.прут

{% extends "_base.twig" %} 
{% block content %} 
    {{ include('navBar.twig') }} 
{% endblock %} 

Если вы используете Symfony2 Framework, вы уже можете использовать {{ render(controller('')) }} [вы можете увидеть образец here] для вызова конкретного контроллера, сам назвать вид прут ... это очень полезно, если вы хотите для загрузки динамических значений в вашем блоке, но менее эффективен, чем {{ include('') }} ...

Для меня решение B является лучшим, но оба решения работают.

+0

Хорошо. Я попробую это. Это SLIM, который я использую. И еще одно: мои изменения в CSS не отражаются. Есть ли что-нибудь с CSS? – Gags

+0

Это зависит от того, где содержится ваш CSS-файл ^^ Но если ваш CSS включен на вашей странице (вы можете увидеть исходный код своей страницы), в общем, у вас нет проблем с этим ... –