如何在小枝中显示HTML,同时仍然修剪所显示内容的长度

txu3uszq  于 2022-12-16  发布在  其他
关注(0)|答案(2)|浏览(101)

我使用以下代码在小枝页面中显示富文本块:

{{ log.entry | raw }}

这将以富文本格式显示它,但是我以前使用

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

当我以下列格式之一合并这两者时:

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

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

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

xdyibdwo

xdyibdwo1#

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| raw }}在您的小枝模板中。
不太方便的假设:
这里我假设不是所有的结束标记都相同,而是都具有</*>的形式。

// 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是一个变量,则解决方案会略有不同,但在这种情况下,只需添加包含上述解决方案的方法。

bkkx9g8r

bkkx9g8r2#

{{ (article.description |length > 50 ? article.description|slice(0, 50) ~ '...' : article.description) | raw }}

相关问题