Smarty更智能的自动换行?

时间:2009-02-17 23:58:51

标签: php smarty word-wrap

我试图找到一种方法,根据标题的总字符数,在特定数量的单词后包装一个长标题。我的目的是使包装文本的底线比顶行更长,以提高可读性。

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

我基本上是想:

  1. 使用{$item.name|count_characters:true}

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

1 个答案:

答案 0 :(得分:2)

我相信您可以使用register_modifier()执行此操作。基本上,你编写一个php函数来插入标记,然后将其注册为修饰符。完成后,像其他修饰符一样使用它,即:

{$variable|break_title}

一般来说,最好不要在智能模板中进行复杂的格式化。你的模板越接近vanilla 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"}