php - 如何在 Twig 中显示 HTML,同时仍然修剪显示内容的长度

标签 php html text twig

我在一个 Twig 页面中显示了一个富文本 block :

{{ log.entry | raw }}

这会以富文本格式显示它,但是我以前只显示它的前 50 个字符

{{ log.entry[:50] ~ '...'}}

当我以下列任一格式组合两者时:

{{ log.entry[:50] ~ '...' | raw }}


{{ log.entry | raw [:50] ~ '...'}}

它以非 html 格式的方式显示它。关于如何使用 twig 以富文本格式显示大约 50 个字符的文本,有什么想法吗?

最佳答案

Twig 只是一个模板引擎,它不会做你想做的事。您需要做的是更改您提供给它的数据。

假设Log.entry是一个返回整个日志字符串的方法,你可以创建一个类似的方法,比方说 Log.entry_50在遇到第一个结束标记之前返回最少 50 个字符。 (假设您希望能够显示整个字符串,而不仅仅是前 50 个字符)

方便的假设:所有结束标签都是相同的,比方说 </X> .在你的方法中 entry_50 , 从 entry 中获取字符串并执行以下操作:

// assuming $entry holds the entire string 
$closing_tag = '</X>';
$end = strpos($entry, $closing_tag, 49) + 4; //add 4 because you want to include te entire closing tag
return substr($entry,0,$end);

现在做 {{ Log.entry_50 |原始 }} 在你的 Twig 模板中。

不太方便的假设:

这里我假设并非所有的结束标签都是相同的,但它们都具有 </*> 的形式.

// assuming $entry holds the entire string
$closing_tag_beginning = '</';
$closing_tag_end = '>';
$end_start = strpos($entry, $closing_tag_beginning, 49);
$end_end = strpos($entry, $closing_tag_end, $end_start); 
return substr($entry,0,$end_end);

当然,如果Log.entry,解决方案会略有不同。是一个变量,但在这种情况下只需添加包含上述解决方案的方法。

关于php - 如何在 Twig 中显示 HTML,同时仍然修剪显示内容的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27315261/

相关文章:

php - 如何为每个图像生成一个下载按钮

javascript - 如何保持焦点按钮和发送按钮焦点在表单上?

html - HTML/CSS 中的垂直自动换行

css - tspan元素的背景色

r - 使用 dplyr 中的列表列函数进行变异

javascript - 大尺寸图像在 jcrop 中无法正确裁剪

php - 有没有办法增加 PHP 的 DOMDocument formatOutput 属性的缩进大小?

javascript - 使用 blob :https://example 获取视频直接 url 或文件

jquery - 在 CSS 中隐藏 Div 容器

python - 有没有好的网页摘要器?