symfony2 twig - raw&切片过滤器不起作用

时间:2015-01-16 14:06:21

标签: php symfony themes twig

在我的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>

但结果相同......我该如何解决这个问题?

4 个答案:

答案 0 :(得分:14)

此处应使用

striptags而不是raw

object.content|striptags|slice(0, 50)

请参阅fiddle

答案 1 :(得分:5)

过滤器专用于此类行为:truncate() 它被禁用但你可以激活它:

services:
   twig.extension.text:
      class: Twig_Extensions_Extension_Text
      tags:
          - { name: twig.extension }

你可以像这样使用它:

{{ entity.text|striptags|truncate(50, true, "...")|raw }}

最好的用途是当你想用HTML内容限制字符时。

  1. 您删除了代码,以便将其应用于&#39; striptags&#39;
  2. 您插入了&#39;&amp; eacute&#39;等html实体。与&#39; raw&#39;
  3. 您可以计算并截断字符串的实际大小;)

    {% if entity.contenu|striptags|raw|length > 50 %}
                    {{ entity.contenu|striptags|truncate(50, true, "...")|raw }}
                {% else %} 
                    {{ entity.contenu|striptags|raw }}
                {% endif %}
    
  4. 或者您可以像这样使用它:

    {{ 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的代码,然后我注意到它对&atilde;之类的字符不起作用,然后我修改了一点,现在看起来工作得很好

{{ event.info|striptags|length > 150 ? event.info|raw|slice(0,150)|raw : event.info|raw }}
{{ event.info|striptags|length > 150 ? '...' : ''}}