Для вывода в клиентской части это макрос system::smartSubstring($string, $max_length = 30)
Но вплоть до версии 2.8.5 он немного косячил из-за неверной работы substr с utf-8. Вы можете по аналогии написать свой макрос.
Имеется:
public function smartSubstring($string, $max_length = 30) {
if(!$max_length) $max_length = 30;
if(strlen($string) > ($max_length - 3)) {
return substr($string, 0, ($max_length - 3)) . "...";
} else {
return $string;
}
}
Я себе сделал
public static function smartSubstring($name, $count = 70){
$l = strlen($name);
if($l > $count) {
//разбиваем по словам
$array_words = explode(" ", $name);
$l = $name = '';
foreach($array_words as $word){
$name = $name.$word.' ';
$l = strlen($name);
if($l > $count){
$name = $name.'...';
break;
}
}
}
return $name;
}
Она производит разрвыв не где-попало, а по границе слова. Только не копируйте 1в1, это работает в другом движке; для ЮМИ может потребоваться заменить функцию подсчтета длины строки на многобайтовую.
Ок, где прописать код понятно.
Правильно я понимаю? его потом необходимо вызвать в файле например
/tpl/data/preview.tpl
например
$FORMS['%custom smartSubstring ($string)%'] = <<<END
%value%
END;
Правильно?
не совсем макросу надо передать значение поля, так что это будет выглядеть примерно так
$FORMS['text'] = <<<END
Полное содержимое текстового поля: %value%<br/>
Частичное содержимое : %custom smartSubstring (%value%,10)%
END;