在扩展模板中扩展模板

extend template in extended template

我是 twig 的初学者,很难制定出将框架和消息框包含到我的页面中的标准方法。

这是我的代码以及我希望它如何运行。这三天我一直在尝试不同的方法,但无济于事:

index.php

echo $twig->render('mypage.twig');

mypage.twig

{%extends 'main_frame.twig'%}

{%block title}This is an example{%endblock%}

{%block body%}
  <p>This page is built with Twig</p>

  {%extends 'message_box.twig'%}
  {%block body%}
    <h1>Twig is fun</h1>
  {%endblock%}

{%block%}

main_frame.twig

<html>
  <head>
    <title>{%block title%}{%endblock%}</title>
  </head>
  <body>{%block body%}{%endblock%}</body>
</html>

message_box.twig

<div style='boarder: thin solid #f0f0f0;'>
  {%block body%}{%endblock%}
</div>

呈现的代码应该是这样的:

<html>
  <head>
    <title>This is an example</title>
  </head>
  <body>
    <p>This page is built with Twig</p>
    <div style='boarder: thin solid #f0f0f0;'>
      <h1>Twig is fun</h1>
    </div>
  </body>
</html>

您正在查找标签 {% embed %}。它是 extendsinclude 的混合,允许您覆盖嵌入模板中的块,例如

main.twig

<!DOCTYPE html>
<html>
  <head>
    <title>{%block title%}{%endblock%}</title>
  </head>
  <body>{%block body%}{%endblock%}</body>
</html>

page.twig

{% extends "main.twig" %}
{% block body %}
    {% embed "message.twig" %}
        {% block body %}
            This is my message
        {% endblock %}
    {% endembed %}
{% endblock %}

message.twig

<div class="message">
  {%block body%}{%endblock%}
</div>

demo


Extends 只能在模板中使用一次,甚至不能在块内使用