symfony2 twig - 原始和切片过滤器一起不起作用
symfony2 twig - raw & slice filter together doesn't work
在我的树枝模板中,我有以下代码:
<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>
但结果相同...我该如何解决?
这里应该使用striptags
而不是raw
object.content|striptags|slice(0, 50)
我尝试以各种组合使用 "raw"、"slice" 和“~”。它不能正常协同工作("striptags" 也是如此)。您只能同时使用 "raw" 和 "slice"。
所以我找到了其他方法(看起来不太好,但很管用):
{{ event.info|length > 300 ? event.info|slice(0,300)|raw : event.info|raw }}
{{ event.info|length > 300 ? '...' : ''}}
过滤器专用于此类行为:truncate()
它已禁用,但您可以激活它:
services:
twig.extension.text:
class: Twig_Extensions_Extension_Text
tags:
- { name: twig.extension }
你可以这样使用它:
{{ entity.text|striptags|truncate(50, true, "...")|raw }}
最好的用途是当你想用 HTML 内容限制字符时。
- 您删除标签是为了注意将其应用于 'striptags'
- 您用 '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 }}
希望对你有所帮助...
我尝试了 Max Lipsky 的代码,然后我发现它不适用于像 ã
这样的字符,然后我稍微修改了一下,现在它似乎工作得很好
{{ event.info|striptags|length > 150 ? event.info|raw|slice(0,150)|raw : event.info|raw }}
{{ event.info|striptags|length > 150 ? '...' : ''}}
在我的树枝模板中,我有以下代码:
<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>
但结果相同...我该如何解决?
striptags
而不是raw
object.content|striptags|slice(0, 50)
我尝试以各种组合使用 "raw"、"slice" 和“~”。它不能正常协同工作("striptags" 也是如此)。您只能同时使用 "raw" 和 "slice"。
所以我找到了其他方法(看起来不太好,但很管用):
{{ event.info|length > 300 ? event.info|slice(0,300)|raw : event.info|raw }}
{{ event.info|length > 300 ? '...' : ''}}
过滤器专用于此类行为:truncate() 它已禁用,但您可以激活它:
services:
twig.extension.text:
class: Twig_Extensions_Extension_Text
tags:
- { name: twig.extension }
你可以这样使用它:
{{ entity.text|striptags|truncate(50, true, "...")|raw }}
最好的用途是当你想用 HTML 内容限制字符时。
- 您删除标签是为了注意将其应用于 'striptags'
- 您用 '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 }}
希望对你有所帮助...
我尝试了 Max Lipsky 的代码,然后我发现它不适用于像 ã
这样的字符,然后我稍微修改了一下,现在它似乎工作得很好
{{ event.info|striptags|length > 150 ? event.info|raw|slice(0,150)|raw : event.info|raw }}
{{ event.info|striptags|length > 150 ? '...' : ''}}