Commit | Line | Data |
---|---|---|
e586807d H |
1 | <?php |
2 | /** | |
3 | * Smarty plugin | |
4 | * @package Smarty | |
5 | * @subpackage plugins | |
6 | */ | |
7 | ||
8 | ||
9 | /** | |
10 | * Smarty truncate modifier plugin | |
11 | * | |
12 | * Type: modifier<br> | |
13 | * Name: truncate<br> | |
14 | * Purpose: Truncate a string to a certain length if necessary, | |
15 | * optionally splitting in the middle of a word, and | |
b42b2bf9 | 16 | * appending the $etc string or inserting $etc into the middle. |
e586807d H |
17 | * @link http://smarty.php.net/manual/en/language.modifier.truncate.php |
18 | * truncate (Smarty online manual) | |
19 | * @param string | |
20 | * @param integer | |
21 | * @param string | |
22 | * @param boolean | |
b42b2bf9 | 23 | * @param boolean |
e586807d H |
24 | * @return string |
25 | */ | |
26 | function smarty_modifier_truncate($string, $length = 80, $etc = '...', | |
b42b2bf9 | 27 | $break_words = false, $middle = false) |
e586807d H |
28 | { |
29 | if ($length == 0) | |
30 | return ''; | |
31 | ||
32 | if (strlen($string) > $length) { | |
33 | $length -= strlen($etc); | |
b42b2bf9 H |
34 | if (!$break_words && !$middle) { |
35 | $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length+1)); | |
36 | } | |
37 | if(!$middle) { | |
38 | return substr($string, 0, $length).$etc; | |
39 | } else { | |
40 | return substr($string, 0, $length/2) . $etc . substr($string, -$length/2); | |
41 | } | |
42 | } else { | |
e586807d | 43 | return $string; |
b42b2bf9 | 44 | } |
e586807d H |
45 | } |
46 | ||
47 | /* vim: set expandtab: */ | |
48 | ||
49 | ?> |