From 4ff37a292bbc56b0db71c690da97428a310ccc96 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim=20D=C3=BCsterhus?= Date: Sat, 25 Aug 2012 17:38:24 +0200 Subject: [PATCH] Adding StringUtil::truncate() --- .../TruncateModifierTemplatePlugin.class.php | 22 ++------------- .../files/lib/util/StringUtil.class.php | 28 +++++++++++++++++++ 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/wcfsetup/install/files/lib/system/template/plugin/TruncateModifierTemplatePlugin.class.php b/wcfsetup/install/files/lib/system/template/plugin/TruncateModifierTemplatePlugin.class.php index ecbb52f5b1..2dfbdd82e2 100644 --- a/wcfsetup/install/files/lib/system/template/plugin/TruncateModifierTemplatePlugin.class.php +++ b/wcfsetup/install/files/lib/system/template/plugin/TruncateModifierTemplatePlugin.class.php @@ -7,7 +7,7 @@ use wcf\util\StringUtil; * The 'truncate' modifier truncates a string. * * Usage: - * {$foo|truncate:35:'...'} + * {$foo|truncate:35:' and more'} * * @author Marcel Werk * @copyright 2001-2011 WoltLab GmbH @@ -23,7 +23,7 @@ class TruncateModifierTemplatePlugin implements IModifierTemplatePlugin { public function execute($tagArgs, TemplateEngine $tplObj) { // default values $length = 80; - $etc = '...'; + $etc = '…'; $breakWords = false; // get values @@ -32,22 +32,6 @@ class TruncateModifierTemplatePlugin implements IModifierTemplatePlugin { if (isset($tagArgs[2])) $etc = $tagArgs[2]; if (isset($tagArgs[3])) $breakWords = $tagArgs[3]; - // execute plugin - if ($length == 0) { - return ''; - } - - if (StringUtil::length($string) > $length) { - $length -= StringUtil::length($etc); - - if (!$breakWords) { - $string = preg_replace('/\s+?(\S+)?$/', '', StringUtil::substring($string, 0, $length + 1)); - } - - return StringUtil::substring($string, 0, $length).$etc; - } - else { - return $string; - } + return StringUtil::truncate($string, $length, $etc, $breakWords); } } diff --git a/wcfsetup/install/files/lib/util/StringUtil.class.php b/wcfsetup/install/files/lib/util/StringUtil.class.php index 0278114ce1..c9438297a3 100644 --- a/wcfsetup/install/files/lib/util/StringUtil.class.php +++ b/wcfsetup/install/files/lib/util/StringUtil.class.php @@ -542,6 +542,34 @@ final class StringUtil { return true; } + /** + * Truncates the given string to a certain number of characters. + * + * @param string $string + * @param integer $length + * @param string $etc string to append when $string is truncated + * @param boolean $breakWords should words be broken in the middle + * @return string truncated string + */ + public static function truncate($string, $length = 80, $etc = '…', $breakWords = false) { + if ($length == 0) { + return ''; + } + + if (self::length($string) > $length) { + $length -= self::length($etc); + + if (!$breakWords) { + $string = preg_replace('/\\s+?(\\S+)?$/', '', self::substring($string, 0, $length + 1)); + } + + return self::substring($string, 0, $length).$etc; + } + else { + return $string; + } + } + /** * Splits given string into smaller chunks. * -- 2.20.1