UMIhelp

Разработка сайта на UMI.CMS => Шаблоны TPL => Тема начата: john от 18 Февраля 2013, 00:02:19

Название: Как сделать ограничение вывода слов
Отправлено: john от 18 Февраля 2013, 00:02:19
%data getPropertyGroup(%id%, 'text', 'gal_catalog_preview')%
Вывожу макросом поле с текстом, а как ограничить вывод слов например до 70 или вывод символов?
Название: Re:Как сделать ограничение вывода слов
Отправлено: john от 19 Февраля 2013, 20:07:16
Хорошо, а если в админке, в шаблоне данных создаем поле текстовое, как его можно ограничить?
Название: Re:Как сделать ограничение вывода слов
Отправлено: Vladimir от 19 Февраля 2013, 20:44:36
Для вывода в клиентской части это макрос 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, это работает в другом движке; для ЮМИ может потребоваться  заменить функцию подсчтета длины строки на многобайтовую.
Название: Re:Как сделать ограничение вывода слов
Отправлено: john от 19 Февраля 2013, 23:11:45
Ок, где прописать код понятно.
Правильно я понимаю? его потом необходимо вызвать в файле например
/tpl/data/preview.tpl
например
 $FORMS['%custom smartSubstring ($string)%'] = <<<END
            %value%
END;
Правильно?
Название: Re:Как сделать ограничение вывода слов
Отправлено: admin от 20 Февраля 2013, 10:31:32
не совсем макросу надо передать значение поля, так что это будет выглядеть примерно так

$FORMS['text'] = <<<END
Полное содержимое текстового поля: %value%<br/>
Частичное содержимое : %custom smartSubstring (%value%,10)%

END;