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) }}