首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用块将Smarty 3转换为Twig 2

使用块将Smarty 3转换为Twig 2
EN

Stack Overflow用户
提问于 2018-02-13 19:23:56
回答 1查看 235关注 0票数 1

希望这将是我最后的困惑。

在我的Smarty模板中,我有相当于细枝代码的内容,它根据“show”设置的内容有条件地设置“标题”块。下面插入的模板代码不起作用,它给出了一个错误,说明标题块已经定义好了。我做了一些研究,我发现这不适用于Twig,我猜是因为它在检查if语句之前正在编译它,这对我来说是完全违背直觉的,但我没有创建Twig。=)

代码语言:javascript
复制
{% if show is defined %}
        {% if show == 'add_form' %}
            {% block heading %}Add{% endblock %}
        {% elseif show == 'main' %}
            {% block heading %}Main{% endblock %}
 {% endif %}

我只在模板中使用这种样式,在模板中有一堆非常小的视图(字面上是2-3行HTML),所以我想我可以为每个视图创建单独的模板文件,但这似乎是一堆额外的文件。在Twig做这件事的“正确”方法是什么?

再次感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-13 20:36:59

对,您不能多次定义同一个块,即使它们位于单独的逻辑分支中。

这两项工作都是:

代码语言:javascript
复制
{% if show is defined %}
    {% block heading %}
        {% if show == 'add_form' %}
            Add
        {% elseif show == 'main' %}
            Main
        {% endif %}
    {% endblock %}
{% endif %}
代码语言:javascript
复制
{% block heading %}
    {% if show is defined %}
        {% if show == 'add_form' %}
            Add
        {% elseif show == 'main' %}
            Main
        {% endif %}
    {% endif %}
{% endblock %}

请参阅TwigFiddle

我认为第二个更清晰(至少在本例中是这样),因为扩展另一个模板的模板不能包含Twig块之外的内容。这意味着如果你试图做这样的事情:

代码语言:javascript
复制
{% extends 'layout.twig' %}

{% block heading %}
    Some content
{% endblock %}

Hello world!

您将得到以下消息的Twig_Error_Syntax异常:

扩展另一个模板的模板不能包含Twig块之外的内容。你忘了把内容放进{% block %}标签里了吗?

因此,如果将所有代码放入块中,则模板将保持清晰。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48774186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档