在我的twig模板中,我有以下代码:
<td>{{ object.content|length > 50 ? object.content|raw|slice(0, 50) ~ '...' : object.content|raw }}</td>
我的对象object.content
是这样的字符串:
<p>Nullam quis risus eget urna mollis ornare vel eu leo. Donec ullamcorper nulla non metus auctor fringilla.</p>
我想输出不带<p>, <b>, ..
标签的字符串。这就是我添加|raw
过滤器的原因。我也只想输出整个字符串的50个字符。
50个字符的切片有效,但他仍显示<p>, ..
标签。
现在我这样做了:
<td>{{ object.content|raw }}</td>
他显示没有<p>
标签的字符串。但是,当我添加切片过滤器时,它不起作用......我也尝试在输出之前设置一个变量,如下所示:
{% set rawcontent = object.content %}
<td>{{ rawcontent|slice(0, 50) ~ '...' }}</td>
但结果相同......我该如何解决这个问题?
答案 0 :(得分:14)
答案 1 :(得分:5)
过滤器专用于此类行为:truncate() 它被禁用但你可以激活它:
services:
twig.extension.text:
class: Twig_Extensions_Extension_Text
tags:
- { name: twig.extension }
你可以像这样使用它:
{{ entity.text|striptags|truncate(50, true, "...")|raw }}
最好的用途是当你想用HTML内容限制字符时。
您可以计算并截断字符串的实际大小;)
{% if entity.contenu|striptags|raw|length > 50 %}
{{ entity.contenu|striptags|truncate(50, true, "...")|raw }}
{% else %}
{{ entity.contenu|striptags|raw }}
{% endif %}
或者您可以像这样使用它:
{{ entity.text|striptags|length > 50 ? entity.text|striptags|truncate(50, true, "...")|raw : entity.text|striptags|raw }}
希望有帮助...
答案 2 :(得分:2)
我尝试在各种组合中使用“raw”,“slice”和“〜”。它不能正确地协同工作(以及“striptags”)。您只能同时使用“原始”和“切片”。
所以我找到了其他方法(看起来没什么好处,但它有效):
{{ event.info|length > 300 ? event.info|slice(0,300)|raw : event.info|raw }}
{{ event.info|length > 300 ? '...' : ''}}
答案 3 :(得分:1)
我尝试了Max Lipsky的代码,然后我注意到它对ã
之类的字符不起作用,然后我修改了一点,现在看起来工作得很好
{{ event.info|striptags|length > 150 ? event.info|raw|slice(0,150)|raw : event.info|raw }}
{{ event.info|striptags|length > 150 ? '...' : ''}}