Не обновляется стоимость доставки при выборе в форме заказа

Здравствуйте!

Хочу поднять вопрос который так и не был решён на протяжении уже нескольких лет, если судить из тем на форуме.
Как вы уже поняли при выборе доставки в разделе «Итого, с доставкой:» цена сразу не обновляется, нужно перезагружать страничку и после этого будет отображаться цена с доставкой.
Кто знает как решить данную проблему?
Oleg
27 марта 2019, 17:47
modx.pro
617
0

Комментарии: 12

Андрей
27 марта 2019, 18:22
0
А например на демо сайте minishop2.com всё прекрасно работает.

Ставим дефолтный чанк и сверяем со своим, проверяем нужные id, например цена должна быть обёрнута:
<span id="ms2_order_cost">{$order.cost ?: 0}</span>
    Oleg
    27 марта 2019, 18:40
    0
    У меня к примеру выводится точно так же, но всё равно сразу не отображается.
      Андрей
      27 марта 2019, 18:44
      0
      С дефолтным чанком работает? Смотрите логи, ошибки в консоли браузера, может что то с js.
        Oleg
        27 марта 2019, 21:08
        0
        Всё в порядке. Пробовал методично отключать JS, не помогает.
          Андрей
          27 марта 2019, 21:27
          0
          Т.е. даже с чанком по умолчанию не работает? Если да, то это мистика какая то =)

          http://s17993.h9.modhost.pro/catalog — вот сайт полностью из коробки на компонентах siteDev и msDemoData, ради интереса добавил способ доставки, проверил, всё считает без перезагрузки. Очевидно что проблема на вашей стороне.
            Oleg
            27 марта 2019, 21:44
            0
            Может я чего не понимаю, что вы имеете ввиду под выражением «чанк по умолчанию»?
              Андрей
              27 марта 2019, 21:58
              0
              Может я чего не понимаю, что вы имеете ввиду под выражением «чанк по умолчанию»?
              Те чанки которые доступны после установки minishop2 — /minishop2/elements/chunks/chunk.ms_order.tpl

              Если просто вызвать msOrder, всё должно работать:
              [[!msOrder]]

              Либо пишите по шагам что и как вы делаете, код шаблона, код чанков.
                Oleg
                27 марта 2019, 22:06
                0
                Чанк
                <form class="ms2_form" id="msOrder" method="post">
                    
                    <div class="row">
                        <div class="col-md-6" id="deliveries" style="margin-bottom: 20px">
                            <h4 style="margin-bottom:7px;">{'ms2_frontend_deliveries' | lexicon}:</h4>
                           
                                
                                    {foreach $deliveries as $delivery index=$index}
                                        {var $checked = !$order.delivery && $index == 0 || $delivery.id == $order.delivery}
                                        <label>
                                           
                                                <input id="{$delivery.id}" type="radio" name="delivery" class="radio" value="{$delivery.id}" id="delivery_{$delivery.id}"
                                                       data-payments="{$delivery.payments | json_encode}"
                                                        {$checked ? 'checked' : ''}>
                                                         <label for="{$delivery.id}" class="label">{if $delivery.logo?}
                                                    <img src="{$delivery.logo}" alt="{$delivery.name}" title="{$delivery.name}"/>
                                                {else}
                                                    {$delivery.name}
                                                {/if}
                                                {*if $delivery.description?}
                                                    <p class="small">
                                                        {$delivery.description}
                                                    </p>
                                                {/if*}</span>
                                                
                                            
                                        </label>
                                    {/foreach}
                              
                          
                        </div>
                        
                        <div class="col-md-6" id="payments"  style="margin-bottom: 20px">
                            
                            <h4 style="margin-bottom:7px;">{'ms2_frontend_payments' | lexicon}:</h4>
                            
                                
                              
                                    {foreach $payments as $payment index=$index}
                                        {var $checked = !$order.payment && $index == 0 || $payment.id == $order.payment}
                                      
                                            <label>
                                                <input id="{$payment.id}" type="radio" name="payment" class="radio" value="{$payment.id}" id="payment_{$payment.id}"
                                                        {$checked ? 'checked' : ''}>
                                                         <label for="{$payment.id}" class="label">{if $payment.logo?}
                                                    <img src="{$payment.logo}" alt="{$payment.name}" title="{$payment.name}"/>
                                                {else}
                                                    {$payment.name}
                                                {/if}
                                                {if $payment.description?}
                                                    <p class="small">
                                                        {$payment.description}
                                                    </p>
                                                {/if}</label>
                                                
                                            </label>
                                      
                                    {/foreach}
                            
                            
                        </div>
                    </div>
                
                    <div class="row">
                        
                        <div class="col-md-6">
                            <h4>{'ms2_frontend_credentials' | lexicon}:</h4>
                            {foreach ['email','receiver','phone'] as $field}
                                <div class="input-parent">
                                    <label class="control-label" for="{$field}">
                                        <span class="required-star">*</span> {('ms2_frontend_' ~ $field) | lexicon}
                                    </label>
                                  
                                        <input type="text" id="{$field}" placeholder="{('ms2_frontend_' ~ $field) | lexicon}"
                                               name="{$field}" value="{$form[$field]}"
                                               class="form-control{($field in list $errors) ? ' error' : ''}">
                               
                                </div>
                            {/foreach}
                
                            
                        </div>
                
                        <div class="col-md-6">
                             <h4>{'ms2_frontend_address' | lexicon}:</h4>
                            <div class="row">
                               
                              <div class="col-md-6">
                                  
                            {foreach ['region','city'] as $field}
                               <div class="input-parent">
                                   
                               <label for="">        <span class="required-star">*</span> {('ms2_frontend_' ~ $field) | lexicon}</label> 
                               
                                  
                                        <input type="text" id="{$field}" placeholder="{('ms2_frontend_' ~ $field) | lexicon}"
                                               name="{$field}" value="{$form[$field]}"
                                               class="form-control{($field in list $errors) ? ' error' : ''}">
                                 
                                </div>
                            {/foreach}
                            </div>
                            <div class="col-md-6">
                               
                                    
                               
                                    {foreach ['street','building','room'] as $field}
                                    <div class="input-parent">
                                        <label class="control-label" for="{$field}">
                                            <span class="required-star">*</span> {('ms2_frontend_' ~ $field) | lexicon}
                                        </label>
                                  
                                            <input type="text" id="{$field}" placeholder="{('ms2_frontend_' ~ $field) | lexicon}"
                                                   name="{$field}" value="{$form[$field]}"
                                                   class="form-control{($field in list $errors) ? ' error' : ''}">
                                      </div>
                                    {/foreach}
                              
                            </div>
                            </div>
                        </div>
                        
                        <div class="col-md-12">
                                <label class="control-label" for="comment">
                                    <span class="required-star">*</span> {'ms2_frontend_comment' | lexicon}</label>
                             
                                    <textarea name="comment" id="comment" placeholder="{'ms2_frontend_comment' | lexicon}"
                                              class="form-control{('comment' in list $errors) ? ' error' : ''}">{$form.comment}</textarea>
                            
                        </div>
                        
                        
                
                        
                        
                
                        <div style="margin-bottom:30px;" class="col-md-12"><strong>{'ms2_frontend_order_cost' | lexicon}:
                                <span id="ms2_order_cost">{$order.cost ?: 0}</span>
                                руб.,</strong>
                        </div>
                 
                        <div class="col-md-4">
                            <button type="submit" name="ms2_action" value="order/submit" class="btn btn-default btn-primary ms2_link">
                                {'ms2_frontend_order_submit' | lexicon}*
                            </button>           
                        </div>
                  
                    </div>
                
                
                
                
                
                </form>
                Вы чтото нашли?
                  Андрей
                  27 марта 2019, 22:49
                  0
                  Вставил ваш код в чанк, в консоли браузера сразу же видна ошибка, вы же написали что проблем с JS нет =).

                  Сравнивайте код с оригинальным чанком и приводите в соответствие. Подсказка, проблема внутри блока:
                  {foreach $deliveries as $delivery index=$index}
                      ....
                  {/foreach}
                    Oleg
                    28 марта 2019, 03:40
                    0
                    Чтото не пойму. Этот:
                    {var $checked = !($order.delivery in keys $deliveries) && $index == 0 || $delivery.id == $order.delivery}
                    Или этот?
                    <label for="{$delivery.id}" class="label">
                    Потому как кроме них всё идентично и всё равно не работает. Я слишком тупой да?
                      Андрей
                      28 марта 2019, 10:40
                      1
                      +1
                      Самое главное — это внимательность =) Ну и немного логики.

                      {foreach $deliveries as $delivery index=$index}
                      {var $checked = !$order.delivery && $index == 0 || $delivery.id == $order.delivery}
                          
                          <label> // лишний открывающий тег
                              <input id="{$delivery.id}" type="radio" name="delivery" class="radio" value="{$delivery.id}" id="delivery_{$delivery.id}" data-payments="{$delivery.payments | json_encode}" {$checked ? 'checked' : ''}>
                          // В input выше два раза указан id, из за чего и глючит js.
                          
                          //Если сильно надо то ниже id надо указывать как в input - delivery_{$delivery.id}
                          <label for="{$delivery.id}" class="label">
                              {if $delivery.logo?}
                                  <img src="{$delivery.logo}" alt="{$delivery.name}" title="{$delivery.name}"/>
                              {else}
                                  {$delivery.name}
                               {/if}
                              
                               {*if $delivery.description?}
                                   <p class="small">
                                        {$delivery.description}
                                   </p>
                               {/if*}
                              </span> // лишний закрывающий тег
                              </label>
                      {/foreach}

                      А если из консоли браузера перейти в файл в котором указывается эта ошибка, то там сразу было видно на что ругается скрипт)
                      Oleg
                      28 марта 2019, 13:43
                      0
                      Блин, вот как всегда внимательность самое главное. Спасибо за помощь добрый человек! =)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
12