| 
									
										
										
										
											2009-11-06 14:35:00 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							| 
									
										
										
										
											2010-07-07 16:34:06 +00:00
										 |  |  |  * Smarty plugin | 
					
						
							| 
									
										
										
										
											2010-08-17 15:39:51 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2014-06-06 02:40:04 +00:00
										 |  |  |  * @package    Smarty | 
					
						
							| 
									
										
										
										
											2010-07-07 16:34:06 +00:00
										 |  |  |  * @subpackage PluginsModifier | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2013-07-14 22:15:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-06 14:35:00 +00:00
										 |  |  | /** | 
					
						
							| 
									
										
										
										
											2010-07-07 16:34:06 +00:00
										 |  |  |  * 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. | 
					
						
							| 
									
										
										
										
											2013-07-14 22:15:45 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2014-06-06 02:40:04 +00:00
										 |  |  |  * @link   http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual) | 
					
						
							| 
									
										
										
										
											2013-07-14 22:15:45 +00:00
										 |  |  |  * @author Monte Ohrt <monte at ohrt dot com> | 
					
						
							| 
									
										
										
										
											2014-06-06 02:40:04 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |  * @param string  $string      input string | 
					
						
							|  |  |  |  * @param integer $length      length of truncated text | 
					
						
							|  |  |  |  * @param string  $etc         end string | 
					
						
							| 
									
										
										
										
											2010-07-07 16:34:06 +00:00
										 |  |  |  * @param boolean $break_words truncate at word boundary | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |  * @param boolean $middle      truncate in the middle of text | 
					
						
							| 
									
										
										
										
											2014-06-06 02:40:04 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2010-07-07 16:34:06 +00:00
										 |  |  |  * @return string truncated string | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2013-07-14 22:15:45 +00:00
										 |  |  | function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2014-06-06 02:40:04 +00:00
										 |  |  |     if ($length == 0) { | 
					
						
							| 
									
										
										
										
											2009-11-06 14:35:00 +00:00
										 |  |  |         return ''; | 
					
						
							| 
									
										
										
										
											2014-06-06 02:40:04 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-11-06 14:35:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-18 18:20:09 +00:00
										 |  |  |     if (Smarty::$_MBSTRING) { | 
					
						
							|  |  |  |         if (mb_strlen($string, Smarty::$_CHARSET) > $length) { | 
					
						
							|  |  |  |             $length -= min($length, mb_strlen($etc, Smarty::$_CHARSET)); | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |             if (!$break_words && !$middle) { | 
					
						
							| 
									
										
										
										
											2011-12-18 18:48:07 +00:00
										 |  |  |                 $string = preg_replace('/\s+?(\S+)?$/' . Smarty::$_UTF8_MODIFIER, '', mb_substr($string, 0, $length + 1, Smarty::$_CHARSET)); | 
					
						
							| 
									
										
										
										
											2013-07-14 22:15:45 +00:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |             if (!$middle) { | 
					
						
							| 
									
										
										
										
											2011-12-18 18:20:09 +00:00
										 |  |  |                 return mb_substr($string, 0, $length, Smarty::$_CHARSET) . $etc; | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2013-07-14 22:15:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-18 18:20:09 +00:00
										 |  |  |             return mb_substr($string, 0, $length / 2, Smarty::$_CHARSET) . $etc . mb_substr($string, - $length / 2, $length, Smarty::$_CHARSET); | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2013-07-14 22:15:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |         return $string; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2013-07-14 22:15:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |     // no MBString fallback
 | 
					
						
							| 
									
										
										
										
											2011-10-01 18:47:56 +00:00
										 |  |  |     if (isset($string[$length])) { | 
					
						
							| 
									
										
										
										
											2010-07-07 16:34:06 +00:00
										 |  |  |         $length -= min($length, strlen($etc)); | 
					
						
							|  |  |  |         if (!$break_words && !$middle) { | 
					
						
							|  |  |  |             $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length + 1)); | 
					
						
							| 
									
										
										
										
											2013-07-14 22:15:45 +00:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-07-07 16:34:06 +00:00
										 |  |  |         if (!$middle) { | 
					
						
							|  |  |  |             return substr($string, 0, $length) . $etc; | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2013-07-14 22:15:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |         return substr($string, 0, $length / 2) . $etc . substr($string, - $length / 2); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-11-06 14:35:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-14 22:15:45 +00:00
										 |  |  |     return $string; | 
					
						
							|  |  |  | } |