Изменение количества товаров в корзине и перерасчет без перезагрузки страницы



  • Всем привет.
    Разбираюсь с Shopkeeper (заранее спасибо за такой шикарный модуль), много моментов, где 100 раз переделываю (чаще пальцем в небо). Вот и наверное в этот раз такая же ситуация.

    В корзине идет вывод товаров с количеством.

    Выводится через

    <ul>[[+inner]]</ul>
    

    Чанк вывода элементов в корзине:

    <li>
        <div class="but">
        	<a href="[[+url_del_item]]"><img src="manager/templates/Ashar/img/remove.png" alt=""></a>
    	</div>
    	<div class="img">
    		<img src="[[+image_shop]]" alt="">
    
    	</div>
    	<div class="info">
    		<div class="top_info">[[+name]]</div>
    		<div class="count_block">
    			<div class="count-item-cart">Кол-во: [[+count]] 
    			<input class="shk-count" type="text" size="2" name="count[]" maxlength="3" title="изменить количество" value="[[+count]]" />
    			</div>
    			
    			<div class="price">[[+price]] р.</div>
    			<div class="clearfix"></div>
            </div>
    	</div>
    </li>
    

    Вызов ШК:

    [[!Shopkeeper3@cart_catalog? &cartTpl=`fullcart` ]]
    

    Чанк fullcart:

    <div class="shop-cart" data-shopcart="2">
        <div class="shop-cart-head curt"></div>
        <!--<div class="empty">
                <div class="shop-cart-empty">Пусто</div>
        </div>-->
    </div>
    <!--tpl_separator-->
    <div id="curt_modal">
    			<section>
    				<div class="top_modal">
    					Корзина
    				</div>
    				<div class="content">
    					<div class="left">
    						<div class="form-cart-header">Ваш заказ</div>
    						<ul>[[+inner]]</ul>
    					</div>
    					<div class="right">
    						<div class="form-cart-header">Ваши данные:</div>
    
    [[!FormIt?
    &hooks=`spam,shk_fihook,email,FormItAutoResponder,redirect`
    &submitVar=`order`
    &emailTpl=`shopOrderReport`
    &fiarTpl=`shopOrderReport`
    &emailSubject=`В интернет-магазине "[[++site_name]]" сделан новый заказ`
    &fiarSubject=`Вы сделали заказ в интернет-магазине "[[++site_name]]"`
    &emailTo=`[[++emailsender]]`
    &fiarReplyTo=`[[++emailsender]]`
    &fiarToField=`email`
    &redirectTo=`41`
    &validate=`address:required,fullname:required,email:email:required,phone:required,date_picker:required,time:required`
    &errTpl=`<br /><span class="error">[[+error]]</span>`
    ]]
    
    [[$shopOrderForm]]
    				</div>
    

    Проблема в том, что нужный Input (изменения кол-ва товаров) не работает (с хэлпером или без, просто не работает). При этом он отлично работает из каталога товаров (при добавлении в корзину). Совершил большую ошибку изначально - работал с исходными файлами (нужно было свои чанки создавать).

    Как реализовать изменение кол-ва товаров как на демо сайте?
    Что нужно поправить?

    P.S. Видел про 500р. за помощь, если нужно - я заплачу.


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

    1. Не хватает <form>. Смотрите исходный чанк https://github.com/andchir/shopkeeper3/blob/master/core/components/shopkeeper3/elements/chunks/ru/shopCart.tpl
    2. &cartTpl=`fullcart` это должно быть в наборе параметров.


  • Огромное спасибо, есть подвижки :)

    Но теперь другие проблемы:

    1. Когда увеличиваешь количество товара в корзине - страница перезагружается и не отображаются товары и форма вообще. Если обновить страницу - всё окей, учтено новое количество товаров. Где-то есть мой косяк, но не могу найти никак.

    2. Цена итоговая меняется очень странно. Меняешь кол-во товаров - через N обновлений и времени она применяется. Иногда не применяется. Пробовал стандартные взять чанки корзины - там тоже уходит на обновление страницы, но если перезагрузить, то цена корректная.

    Вот как чанк корзины fullcart.tpl:

    <div class="shop-cart" data-shopcart="2">
        <div class="shop-cart-head curt"></div>
        <!--<div class="empty">
                <div class="shop-cart-empty">Пусто</div>
        </div>-->
    </div>
    <!--tpl_separator-->
    <div id="curt_modal" class="shop-cart" data-shopcart="2">
    			<section>
    				<div class="top_modal">
    					Корзина
    				</div>
    				<div class="content">
    				    <form action="[[+this_page_url]]#shopCart" method="post">
    					<div class="left">
    						<div class="form-cart-header">Вы сделали отличный выбор</div>
    						<ul>[[+inner]]</ul>
    					</div></form>
    					<div class="right">
    						<div class="form-cart-header">Ваши данные:</div>
    
    [[!FormIt?
    &hooks=`spam,shk_fihook,email,FormItAutoResponder,redirect`
    &submitVar=`order`
    &emailTpl=`shopOrderReport`
    &fiarTpl=`shopOrderReport`
    &emailSubject=`В интернет-магазине "[[++site_name]]" сделан новый заказ`
    &fiarSubject=`Вы сделали заказ в интернет-магазине "[[++site_name]]"`
    &emailTo=`[[++emailsender]]`
    &fiarReplyTo=`[[++emailsender]]`
    &fiarToField=`email`
    &redirectTo=`41`
    &validate=`address:required,fullname:required,email:email:required,phone:required,date_picker:required,time:required`
    &errTpl=`<br /><span class="error">[[+error]]</span>`
    ]]
    
    [[$shopOrderForm]]
    				</div>
    

    shopOrderForm.tpl:

    [[!shkOptions?
    &get=`delivery,payments`
    &post_name=`shk_delivery,payment`
    &toPlaceholders=`1`
    &pl_prefix=`shkopt_`
    &tpl=`select_option`
    ]]
    
    <p class="error">[[!+fi.error.error_message]]</p>
    <br />
    
    <form method="post" action="[[~[[*id]]]]" id="shopOrderForm">
    
    
    <input type="text" name="nospam:blank" value="" style="display:none;" />
    <input type="hidden" name="order" value="1" />
    
    <div class="in">
        <span>Ф.И.О.<small>*</small>:</span>
                <input name="fullname" size="30" class="textfield" type="text" placeholder="Имя" value="[[!+fi.fullname]]" />
                <div>[[!+fi.error.fullname]]</div>
                <div class="clearfix"></div>
    </div>
    <div class="in">
    	<span>Телефон<small>*</small>:</span>
    	<input name="phone" size="30" class="textfield" type="text" placeholder="Телефон" value="[[!+fi.phone]]" />
                <div>[[!+fi.error.phone]]</div>
                    <div class="clearfix"></div>
    </div>
    <div class="in">
    	<span>E-mail:</span>
                <input name="email" size="30" class="textfield" type="text" placeholder="Email" value="[[!+fi.email]]" />
                <div>[[!+fi.error.email]]</div>
            <div class="clearfix"></div>
    </div>
    <div class="date">
    								<span>Дата и время<small>*</small>:</span>
    								<div class="date_wr">
    								    <input name="date_picker" id="datepicker" class="textfield" type="text" value="[[!+fi.date_picker]]" />
                                        <div>[[!+fi.error.date_picker]]</div>
    									<input name="time" id="time" class="textfield" type="text" value="[[!+fi.time]]" />
                                        <div>[[!+fi.error.time]]</div>
    									<div class="clearfix"></div>
    								</div>
    							</div>
    							<div class="in">
    								<span>
    									Адрес<small>*</small>:	
    								</span>
    								<input name="address" size="30" class="textfield" type="text" value="[[!+fi.address]]" />
                                  <div>[[!+fi.error.address]]</div>
    								<div class="clearfix"></div>
    							</div>
    							<div class="in">
    								<span>
    									Примечание:
    								</span>
    								<textarea name="message" class="textfield" rows="4" cols="30">[[!+fi.message]]</textarea>
    								<div class="clearfix"></div>
    							</div>
    </div>
    					<div class="clearfix"></div>
    					
    					<div class="medium">
    						<div class="left">
    							<div>
    								<span class="sp">Способ получения заказа:</span>
    								<select name="shk_delivery" class="select">
    									<option value=""></option>
                                        [[!+shkopt_delivery]]
    								</select>
    							</div>
    							<div>
    								<span class="sp">Способ оплаты:</span>
    								<select name="payment" class="select">
                                        <option value=""></option>
                                        [[!+shkopt_payments]]
                                    </select>
                                    <div>[[!+fi.error.payment]]</div>
    							</div>
    						</div>
    						<div class="right">
    							<div class="top">
    								<span>Итого:</span>
    								<div class="pr">
    									[[+price_total]] <small>[[+currency]]</small>
    								</div>
    								<div class="clearfix"></div>
    							</div>
    							<input type="submit" name="submit_button" class="button oformlenie" value="Оформить заказ" id="shk_butOrder" />
    						</div>
    						<div class="clearfix"></div>
    					</div>	</form>
    
    


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