Кастомный макрос разрезания текста на тизер и полный текст в 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 цифр
                                                                   
88 ad888888b, ,d8 ad88888ba ad888888b,
,d88 d8" "88 ,d888 d8" "8b d8" "88
888888 a8P ,d8" 88 Y8a a8P a8P
88 aad8" ,d8" 88 "Y8aaa8P" ,d8P"
88 ""Y8, ,d8" 88 ,d8"""8b, a8P"
88 "8b 8888888888888 d8" "8b a8P'
88 Y8, a88 88 Y8a a8P d8"
88 "Y888888P' 88 "Y88888P" 88888888888

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