用于缩短文本的Twig扩展名?

时间:2014-03-10 16:23:16

标签: php symfony twig word-wrap

我正在寻找的是在不破坏标签的情况下限制输出的东西。假设我有一些内容,例如来自FCK / MCE:

<p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum  </p>

<p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem </p>

<p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem </p>

现在举例来说,如果我做了类似{{ output|raw[:10] ~ '...' }}的事情,我会得到:

<p>lorem i...

但我希望得到:

<p>lorem i...</p>

任何想法如何实现这一目标?

2 个答案:

答案 0 :(得分:2)

你应该尝试使用twig的扩展来截断Twig&amp;中的文本。 Symfony2中。

您的文字是html,所以首先使用&#34; striptags&#34;过滤然后应用&#34;截断&#34;树枝过滤器。

<p>{{ output|striptags|truncate(50, true) }}</p>

但首先必须启用Twig-Text-Extension,如下所示

$twig->addExtension(new Twig_Extensions_Extension_Text());

或在symfony2

// app/config/config.yml
services:
    twig.extension.text:
        class: Twig_Extensions_Extension_Text
        tags:
            - { name: twig.extension }

以下是截断过滤器的可用选项

1 - 仅截断

<p>{{ output|striptags|truncate(50) }}</p>

2 - 如果要保留整个单词,请设置第二个参数。

<p>{{ output|striptags|truncate(50, true) }}</p>

3 - 如果你想使用你自己的分隔符而不是&#34; ...&#34;设置第三个参数。

<p>{{ output|striptags|truncate(50, true, ".........") }}</p>

有关twig文字扩展名的更多详细信息,请访问http://twig.sensiolabs.org/doc/extensions/text.html

答案 1 :(得分:0)

如果您确定它以<p>开头并以</p>结尾,请使用此字段:

{{ output|raw[:10] ~ '...' }}</p>

如果您想在输出中找到并替换某些内容,可以

<p>{{ (output|replace({'<p>': '', '</p>': ''}))|raw[:10] ~ '...' }}</p>