Кастомный макрос разрезания текста на тизер и полный текст в 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 цифр
                                                                      
ad888888b, ad88888ba ad888888b, ad88888ba ad88888ba
d8" "88 d8" "88 d8" "88 d8" "88 d8" "88
a8P 8P 88 a8P 8P 88 8P 88
aad8" Y8, ,d88 aad8" Y8, ,d88 Y8, ,d88
""Y8, "PPPPPP"88 ""Y8, "PPPPPP"88 "PPPPPP"88
"8b 8P "8b 8P 8P
Y8, a88 8b, a8P Y8, a88 8b, a8P 8b, a8P
"Y888888P' `"Y8888P' "Y888888P' `"Y8888P' `"Y8888P'

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