Кастомный макрос разрезания текста на тизер и полный текст в UMI.CMS

Два варианта макроса, применять в шаблоне 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;">&hellip;</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>
';
        }

Знаю, "грязно", скрипты можно вынести и т.п.
Но это черновик, рабочая запись, не более :)

Метки:

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

Содержание этого поля является приватным и не предназначено к показу. Если есть аккаунт Gravatar, то отображается глобальный аватар.

Подробнее о форматировании

КАПЧА
А ты не робот? Введи 5 цифр
                                                             
888888888888 88 ad888888b, ad888888b, 88
,8P' ,d88 d8" "88 d8" "88 ,d88
d8" 888888 a8P a8P 888888
,8P' 88 ,d8P" aad8" 88
d8" 88 a8P" ""Y8, 88
,8P' 88 a8P' "8b 88
d8" 88 d8" Y8, a88 88
8P' 88 88888888888 "Y888888P' 88

Enter the code depicted in ASCII art style.
To prevent automated spam submissions leave this field empty.