Скрыть часть описания страницы категории товаров под спойлер

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

Евгений M
Евгений M
Возраст: 36
Репутация: 3
Сообщения: 59
Зарегистрирован: 15.12.2018
С нами: 3 года 11 месяцев
Откуда: Киев

Сообщение #1 Евгений » 02.01.2022, 15:00

Друзья, подсмотрел в версии 4 возможность скрытия части описания на странице категории товаров. Довольно удобная функция, если описание слишком длинное.
Решил реализовать эту фитчу в V 2.3.5

В products.tpl блок вывода описания оформил следующим способом:

Код: Выделить всё

<div class="boxed boxed--big">
                    <div class="">
                        <div class="fn_readmore">
                            <div class="block__description">
                {$category->description}
                         </div>
                        </div>
                    </div>
                </div>

В style.css добавил следующие стили:

Код: Выделить всё

.fn_readmore + [data-readmore-toggle],
.fn_readmore[data-readmore] {
    display: inline-block;
    width: auto;
    position: relative;
}
.fn_readmore[aria-expanded="false"]::after {
    content: "";
    position: absolute;
    bottom: -10px;
    left: 0;
    width: 100%;
    height: 4em;
    background: -moz-linear-gradient(top,#fff0 0,#fff 100%);
    background: -webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(255,255,255,0)),color-stop(100%,#fff));
    background: -webkit-linear-gradient(top,rgba(255,255,255,0) 0,#fff 100%);
    background: -o-linear-gradient(top,rgba(255,255,255,0) 0,#fff 100%);
    background: -ms-linear-gradient(top,rgba(255,255,255,0) 0,#fff 100%);
    background: linear-gradient(top,rgba(255,255,255,0) 0,#fff 100%);
}
.fn_readmore[data-readmore] {
    transition: height 500ms;
    overflow: hidden;
    max-height: 215px;
    display: block;
    width: 100%;
}
.fn_readmore + [data-readmore-toggle]{
    margin-top: 13px;
    text-decoration: none;
    transition: all 0.3s;
}
.fn_readmore + [data-readmore-toggle]:hover,
.fn_readmore + [data-readmore-toggle]:focus{
    color: var(--okay-button-text);
    text-decoration: none;
}
.fn_readmore + [data-readmore-toggle] span{
    color: var(--okay-button-color);
    background: transparent;
    border-color:  var(--okay-button-color);
    border: 1px solid;
    border-radius: 3px;
    padding: 1px 30px;
    font-size: 18px;
    line-height: 1;
    display: inline-block;
    transition: all .3s;
    font-weight: 500;
}
.fn_readmore + [data-readmore-toggle]:hover span{
    color: #c5530c;
    background:#c5530c;


Также в 4-й версии нашел такой кусок кода, но пока не понял как его подключить.

Код: Выделить всё

if($('.fn_readmore').length){$('.fn_readmore').readmore({collapsedHeight:215,lessLink:'<a href="#"><span>-</span></a>',moreLink:'<a href="#"><span>+</span></a>',afterToggle:function(trigger,element,expanded){if(!expanded){$('html, body').animate({scrollTop:element.offset().top-100},{duration:300})}}})}


Подскажите пожалуйста куда и как его вставить в версии 2,3,5

makki M
makki M
Репутация: 195
Сообщения: 680
Зарегистрирован: 12.08.2016
С нами: 6 лет 3 месяца
Откуда: Киев
Сайт

Сообщение #2 makki » 02.01.2022, 16:01

код js в файле okay.js
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

Евгений M
Евгений M
Возраст: 36
Репутация: 3
Сообщения: 59
Зарегистрирован: 15.12.2018
С нами: 3 года 11 месяцев
Откуда: Киев

Сообщение #3 Евгений » 02.01.2022, 16:42

При обычном копировании кода в okay.js ничего не меняется. Текст отображается полностью и кнопка "подробнее" не появляется. Подскажите пожалуйста что подправить.

Master
Master
Репутация: 24
Сообщения: 72
Зарегистрирован: 25.01.2016
С нами: 6 лет 10 месяцев

Сообщение #4 Master » 02.01.2022, 19:09

Нужно подключить скрипт readmore.min.js
Он находится в папке design/okay_shop/js
Перетяните его из новой версии в вашу тему в папку js

Затем в версии 2.3.5 подключите его в файле design/okay_shop/html/index.tpl где-нибудь внизу, где скрипты подключаются
<script src="design/{$settings->theme|escape}/js/readmore.min.js{if $js_version}?v={$js_version}{/if}" defer></script>

и в файле design/okay_shop/js/okay.js запустите скрипт readmore

Код: Выделить всё

if( $('.fn_readmore').length ) {
        $('.fn_readmore').readmore({
            collapsedHeight: 215,
            lessLink: '<a href="#"><span>-</span></a>',
            moreLink: '<a href="#"><span>+</span></a>',
            afterToggle: function(trigger, element, expanded) {
                if(! expanded) { // The "Close" link was clicked
                  $('html, body').animate( { scrollTop: element.offset().top - 100 }, {duration: 300 } );
                }
              }
        });
    }

Евгений M
Евгений M
Возраст: 36
Репутация: 3
Сообщения: 59
Зарегистрирован: 15.12.2018
С нами: 3 года 11 месяцев
Откуда: Киев

Сообщение #5 Евгений » 03.01.2022, 11:55

Master писал(а):Нужно подключить скрипт readmore.min.js
Он находится в папке design/okay_shop/js
Перетяните его из новой версии в вашу тему в папку js

Затем в версии 2.3.5 подключите его в файле design/okay_shop/html/index.tpl где-нибудь внизу, где скрипты подключаются
<script src="design/{$settings->theme|escape}/js/readmore.min.js{if $js_version}?v={$js_version}{/if}" defer></script>

и в файле design/okay_shop/js/okay.js запустите скрипт readmore

Код: Выделить всё

if( $('.fn_readmore').length ) {
        $('.fn_readmore').readmore({
            collapsedHeight: 215,
            lessLink: '<a href="#"><span>-</span></a>',
            moreLink: '<a href="#"><span>+</span></a>',
            afterToggle: function(trigger, element, expanded) {
                if(! expanded) { // The "Close" link was clicked
                  $('html, body').animate( { scrollTop: element.offset().top - 100 }, {duration: 300 } );
                }
              }
        });
    }

Спасибо, работает!


Вернуться в «Предложения по улучшению OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 1 гость