Twig扩展缩短文本


Twig extensions for shortening text?

我正在寻找的是限制输出而不破坏标记的东西。假设我有一些内容例如来自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>

有什么好主意吗?

您应该尝试使用twig的扩展来截断twig &Symfony2 .

你的文本在html中,所以首先使用"striptags"过滤器获得纯文本,然后应用"truncate"过滤器。

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

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

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

or

// 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 -设置第三个参数,如果你想使用自己的分隔符而不是"…"

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

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

如果您确定它以<p>开始并以</p>结束,则使用以下命令:

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

如果你想在你的输出中找到并替换一些东西,你可以

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