symfony 2分枝限制了文本的长度,并把三个点

如何限制文本的长度,例如50,并在显示屏上放三个点

{% if myentity.text|length > 50 %} {% block td_text %} {{ myentity.text}}{% endblock %} {%endif%} 
 {{ myentity.text|length > 50 ? myentity.text|slice(0, 50) ~ '...' : myentity.text }} 

你需要Twig 1.6

为什么不使用小枝的截断或wordwrapfilter? 它属于树枝扩展 ,lib是Symfony2.0的一部分,正如我所看到的。

 {{ text|truncate(50) }} 

另一个是:

 {{ myentity.text[:50] ~ '...' }} 

我知道这是一个非常古老的问题,但从1.6分支你可以使用切片filter;

 {{ myentity.text|slice(0, 50) ~ '...' }} 

代字符的第二部分是可选的,如果你想添加例如省略号。

编辑:我不好,我看到最有利的答案做利用切片filter。

您可以按照以下方式进行限制。 首先是起始索引,第二个是字符数。

 **{{ results['text'][4:2] }}** 

一个更优雅的解决scheme是限制文本的字数(而不是字符数)。 这可以防止丑陋的眼泪(例如'Stackov …')。

下面是一个缩短文本块长度超过10个单词的例子:

 {% set text = myentity.text |split(' ') %} {% if text|length > 10 %} {% for t in text|slice(0, 10) %} {{ t }} {% endfor %} ... {% else %} {{ text|join(' ') }} {% endif %} 

@olegkhuss解决scheme,命名为HTML实体: {{ (my.text|length > 50 ? my.text|slice(0, 50) ~ '…' : my.text)|raw }}

@mshobnr / @olegkhuss解决scheme制作成一个简单的macros:

 {% macro trunc(txt, len) -%} {{ txt|length > len ? txt|slice(0, len) ~ '…' : txt }} {%- endmacro %} 

用法示例:

 {{ tools.trunc('This is the text to truncate. ', 50) }} 

Nb我导入一个包含macros的Twig模板并将其导入为“工具”(Symfony):

 {% import "@AppBundle/tools.html.twig" as tools -%} 

另外,我用实际字符replace了html字符代码,使用UTF-8作为文件编码时,这应该不成问题。 这样你就不必使用|raw (因为这可能会导致安全问题)。

我写了这个简单的marco出于同样的目的,希望它可以帮助:

 {%- macro stringMaxLength(str, maxLength) -%} {%- if str | length < maxLength -%} {{ str }} {%- else -%} {{ str|slice(0, maxLength) }}... {%- endif -%} {%- endmacro -%} 

用法示例#1(输出:“my long string here …”):

 {{ _self.stringMaxLength("my long string here bla bla bla la", 20) }} 

用法示例#2(输出:“较短的string!”):

 {{ _self.stringMaxLength("shorter string!", 20) }}