Два варианта макроса, применять в шаблоне tpl так, например:
%custom cutDescription(%pid%, 'opisanie')%
Вариант 1: реально разрезание с убиранием тегов и ограничением 300 символов (потом ещё ищет пробел с конца и оставляет только до него):
public function cutDescription($elementId,$groupName){ $hierarchy = umiHierarchy::getInstance(); if (!$hElement = $hierarchy->getElement($elementId)) return; $typeId = $hElement->getObjectTypeId(); $objectType = umiObjectTypesCollection::getInstance()->getType($typeId); if (!$objectGroup = $objectType->getFieldsGroupByName($groupName)) return; $fields = $objectGroup->getFields(); $text=''; foreach($fields as $fieldsObject) { $value = $hElement->getValue($fieldsObject->getName()); if (!$value) continue; $text.=$value; } if (!$text) return ''; $cut=substr(strip_tags($text),0,300); $cut=substr($cut,0,strrpos($cut,' ')); return '<div class="less_text"><p>'. $cut. ' <a class="show_less" href="#" onclick="$(\'.less_text\').hide(); $(\'.full_text\').slideDown(); ; return false;">…</a> <a class="show_more" href="#" onclick="$(\'.less_text\').hide(); $(\'.full_text\').slideDown(); ; return false;">читать далее</a> </p></div> <div class="full_text" style="display:none;">'. $text. '<a class="show_less" href="#" onclick="$(\'.full_text\').slideUp(); $(\'.less_text\').show(); ; return false;">^ свернуть описание</a> </div>'; }
Вариант 2 (более предпочтительный) - изменение высоты блока с помощью jquery/css:
public function cutDescription($elementId,$groupName){ $hierarchy = umiHierarchy::getInstance(); if (!$hElement = $hierarchy->getElement($elementId)) return; $typeId = $hElement->getObjectTypeId(); $objectType = umiObjectTypesCollection::getInstance()->getType($typeId); if (!$objectGroup = $objectType->getFieldsGroupByName($groupName)) return; $fields = $objectGroup->getFields(); $text=''; foreach($fields as $fieldsObject) { $value = $hElement->getValue($fieldsObject->getName()); if (!$value) continue; $text.=$value; } if (!$text) return ''; return '<div id="full_text" style="height:45px;overflow:hidden;">'. $text. '</div> <a id="show_more" class="show_less" href="#" onclick="$(\'#show_more\').hide(); $(\'#show_less\').show(); var currentHeight = $(\'#full_text\').height(); $(\'#full_text\').css(\'height\', \'auto\'); var height = $(\'#full_text\').height(); $(\'#full_text\').css(\'height\', currentHeight + \'px\'); $(\'#full_text\').animate({ height: height }); return false;">читать далее</a> <a id="show_less" class="show_less" href="#" style="display:none;" onclick="$(\'#show_less\').hide(); $(\'#show_more\').show(); $(\'#full_text\').animate({ height: \'45px\' }); return false;">^ свернуть описание</a> '; }
Знаю, "грязно", скрипты можно вынести и т.п.
Но это черновик, рабочая запись, не более :)
Оставить комментарий