Шаблон TESSA проблема с фильтром

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

Dmitriy-1975 M
Dmitriy-1975 M
Возраст: 47
Репутация: 0
Сообщения: 11
Зарегистрирован: 14.02.2021
С нами: 1 год 9 месяцев

Сообщение #1 Dmitriy-1975 » 29.09.2022, 11:49

Здравствуйте!
У меня есть шаблон TESSA. Купил его месяцев 8 назад, руки не доходили, установил систему версия 4.2.1 соответствующяя версии шаблона. Все вроде нормально кроме одного момента, криво работает фильтр по товарам, при попытке развернуть любой из фильтров "Смотреть все" перебрасывает на главную. В демоверсии шаблона проблема аналогичная. Куда копать?

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

Сообщение #2 Master » 29.09.2022, 17:59

script.tpl

Dmitriy-1975 M
Dmitriy-1975 M
Возраст: 47
Репутация: 0
Сообщения: 11
Зарегистрирован: 14.02.2021
С нами: 1 год 9 месяцев

Сообщение #3 Dmitriy-1975 » 29.09.2022, 18:33

Master писал(а):script.tpl
scripts.tpl - это имеется ввиду?
это из стандартного шаблона (В нем работает нормально):
/* Показать все в фильтрах по свойствам и в футере категории */
$( document ).on( 'click', '.fn_view_all', function(e) {
$(this).closest('.fn_view_content').toggleClass('opened');
$('.fn_view_all').not($(this)).html('{$lang->filter_view_show|escape}');
$('.fn_view_all').not($(this)).closest('.fn_view_content').removeClass('opened');
if ($(this).closest('.fn_view_content').hasClass('opened')) {
$(this).html('{$lang->filter_view_hide|escape}');
} else {
$(this).html('{$lang->filter_view_show|escape}');
}
return false;
});

А это из Tessa:
/* Показать все в фильтрах по свойствам и в футере категории */
$( document ).on( 'click', '.fn_view_all', function(e) {
$(this).closest('.fn_view_content').toggleClass('opened');
$('.fn_view_all').not($(this)).html('{$lang->filter_view_show|escape}');
$('.fn_view_all').not($(this)).closest('.fn_view_content').removeClass('opened');
if ($(this).closest('.fn_view_content').hasClass('opened')) {
$(this).html('{$lang->filter_view_hide|escape}');
} else {
$(this).html('{$lang->filter_view_show|escape}');
}
return false;
});

Они одинаковые. Или в другом месте искать?

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

Сообщение #4 Master » 30.09.2022, 04:23

У вас не работает весь код, что в файле scripts.tpl
Ищите причину почему не подключаются эти скрипты

Dmitriy-1975 M
Dmitriy-1975 M
Возраст: 47
Репутация: 0
Сообщения: 11
Зарегистрирован: 14.02.2021
С нами: 1 год 9 месяцев

Сообщение #5 Dmitriy-1975 » 30.09.2022, 18:26

Master писал(а):У вас не работает весь код, что в файле scripts.tpl
Ищите причину почему не подключаются эти скрипты
Спасибо огромное! Разобрался в файле scripts.tpl в 15 строке был лишний {/if} , хотя кажется что это не так, но без него заработало.

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

<script>

    {foreach $smarty.session.dynamic_js.js_vars as $var=>$value}
    okay.{$var} = {$value|escape};
    {/foreach}
   
    okay.max_order_amount = {$settings->max_order_amount|escape};

    /*Сброс фильтра*/
    {if $controller == 'ProductsController' || $controller == 'BrandController' || $controller == 'CategoryController'}
        $(document).on('click', '.fn_filter_reset', function () {
            var date = new Date(0);
            document.cookie = "price_filter=; path=/; expires=" + date.toUTCString();
        });
    {/if}

    {if $controller == 'CategoryController' && $settings->deferred_load_features}
   
            {if $settings->features_cache_ttl > 0}
            {literal}
            window.featuresCache = {
                /**
                 * timeout for cache in millis
                 * @type {number}
                 */
                timeout: {/literal}{($settings->features_cache_ttl*1000)|intval}{literal},
                DBVersion: 4,
       
                init: function () {
                    let openRequest = indexedDB.open("features_cache", this.DBVersion);
       
                    // создаем хранилище
                    openRequest.onupgradeneeded = function() {
                        let db = openRequest.result;
                        if (!db.objectStoreNames.contains('features_cache_store')) {
                            db.createObjectStore('features_cache_store', {keyPath: 'key'});
                        }
                    }
                    return openRequest;
                },
                remove: function (key) {
       
                    let openRequest = this.init();
                    openRequest.onsuccess = function() {
                        let db = openRequest.result;
                        let transaction = db.transaction("features_cache_store", "readwrite");
                        let cacheObject = transaction.objectStore("features_cache_store");
                        let request = cacheObject.delete(key);
                       
                        request.onsuccess = function () {
                           
                            if (request.result !== undefined) {
                                console.log('Remove cache for key: ' + key);
                                return true;
                            }
                        }
                    }
                },
                get: function (key) {
       
                    const timeout = this.timeout
       
                    return new Promise(function(resolve, reject) {
                        let openRequest = featuresCache.init();
                        openRequest.onsuccess = function() {
                            let db = openRequest.result;
                            let transaction = db.transaction("features_cache_store", "readonly");
                            // получить хранилище объектов для работы с ним
                            let cacheObject = transaction.objectStore("features_cache_store");
                            let request = cacheObject.get(key);
                            request.onsuccess = function () {
       
                                if (request.result !== undefined) {
       
                                    let currDate = new Date().getTime();
                                    if ((currDate - request.result.expires) > featuresCache.timeout) {
                                        featuresCache.remove(request.result.key);
                                        reject();
                                        return;
                                    }
                                    console.log('Getting in cache for key: ' + key + ' TTL:' + Math.ceil((timeout - (currDate - request.result.expires)) / 1000));
                                    resolve(request.result.data);
                                } else {
                                    reject();
                                }
                            }
                        }
       
                        openRequest.onerror = function(event) {
                            reject();
                        };
                       
                    });
                },
                set: function (key, cachedData) {
                    let openRequest = this.init();
                    openRequest.onsuccess = function() {
                        let db = openRequest.result;
                        let transaction = db.transaction("features_cache_store", "readwrite");
                        // получить хранилище объектов для работы с ним
                        let cacheObject = transaction.objectStore("features_cache_store");
       
                        let request = cacheObject.put({
                            key: key,
                            expires: new Date().getTime(),
                            data: cachedData
                        });
       
                        request.onsuccess = function() {
                            console.log("Setting in cache for key: ", key);
                        };
       
                    }
                },
                clearWrong: function () {
                    let currDate = new Date().getTime();
                    let openRequest = this.init();
                   
                    openRequest.onsuccess = function() {
                        let db = openRequest.result;
                        let transaction = db.transaction("features_cache_store", "readonly");
                        let cacheObject = transaction.objectStore("features_cache_store");
                        let request = cacheObject.getAll();
                       
                        request.onsuccess = function () {
                            if (request.result !== undefined) {
                                if (request.result.length) {
                                    for (let i = 0; i < request.result.length; i++) {
                                        if ((currDate - request.result[i].expires) > featuresCache.timeout) {
                                            featuresCache.remove(request.result[i].key);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            };
            {/literal}
       
            $(function() {
                console.log('Init script');
                window.featuresCache.clearWrong();
       
                if (window.featuresCache.timeout > 0) {
                    if (window.indexedDB) {
                        window.featuresCache.get('{$filterCacheKey|escape}').then(setFeaturesBlock).then(null, getAjaxFeatures);
                    } else {
                        console.warn('indexedDB not supported');
                        getAjaxFeatures();
                    }
                }
            });
            {else}
                $(function() {
                    getAjaxFeatures();
                });
            {/if}
       
            function getAjaxFeatures() {
                $.ajax({
                    url: '{url_generator route="category_features" url=$url filtersUrl=$filtersUrl absolute=true}',
                    dataType: 'json',
                    cache: true,
                    success: function (data) {
                        setFeaturesBlock(data);
                        {if $settings->features_cache_ttl > 0}
                            featuresCache.set('{$filterCacheKey|escape}', data);
                        {/if}
                    },
                });
            }
           
            function setFeaturesBlock(data) {
                $('.fn_features').html(data.features);
                $('.fn_selected_features').html(data.selected_features);
                price_slider_init();
                $(".lazy").each(function(){
                    let myLazyLoad = new LazyLoad({
                        elements_selector: ".lazy"
                    });
                });
            }
        {/if}
    {/if}


    /* Показать все в фильтрах по свойствам и в футере категории */
    $( document ).on( 'click', '.fn_view_all', function(e) {
        $(this).closest('.fn_view_content').toggleClass('opened');
        $('.fn_view_all').not($(this)).html('{$lang->filter_view_show|escape}');
        $('.fn_view_all').not($(this)).closest('.fn_view_content').removeClass('opened');
        if ($(this).closest('.fn_view_content').hasClass('opened')) {
            $(this).html('{$lang->filter_view_hide|escape}');
        } else {
            $(this).html('{$lang->filter_view_show|escape}');
        }
        return false;
    });

    /* Предзаказ */
    okay.is_preorder = {$settings->is_preorder|escape};

    /* Ошибка при отправке комментария в посте */
    {if $controller == 'BlogController' && $error}
        /* Переход по якорю к форме */
        $( window ).on( 'load', function() {
            location.href = location.href + '#fn_blog_comment';
            $( '#fn_blog_comment' ).trigger( 'submit' );
        } );
    {/if}

    {* Обратный звонок, отправка формы *}
    {if $call_sent}
        $( function() {
            $.fancybox.open( {
                src: '#fn_callback_sent',
                type : 'inline',
            } );
        } );
    {elseif $call_error}
        $(function() {
            $.fancybox.open({
                src: '#fn_callback',
                type : 'inline'
            });
        });
    {/if}

    {* Карточка товара, ошибка в форме *}
    {if $controller == 'ProductController' && $error}
        $( window ).on( 'load', function() {
            $( '.tab_navigation a' ).removeClass( 'selected' );
            $( '.tab' ).hide();
            $( 'a[href="#comments"]' ).addClass( 'selected' );
             $( '#comments').show();
        } );
    {* Карточка товара, отправка комментария *}
    {elseif $controller == 'ProductController'}
        $( window ).on( 'load', function() {
            if( location.hash.search('comment') !=-1 ) {
                $( '.tab_navigation a' ).removeClass( 'selected' );
                $( '.tab' ).hide();
                $( 'a[href="#comments"]' ).addClass( 'selected' );
                 $( '#comments').show();
            }
        } );
    {/if}

    var form_enter_name = "{$lang->form_enter_name|escape}";
    var form_enter_phone = "{$lang->form_enter_phone|escape}";
    var form_error_captcha = "{$lang->form_error_captcha|escape}";
    var form_enter_email = "{$lang->form_enter_email|escape}";
    var form_enter_password = "{$lang->form_enter_password|escape}";
    var form_enter_message = "{$lang->form_enter_message|escape}";

    if($(".fn_validate_product").length>0) {
        $(".fn_validate_product").validate({
            rules: {
                name: "required",
                text: "required",
                captcha_code: "required"
            },
            messages: {
                name: form_enter_name,
                text: form_enter_message,
                captcha_code: form_error_captcha
            }
        });
    }
    if($(".fn_validate_callback").length>0) {
        $(".fn_validate_callback").validate({
            rules: {
                callback_name: "required",
                callback_phone: "required",
                captcha_code: "required"
            },
            messages: {
                callback_name: form_enter_name,
                callback_phone: form_enter_phone,
                captcha_code: form_error_captcha
            }

        });
    }
    if($(".fn_validate_subscribe").length>0) {
        $(".fn_validate_subscribe").validate({
            rules: {
                subscribe_email: "required",
            },
            messages: {
                subscribe_email: form_enter_email
            }
        });
    }
    if($(".fn_validate_post").length>0) {
        $(".fn_validate_post").validate({
            rules: {
                name: "required",
                text: "required",
                captcha_code: "required"
            },
            messages: {
                name: form_enter_name,
                text: form_enter_message,
                captcha_code: form_error_captcha
            }
        });
    }

    if($(".fn_validate_feedback").length>0) {
        $(".fn_validate_feedback").validate({
            rules: {
                name: "required",
                email: {
                    required: true,
                    email: true
                },
                message: "required",
                captcha_code: "required"
            },
            messages: {
                name: form_enter_name,
                email: form_enter_email,
                message: form_enter_message,
                captcha_code: form_error_captcha
            }
        });
    }

    if($(".fn_validate_cart").length>0) {
        $(".fn_validate_cart").validate({
            rules: {
                name: "required",
                email: {
                    required: true,
                    email: true
                },
                captcha_code: "required"
            },
            messages: {
                name: form_enter_name,
                email: form_enter_email,
                captcha_code: form_error_captcha
            }
        });
      
      var submitted_cart = false;
        $('.fn_validate_cart').on('submit', function () {
            if ($('.fn_validate_cart').valid() === true) {
                if (submitted_cart === true) {
                    return false;
                } else {
                    submitted_cart = true;
                }
            }
        });
    }

    if($(".fn_validate_login").length>0) {
        $(".fn_validate_login").validate({
            rules: {
                email: "required",
                password: "required",
            },
            messages: {
                email: form_enter_email,
                password: form_enter_password
            }
        });
    }

    if($(".fn_validate_register").length>0) {
        $(".fn_validate_register").validate({
            rules: {
                name: "required",
                email: {
                    required: true,
                    email: true
                },
                password: "required",
                captcha_code: "required"
            },
            messages: {
                name: form_enter_name,
                email: form_enter_email,
                captcha_code: form_error_captcha,
                password: form_enter_password
            }
        });
    }

    {if $settings->sj_shares}
         if($(".fn_share").length>0) {
        {if $js_custom_socials}
        {*Расширяем функционал кастомными соц. сетями*}
        {foreach $js_custom_socials as $social=>$params}
        jsSocials.shares.{$social|escape} = {$params|json_encode};
        {/foreach}
            {/if}
                $(".fn_share").jsSocials({
                    showLabel: false,
                    showCount: false,
                    shares: {$settings->sj_shares|json_encode}
            });
        }
    {/if}

    {if $controller == 'CategoryController'}
        var select = $('.fn_sort_select');
        var option = select.children('option');
        option.each(function(){
            if( $(this).hasClass('active')){
                var value = $(this).val();
                select.val(value);
            }
        });
        select.change(function(){
            var url = select.val();
            $(location).attr('href',url);
        });
    {/if}

    {get_design_block block="front_scripts_after_validate"}

        {if $settings->sj_shares}
        if($(".fn_share").length>0) {
            {if $js_custom_socials}
            {*Расширяем функционал кастомными соц. сетями*}
            {foreach $js_custom_socials as $social=>$params}
            jsSocials.shares.{$social|escape} = {$params|json_encode};
            {/foreach}
                {/if}
                    $(".fn_share").jsSocials({
                        showLabel: false,
                        showCount: false,
                        shares: {$settings->sj_shares|json_encode}
                });
                }
                {/if}

                    /* Звёздный рейтинг товаров */
                    let ratingBlock = $(".fn_rating");
                    if (ratingBlock.length>0) {
                        $(function() {
                            ratingBlock.rater({ postHref: ratingBlock.data('rating_post_url') });
                        });
                        $.fn.rater = function (options) {
                            var opts = $.extend({literal}{}{/literal}, $.fn.rater.defaults, options);
                            return this.each(function () {
                                var $this = $(this);
                                var $on = $this.find('.rating_starOn');
                                var $off = $this.find('.rating_starOff');
                                opts.size = $on.height();
                                if (opts.rating == undefined) opts.rating = $on.width() / opts.size;

                                $off.mousemove(function (e) {
                                    var left = e.clientX - $off.offset().left;
                                    var width = $off.width() - ($off.width() - left);
                                    width = Math.ceil(width / (opts.size / opts.step)) * opts.size / opts.step;
                                    $on.width(width);
                                }).hover(function (e) { $on.addClass('rating_starHover'); }, function (e) {
                                    $on.removeClass('rating_starHover'); $on.width(opts.rating * opts.size);
                                }).click(function (e) {
                                    var r = Math.round($on.width() / $off.width() * (opts.units * opts.step)) / opts.step;
                                    $off.unbind('click').unbind('mousemove').unbind('mouseenter').unbind('mouseleave');
                                    $off.css('cursor', 'default'); $on.css('cursor', 'default');
                                    opts.id = $this.attr('id');
                                    $.fn.rater.rate($this, opts, r);
                                }).css('cursor', 'pointer'); $on.css('cursor', 'pointer');
                            });
                        };

                        $.fn.rater.defaults = {
                            postHref: location.href,
                            units: 5,
                            step: 1
                        };

                        $.fn.rater.rate = function ($this, opts, rating) {
                            var $on = $this.find('.rating_starOn');
                            var $off = $this.find('.rating_starOff');
                            $off.fadeTo(600, 0.4, function () {
                                $.ajax({
                                    url: opts.postHref,
                                    type: "POST",
                                    data: 'id=' + opts.id + '&rating=' + rating,
                                    complete: function (req) {
                                        if (req.status == 200) { /* success */
                                            opts.rating = parseFloat(req.responseText);

                                            if (opts.rating > 0) {
                                                opts.rating = parseFloat(req.responseText);
                                                $off.fadeTo(200, 0.1, function () {
                                                    $on.removeClass('rating_starHover').width(opts.rating * opts.size);
                                                    var $count = $this.find('.rating_count');
                                                    $count.text(parseInt($count.text()) + 1);
                                                    $this.find('.rating_value').text(opts.rating.toFixed(1));
                                                    $off.fadeTo(200, 1);
                                                });
                                            }
                                            else
                                            if (opts.rating == -1) {
                                                $off.fadeTo(200, 0.6, function () {
                                                    $this.find('.rating_text').text('{$lang->rating_error|escape}');
                                                });
                                            }
                                            else {
                                                $off.fadeTo(200, 0.6, function () {
                                                    $this.find('.rating_text').text('{$lang->rating_voted|escape}');
                                                });
                                            }
                                        } else { /* failure */
                                            alert(req.responseText);
                                            $on.removeClass('rating_starHover').width(opts.rating * opts.size);
                                            $this.rater(opts);
                                            $off.fadeTo(2200, 1);
                                        }
                                    }
                                });
                            });
                        };
                    }

</script>


Название раздела: Баг-репорт OkayCMS (Сообщения об ошибках)
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Баг-репорт OkayCMS (Сообщения об ошибках)»

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

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