Кастомный макрос разрезания текста на тизер и полный текст в 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 ad888888b, ad8888ba, ,d8 ad8888ba,
,8P' d8" "88 8P' "Y8 ,d888 8P' "Y8
d8" a8P d8 ,d8" 88 d8
,8P' ,d8P" 88,dd888bb, ,d8" 88 88,dd888bb,
d8" a8P" 88P' `8b ,d8" 88 88P' `8b
,8P' a8P' 88 d8 8888888888888 88 d8
d8" d8" 88a a8P 88 88a a8P
8P' 88888888888 "Y88888P" 88 "Y88888P"

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