Два варианта макроса, применять в шаблоне 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>
';
}Знаю, "грязно", скрипты можно вынести и т.п.
Но это черновик, рабочая запись, не более :)


Оставить комментарий