ajax в корзине



  • MODX Revolution 2.4.2-pl
    Shopkeeper3 3.2.3-pl

    Здравствуйте.
    Столкнулся с проблемой при добавлении/обновлении товаров в корзине.

    Задача:

    • избежание отображения пустых значений TV- параметров характеристик товара в строке корзины при использовании одного шаблона страницы товара для разных типов товаров.
      В конкретном примере - отображение показателей мощности и др. параметров энергосберегающих ламп и исключение их отображения ввиду их отсутствия у светильников.

    Проблема:

    • после добавления товаров разного типа: лампочек и светильников, у лампочек доп. параметры отображаются корректно, у светильников же они обрезаются (ввиду их отсутствия и, соответственно, пустых значений на странице редактирования товара) и не отображаются.
      Но. После первичного добавления товара с пустыми значениями в строке, в каждой ячейке, отвечающей за доп. параметр "вылазит" символ
    `
    

    , который является крайним знаком в фильтре перед закрывающими квадратными скобками.
    Пример шаблона строки корзины с фильтрами:

    <tr>
        <td>[[+name]]</td>
    	<td>[[+shk_bulbBase:!empty=`Цоколь [[+shk_bulbBase]]`]]</td>
    	<td>[[+shk_bulbPower:!empty=`Мощность [[+shk_bulbPower]]`]]</td>
    	<td>[[+shk_lightColor:!empty=`Свечение [[+shk_lightColor]]`]]</td>
        <td><span class="badge">x[[+count]]</span></td>
        <td class="text-right">[[+price_count]] [[+currency]]</td>
    	<td><a href="[[+url_del_item]]" title="удалить из корзины" class="remove shk-del">
    		<i class="fa fa-times"></i>
    	</a></td>
    </tr>
    

    т.е. символ

    `
    

    после TV-параметра

    [[+shk_bulbBase]]
    

    к примеру.

    После повторного обновления страницы этот символ исчезает.

    Решение:

    • поковыряли код в файле shopkeeper.js и добавили пару строк в секции "/**
      • Аякс-запрос для отправки данных и получения HTML-кода обновленной корзины
        */".

    Конкретно в этом месте

    $.ajax({
                type: "POST",
                cache: false,
                dataType: 'json',
                url: SHK.options.site_base_url + 'assets/components/shopkeeper3/connector_fe.php',
                data: params,
                success: function(data){
    
    			//правка 
    				if (data.hasOwnProperty('html'))
    					data.html = data.html.replace( /`/gm, '' );
    			//правка 
    
                    SHK.showLoading( false, shopCart );
    

    Это конечно костыль (две строчки между комментариями "//правка"), но он ловит указанный "залётный" html и убирает его. После этой правки отображение данных в корзине стало корректным.

    Может пригодится для быстрого решение подобной проблемы тем, у кого она возникла.
    Спасибо.


  • Администраторы

    В таких случаях рекомендую использовать сниппет If
    https://rtfm.modx.com/extras/revo/if



  • @Andchir использовал этот сниппет в более ранних версиях shopkeeper- были глюки с отображением, поэтому перешёл на phx.



Похоже, подключение к Форум | MODX Shopkeeper было разорвано, подождите, пока мы пытаемся восстановить соединение.