簡體   English   中英

如何從包含的樹枝模板中填充變量

[英]How to populate up variables from included twig template

我希望能夠從包含的樹枝模板中填充變量,就像在擴展另一個模板時一樣。 這是一個例子:

我有base.twig如下:

{# base.twig #}
<html>
    <head></head>
    <body class="body {{class_from_index}}">
        <nav>...</nav>
        {% block content %}
        {% endblock %}
        <footer>...</footer>
    </body>
</html>

和index.twig如下:

{# index.twig #}
{% extends "base.twig" %}

{% set class_from_index = 'index' }

{% block content %}
    <div>My actual content</div>
{% endblock %}

做這樣的變量class_from_index填充到base.twig ,當我渲染index.twig 但是,如果我有像這樣的gallery.twig:

{# gallery.twig #}
{% set class_from_index = 'gallery' %}
<div>
    A gallery
</div>

並在index.twig添加{% include gallery.twig %} ,變量class_from_index不會填充到index.twigbase.twig 我知道,如果gallery.twig擴展index.twigindex.twig擴展base.twig ,這將起作用,但事實並非如此。

有沒有辦法實現我要解釋的內容? 謝謝 :)

問題

如果main.twig包含:

{% include "gallery.twig" %}

編譯結果將是:

protected function doDisplay(array $context, array $blocks = array())
{
    // line 1
    $this->loadTemplate("gallery.twig", "main.twig", 1)->display($context);
}

並且如果gallery.twig包含:

{% set var = 42 %}

結果是:

protected function doDisplay(array $context, array $blocks = array())
{
    // line 1
    $context["var"] = 42;
}

如您所見,上下文沒有作為參考,因此您的變量無法填充。

相當於PHP

原因很明顯。 從較低范圍到較高范圍使用變量看起來很奇怪。 就像您使用PHP一樣:

<?php

function gallery() {
  $var = 42;
}
gallery();

echo $var;

必須通過另一種方式設計模板架構,才能更好地解決您的問題。 這個問題本身並不重要,完全是出於良好實踐。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM