1<?php 2// $Id$ 3 4/** 5 * Smarty plugin 6 * @package Smarty 7 * @subpackage plugins 8 */ 9 10/** 11 * Smarty truncate modifier plugin 12 * 13 * Type: modifier<br> 14 * Name: truncate<br> 15 * Purpose: Truncate a string to a certain length if necessary, 16 * optionally splitting in the middle of a word, and 17 * appending the $etc string or inserting $etc into the middle. 18 * @link http://smarty.php.net/manual/en/language.modifier.truncate.php 19 * truncate (Smarty online manual) 20 * @author Monte Ohrt <monte at ohrt dot com> 21 * @param string 22 * @param integer 23 * @param string 24 * @param boolean 25 * @param boolean 26 * @return string 27 */ 28function smarty_modifier_truncate( 29 $string, 30 $length = 80, 31 $etc = '...', 32 $break_words = false, 33 $middle = false 34) { 35 36 if ($length == 0) { 37 return ''; 38 } 39 40 $strlength = (function_exists('mb_strlen') ? 'mb_strlen' : 'strlen'); 41 if ($strlength($string) > $length) { 42 $length -= min($length, strlen($etc)); 43 if (function_exists('mb_substr')) { 44 $func = 'mb_substr'; 45 } else { 46 $func = 'substr'; 47 } 48 if (! $break_words && ! $middle) { 49 $string = preg_replace('/\s+?(\S+)?$/', '', $func($string, 0, $length + 1)); 50 } 51 if (! $middle) { 52 return $func($string, 0, $length) . $etc; 53 } else { 54 return $func($string, 0, $length / 2) . $etc . $func($string, -$length / 2); 55 } 56 } else { 57 return $string; 58 } 59} 60