Created
December 24, 2009 05:58
-
-
Save sotarok/263046 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| /** | |
| * Smarty plugin | |
| * | |
| * @package Smarty | |
| * @subpackage PluginsModifier | |
| */ | |
| /** | |
| * Smarty truncate modifier plugin | |
| * | |
| * Type: modifier<br> | |
| * Name: truncate<br> | |
| * 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 http://smarty.php.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 lenght 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) | |
| return ''; | |
| if (is_callable('mb_strlen')) { | |
| if (mb_strlen($string) > $length) { | |
| $length -= min($length, mb_strlen($etc)); | |
| if (!$break_words && !$middle) { | |
| $string = mb_ereg_replace('/\s+?(\S+)?$/', '', mb_substr($string, 0, $length + 1), 'p'); | |
| } | |
| if (!$middle) { | |
| return mb_substr($string, 0, $length) . $etc; | |
| } else { | |
| return mb_substr($string, 0, $length / 2) . $etc . mb_substr($string, - $length / 2); | |
| } | |
| } else { | |
| return $string; | |
| } | |
| } else { | |
| if (strlen($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; | |
| } else { | |
| return substr($string, 0, $length / 2) . $etc . substr($string, - $length / 2); | |
| } | |
| } else { | |
| return $string; | |
| } | |
| } | |
| } | |
| ?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment