【问题标题】:Adding new blocks to Twig template将新块添加到 Twig 模板
【发布时间】:2016-11-16 05:50:28
【问题描述】:

我有几个以 Symfony 形式使用的“小部件”。这些是日期选择器字段、颜色选择器字段、精美的组合框等。我将每个模板保存在单独的 Twig 文件中,如下所示:

# start of color_widget.html.twig
{% block color_widget %}
<div id="{{ id }}" class="input-group colorpicker-component">
    <span class="input-group-addon"><i></i></span>
    <input type="text" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %} class="form-control" /> 
</div>
<script> 
    $(function() { 
        $('#{{ id }}').colorpicker(); 
    });
</script>
{% endblock %}
# end of color_widget.html.twig

现在,在当前设置下,我应该将所有这些块保存在一个大模板中。但我想创建一个循环来包含这些单独文件中定义的块。本质上,我正在尝试替换它:

{% use "@CoreWidgets/color/widget.html.twig" %}
{% use "@CoreWidgets/date_picker/widget.html.twig" %}
{% use "@OtherWidget/widget.html.twig" %}

类似这样的:

{% for widget in _widgets %}
    {% use widget.path %}
{% endfor %}

但是由于 use 标签不支持变量它不起作用。

我想要这样的方法,因为我想拥有漂亮的小部件包 - 将 CSS、JS、Twig 模板存储在一个地方(一个用于表单元素,另一个用于显示实体信息的页面元素)。然后我可以在配置文件中定义这些包,并整齐地设置和存储。

有没有办法做到这一点?

【问题讨论】:

    标签: symfony twig


    【解决方案1】:

    这不是一个很好的解决方案,但您可以包含一个包含每个小部件的使用声明的文件:

    {# file 1 : file that calls the use tag : #}
    {% use "@CoreWidgets/color/widget.html.twig" %}
    

    然后按照你想要的方式包含它:

    {# file 2 : file that include it : #}
    {% for widget in _widgets %}
        {% include widget.path %}
    {% endfor %}
    

    所以widget.path必须存放文件1的路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 2018-01-29
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多