Глючит пересчет стоимости доставки Minishop2

Была нужна дополнительная валидация при отправке заказа.
Условия:
1. Введен город «Челябинск» или «Копейск» — доступны все виды доставки;
2. Введен любой другой город кроме «Челябинск» и «Копейск» — доступен только способ доставки «Почтой» delivery_2

Накидал такой код на JQuery все номально работает, но стал глючить пересчет стоимости доставки:

$(function(){
  $(".ms2_link").click(function() {
	  if (!$("#delivery_2").is(':checked'))
	     if (!(($("#city").val() == "Челябинск") || ($("#city").val() == "челябинск") || ($("#city").val() == "ЧЕЛЯБИНСК") || ($("#city").val() == "Копейск") || ($("#city").val() == "копейск") || ($("#city").val() == "КОПЕЙСК"))) {
	       //alert("BAD");
		   $.jGrowl("Для вашего города доступна доставка только <b>Почтой</b>", {theme:'ms2-message-error'});
                   return false;
                }     
  });
});
Причем рандомно — переключишься с первого способа доставки на второй- пересчитает, с третьего на второй не пересчитывает… Как правильно сделать?
Заранее спасибо!
Игорь Терентьев
05 июня 2014, 04:21
modx.pro
2
1 564
+1

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

Володя
05 июня 2014, 09:13
+1
наверное проще залезть в default.js и добавить в miniShop2.Order add
if (data.key=="city" ) {
 if (data.value=="челябинск") ....
 и тд.

}
Алексей Ерохин
05 июня 2014, 09:55
+2
Вам нужно написать callback к Order.add
    Игорь Терентьев
    05 июня 2014, 10:06
    0
    Всем спасибо!
    Но почему-то продолжает глючить даже после удаления моего кода и полной очистки кэша:
    www.nosemask.ru/cart.html
    Даже с другого браузера зашел…
      Алексей Ерохин
      05 июня 2014, 10:23
      0
      javascript в порядке. у Вас что-то в хендлере заказа. попробуйте переставить minishop2. Либо смотрите свои скрипты php
      Володя
      05 июня 2014, 10:07
      0
      можешь на этом примере, приблизительно хотя бы, показать как это будет выглядеть? Спасибо!
        Алексей Ерохин
        05 июня 2014, 10:37
        +2
        Примерно так:
        miniShop2.Callbacks.Order.add.response.success = function(response) {
            for (var key in response.data) {
                if (response.data.hasOwnProperty(key)) {
                    switch (key) {
                        case 'city':
                            if (response.data[key] == 'Копейск') {
                                console.log('Мы в Копейске');
                            } else {
                                console.log('Мы не в Копейске');
                            }
                            break;
                        //default:
                    }
                }
            }
        }
        Это в отдельный скрипт и цепляете в своем orderHandler в initialize
          Володя
          05 июня 2014, 10:58
          0
          спасибо за пример. был бы еще очень признателен за понимание вот этого цепляете в своем orderHandler в initialize
          Спасибо!)
            Алексей Ерохин
            05 июня 2014, 11:09
            +1
            bezumkin.ru/modx/minishop2/classes/804/

            Создаете файл core/components/minishop2/custom/order/msCustomOrderHandler.class.php
            В нем делаете таким образом:
            class msCustomOrderHandler extends msOrderHandler {
                public function initialize ($ctx = 'web') {
                    $this->modx->regClientScript("<script src=\"путь к скрипту\" type=\"text/javascript\"></script>", true);
                    return true;
                }
            }
            В системных настройках minishop2 прописываете обработчик заказа свой msCustomOrderHandler
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    10