forked from bruno/pabx-app
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
2.2 KiB
62 lines
2.2 KiB
<?php |
|
/** |
|
* Smarty plugin |
|
* |
|
* @package Smarty |
|
* @subpackage PluginsModifier |
|
*/ |
|
/** |
|
* Smarty truncate modifier plugin |
|
* Type: modifier |
|
* Name: truncate |
|
* Purpose: Truncate a string to a certain length if necessary, |
|
* optionally splitting in the middle of a word, and |
|
* appending the $etc string or inserting $etc into the middle. |
|
* |
|
* @link https://www.smarty.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual) |
|
* @author Monte Ohrt <monte at ohrt dot com> |
|
* |
|
* @param string $string input string |
|
* @param integer $length length of truncated text |
|
* @param string $etc end string |
|
* @param boolean $break_words truncate at word boundary |
|
* @param boolean $middle truncate in the middle of text |
|
* |
|
* @return string truncated string |
|
*/ |
|
function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false) |
|
{ |
|
if ($length === 0 || $string === null) { |
|
return ''; |
|
} |
|
if (Smarty::$_MBSTRING) { |
|
if (mb_strlen($string, Smarty::$_CHARSET) > $length) { |
|
$length -= min($length, mb_strlen($etc, Smarty::$_CHARSET)); |
|
if (!$break_words && !$middle) { |
|
$string = preg_replace( |
|
'/\s+?(\S+)?$/' . Smarty::$_UTF8_MODIFIER, |
|
'', |
|
mb_substr($string, 0, $length + 1, Smarty::$_CHARSET) |
|
); |
|
} |
|
if (!$middle) { |
|
return mb_substr($string, 0, $length, Smarty::$_CHARSET) . $etc; |
|
} |
|
return mb_substr($string, 0, intval($length / 2), Smarty::$_CHARSET) . $etc . |
|
mb_substr($string, -intval($length / 2), $length, Smarty::$_CHARSET); |
|
} |
|
return $string; |
|
} |
|
// no MBString fallback |
|
if (isset($string[ $length ])) { |
|
$length -= min($length, strlen($etc)); |
|
if (!$break_words && !$middle) { |
|
$string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length + 1)); |
|
} |
|
if (!$middle) { |
|
return substr($string, 0, $length) . $etc; |
|
} |
|
return substr($string, 0, intval($length / 2)) . $etc . substr($string, -intval($length / 2)); |
|
} |
|
return $string; |
|
}
|
|
|