如何限制文本的长度,例如50,并在显示屏上放置三个点?
{% if myentity.text|length > 50 %}
{% block td_text %} {{ myentity.text}}{% endblock %}
{%endif%}
Run Code Online (Sandbox Code Playgroud)
小智 193
{{ myentity.text|length > 50 ? myentity.text|slice(0, 50) ~ '...' : myentity.text }}
Run Code Online (Sandbox Code Playgroud)
你需要Twig 1.6
mrM*_*tir 107
为什么不使用twig的truncate或wordwrap过滤器?它属于twig扩展,lib是我看到的Symfony2.0的一部分.
{{ text|truncate(50) }}
Run Code Online (Sandbox Code Playgroud)
Man*_*tto 35
另一个是:
{{ myentity.text[:50] ~ '...' }}
Run Code Online (Sandbox Code Playgroud)
小智 16
我知道这是一个非常古老的问题,但是从树枝1.6开始你可以使用切片滤镜;
{{ myentity.text|slice(0, 50) ~ '...' }}
Run Code Online (Sandbox Code Playgroud)
如果要添加某些内容(例如省略号),则代字号的第二部分是可选的.
编辑:我的不好,我看到最多投票的答案确实利用了切片过滤器.
名为UTF-8的@olegkhuss解决方案:Elipsis:
{{ (my.text|length > 50 ? my.text|slice(0, 50) ~ '…' : my.text) }}
使用截断过滤器在达到限制后截断字符串
{{ "Hello World!"|truncate(5) }} // default separator is ...
Run Code Online (Sandbox Code Playgroud)
你好...
您还可以通过将第二个参数设置为 true 来告诉 truncate 保留整个单词。如果最后一个单词位于分隔符上,则截断将打印出整个单词。
{{ "Hello World!"|truncate(7, true) }} // preserve words
Run Code Online (Sandbox Code Playgroud)
这里你好世界!
如果您想更改分隔符,只需将第三个参数设置为您想要的分隔符即可。
{{ "Hello World!"|truncate(7, false, "??") }}
Run Code Online (Sandbox Code Playgroud)
你好W??
小智 6
更优雅的解决方案是将文本限制为单词数(而不是字符数).这可以防止丑陋的撕裂(例如'Stackov ......').
这是一个例子,我只缩短超过10个单词的文本块:
{% set text = myentity.text |split(' ') %}
{% if text|length > 10 %}
{% for t in text|slice(0, 10) %}
{{ t }}
{% endfor %}
...
{% else %}
{{ text|join(' ') }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
将@mshobnr / @olegkhuss解决方案制成一个简单的宏:
{% macro trunc(txt, len) -%}
{{ txt|length > len ? txt|slice(0, len) ~ '…' : txt }}
{%- endmacro %}
Run Code Online (Sandbox Code Playgroud)
用法示例:
{{ tools.trunc('This is the text to truncate. ', 50) }}
Run Code Online (Sandbox Code Playgroud)
Nb我导入一个包含宏的Twig模板,并将其作为“工具”导入,如下所示(Symfony):
{% import "@AppBundle/tools.html.twig" as tools -%}
Run Code Online (Sandbox Code Playgroud)
另外,我用实际字符替换了html字符代码,当使用UTF-8作为文件编码时,这应该没问题。这样您就不必使用|raw(因为这可能会导致安全问题)。
Twig 2 和 Twig 3 的更新。
截断过滤器不可用,您可以使用u-filter代替它
这是一个例子:
{{ 'Lorem ipsum'|u.truncate(8) }}
Lorem ip
{{ 'Lorem ipsum'|u.truncate(8, '...') }}
Lorem...
Run Code Online (Sandbox Code Playgroud)
注意:此过滤器是 StringExtension 的一部分,可以由
twig/string-extra
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
101856 次 |
| 最近记录: |