1

我正在尝试根据标题的总字符数找到一种在特定数量的单词之后包装长标题的方法。我的目的是使换行文本的底线比顶线长,以增加可读性。

我想使用 Smarty 查找标题的字符数,然后根据默认字体大小和包含元素的宽度决定第一行的长度。但我不是编码员,也不知道制作数组、foreach 循环、迭代计数和其他可能需要的东西的最佳方法。

我基本上是在尝试:

  1. 使用查找标题的总字符数{$item.name|count_characters:true}

  2. 如果总字符数介于 60 到 100 个字符之间,请在第一个超过 30 个字符的单词末尾添加一个 br 标记。

4

1 回答 1

2

我相信你可以用register_modifier()做到这一点。基本上,您编写一个 php 函数来插入标签,然后将其注册为修饰符。完成后,像使用其他修饰符一样在 smarty 中使用它,即:

{$variable|break_title}

一般来说,最好不要在 smarty 模板中进行复杂的格式化。模板越接近原版 html,事情就越干净。

可能的实现:

function break_title($title) {
   return wordwrap($title, 59, '<br />\n');
}

/* later */
$smarty->register_modifier('break_title', 'break_title');

如果要考虑字体大小,可以设置一个全局配置变量,指示要中断的字符数。

编辑:正如评论者所提到的,如果有一个现有的 php 函数可以满足您的需求,您可以在不注册该函数的情况下访问它:

{$variable|wordwrap:59:"<br />\n"}
于 2009-02-18T00:35:43.527 回答