
Comparing changes: https://github.com/smarty-php/smarty/compare/v4.3.1...v4.4.1 It is noticeable that Smarty 4.3.1 does not officially support PHP 8.3. Is only supported with 4.4.0. Remark: During tests with Smarty 4.5.1, it was noticed that the following warning occurs: Deprecated: Using the unregistered function "function_exists" in a template is deprecated and will be removed in a future version. Use Smarty::registerPlugin to explicitly register a custom modifier. As of Smarty 5.X.X, templates must be revised again. The Smarty release 5.0.2 is already officially available. However, integration into FlatPress is not entirely trivial.
63 lines
2.2 KiB
PHP
63 lines
2.2 KiB
PHP
<?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;
|
|
}
|