【问题标题】:symfony2 twig - raw & slice filter together doesn't worksymfony2 twig - raw & slice 过滤器一起不起作用
【发布时间】:2015-01-16 14:06:20
【问题描述】:

在我的树枝模板中,我有以下代码:

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

我想输出没有&lt;p&gt;, &lt;b&gt;, .. 标签的字符串。这就是我添加|raw 过滤器的原因。我也只想输出整个字符串的 50 个字符

50 个字符的切片有效,但他仍然显示&lt;p&gt;, .. 标签。

现在当我这样做时:

<td>{{ object.content|raw  }}</td>

他显示没有&lt;p&gt; 标签的字符串。但是当我添加切片过滤器时它不起作用......我还尝试在输出之前设置一个变量,如下所示:

{% set rawcontent = object.content %}
<td>{{ rawcontent|slice(0, 50) ~ '...'  }}</td>

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

【问题讨论】:

  • 试试这个{{ rawcontent | striptags | slice(0, 50)
  • 有效!谢谢!您可以将其发布为答案吗?所以我可以批准吗?

标签: php symfony themes twig


【解决方案1】:

此处应使用striptags 而不是raw

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

fiddle

【讨论】:

  • 另请注意,如果您希望 HTML 特殊字符正确显示,请将所有内容包裹在“原始”-> (object.content|striptags|slice(0, 50))|raw
【解决方案2】:

过滤器专用于这种行为:truncate() 它已禁用,但您可以激活它:

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

你可以这样使用它:

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

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

  1. 您删除标签是为了注意使用“striptags”应用它
  2. 您将 '&eacute' 等 html 实体解释为 'raw'
  3. 你可以计算和截断你的字符串的实际大小;)

    {% 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 }}

希望对您有所帮助...

【讨论】:

    【解决方案3】:

    我尝试了 Max Lipsky 的代码,然后我注意到它不适用于像 &amp;atilde; 这样的字符,然后我对其进行了一些修改,现在它似乎可以正常工作了

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

    【讨论】:

      【解决方案4】:

      我尝试过以各种组合方式使用“raw”、“slice”和“~”。它不能正确地协同工作(以及“striptags”)。您只能同时使用“raw”和“slice”。

      所以我找到了其他方法(看起来不好,但它有效):

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

      【讨论】:

        猜你喜欢
        • 2014-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-16
        • 2014-08-24
        • 2018-01-04
        • 2020-12-23
        相关资源
        最近更新 更多