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