Последние темы


Свои скрипты после tagmanager2 ajax

  • Здравствуйте. На карточки товаров, на странице с выборкой tagmanager повешены несколько скриптов - одни классы при наведении меняют, другой открывает форму при заказе в 1 клик. Но после ajax фильтрации\пагинации\динамического изменения шаблона у карточек товаров - скрипты перестают работать. Как я понимаю, это происходит из-за перезагрузки\подгрузки новых dom элементов, которых не было при инициализации скрипта.
    Хотя при увеличении лимита вывода на карточек товаров, допустим при загрузке страницы было 10 карточек после ajax запроса стало 20 (?limit=20), то на первых 10 карточках, которые были в момент загрузки страницы, скрипты так же не работают. Подскажите как можно заставить свои скрипты инициализироваться заново, после ajax запросов tagmanager?
    Думал попробовать через всплытие события, повесить на ближайшего родителя или поиск элемента внутри родителя, но не хотелось бы подвязываться на родителя, так как карточки товаров присутствуют в разных блоках и на разных страницах сайта и менять классы нужно везде.
    Может можно обвернуть инициализацию скриптов в callback из tagmanager? Допустим в документации описывается такой callback -

    tm_onFilterAfter( total, pageCount, onPageLimit )
    

    Тестирую его вот так:

    function tm_onFilterAfter( total, pageCount, onPageLimit ){
    
        alert("1");
    
    }
    

    Но алерт не происходит.
    Возможно есть более простой способ достичь работы своих скриптов после ajax?

  • Я добавлял свои фун-ии в success ajax'a. Файл assets/components/tag_manager2/js/web/filters.js блок "ajaxRequest (~814 строка)".

    jQuery.ajax({
                url: tmFilters.config.base_url + tmFilters.config.ajax_url,
                type: "GET",
                cache: false,
                data: state_data,
                dataType: 'json',
                success: function(response) {
                    if (typeof response.prod_list != 'pagination') {
                        $(tmFilters.config.products_cont).html( response.prod_list );
    
                        $('html,body').animate({
                            scrollTop: Math.round($(tmFilters.config.products_cont).position().top)
                        });
    		    
                    }
    		
                    if (typeof response.pages != 'undefined'){
                        $(tmFilters.config.pages_cont1).html( response.pages );
                        if ( tmFilters.config.pages_cont2.length > 0 ){
                            $(tmFilters.config.pages_cont2).html( response.pages );
                        }
                    }
                    
                    tmFilters.ajaxPreload( $(tmFilters.config.products_cont), false );
    
                    //tm_onFilterAfter
                    if ( typeof tm_onFilterAfter == 'function' ) {
                        tm_onFilterAfter( response.total, response.pageCount, response.onPageLimit );
                    }
    
                    //СВОЯ ФУН-ИЯ
                    my_function();
                    
    
                },
                error: function(jqXHR,textStatus,errorThrown){
                    if(typeof(console)!='undefined') console.log(jqXHR,textStatus,errorThrown);
                }
            });
  • @city-shafl Спасибо, попробую так, пока реализовал через всплытие на родителя

  • Но алерт не происходит.

    Вот я делаю на демо сайте.

    0_1522404980389_screenshot_023.png

    После фильтрации получаю алерт.

    0_1522404994994_screenshot_024.png

    Так что проверьте где вы вставляете калбек функцию и нет ли там других точно таких же, которые её переопределяют.

 

Последние комментарии

  • Z

    Спасибо, действительно проще создать отдельно.

    Читать далее
  • Но проблема в том, что эта старая цена "дублируется" в плесхолдер "Дополнительных услуг" - [[+addit_data]].

    Можно не использовать [[+addit_data]], а выводить параметры по-отдельности.

    Цитата из документации:

    [[+shk_любой доп.параметр]] - любой доп. параметр, выбранный при добавлении товара в корзину (из [[+addit_data]]), например [[+shk_param1]].
    Если параметры сделаны в виде чекбоксов, то чтобы вывести отдельно каждый из них, нужно добавлять индекс (номер от нуля) для параметров следующих за первым.
    Пример: [[+shk_param1]], [[+shk_param1_1]], [[+shk_param1_2]] ...
    [[+shk_любой доп.параметр_price]] - цена доп.параметра. Пример: [[+shk_param1_price]].

    Читать далее
  • Z

    Доброго времени суток. Не могу разобраться, как передать данные migx-поля в корзину в плейсхолдер без "дублирования" в [[+addit_data]]
    Суть в чем: У меня есть 2 цены у товара (со скидкой и без скидки) Форма для отправки в корзину:

    <form action="[[~[[*resource_id]]? &scheme=`abs`]][[*alias]].html" method="post"> <input type="hidden" name="shk-id" value="[[*id]]" /> <input type="hidden" name="shk-name" value="[[*pagetitle]]" /> <input type="hidden" name="price_old__[[*id]]__add" value="[[*price_old]]" /> <input type="hidden" name="shk-count" value="1" /> <div class="product-price"> Цена: <span class="shk-price">[[!*price:shk_curr_rate:num_format]]</span> Старая цена - <span class="shk-price-old">[[+price_old]]</span> [[!+shk_currency]] </div> <div class="padding-lr-30"> <h5>Дополнительные услуги</h5> [[*param1]] </div> <div class="product-price"> <button class="btn btn-lg btn-primary" type="submit" class="shk-but">В корзину</button> </div> </form>

    Данные со "старой ценой" в корзину попадают нормально и выводится в нужном месте в плейсхолдере:
    [[+shk_price_old]]
    Но проблема в том, что эта старая цена "дублируется" в плесхолдер "Дополнительных услуг" - [[+addit_data]]. Как сделать чтобы старая цена не выводилась в [[+addit_data]]? Или может я как то не правильно передаю MIGX-параметр в корзину ? Заранее спасибо.

    Читать далее
  • Фотографии, как я понял, это второй вопрос. Я по нему пока ничего не отвечал и не просил информации. Это не отменяет того, что в вашем конфиге есть ошибка, о которой я писал выше. Не нужно задавать разные вопросы в одной теме, чтобы не было путаницы.
    http://forum.modx-shopkeeper.ru/topic/15/рекомендации-по-оформлению-темы-с-вопросом

    Читать далее