2014-12-05 86 views
2

我使用的显示树枝页面内丰富的文本块长度:如何显示在树枝HTML,同时仍微调所显示

{{ log.entry | raw }} 

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

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

显示的这个前50个字符当我在任一以下格式二者结合起来:

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


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

它以非html格式的方式显示它。有关如何使用树枝以其丰富文本格式显示约50个字符的文本的想法?

+0

什么是*富文本*?它是与HTML标签的文本?如果第50个字符位于HTML标签的中间并且将其切断,该怎么办?这不是一个简单的问题。 – 2014-12-05 23:02:40

+0

是在这种情况下富文本包含HTML标记,是的,我意识到我面临停止在标签中间的问题,但这就是为什么我试图接触到更有经验的树枝或PHP用户:) – Jacob 2014-12-06 08:48:05

回答

1

树枝只是一个模板引擎,它不会做你想要的。你需要做的是改变你喂养它的数据。

假设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 |原始}}在你的树枝模板。

有点不方便的假设:

在这里,我将承担所有未关闭标签相同,但都具有</*>形式。

// 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); 

Ofcourse这将是一个稍微不同的解决方案,如果Log.entry是可变的,但在这种情况下,只添加了结合上述溶液中的方法。

+0

谢谢,经过探索后,我得出结论,PHP将不得不被使用。很多腿伤心地工作,但仍然是一个解决方案。 – Jacob 2014-12-15 14:15:28