Переход в корзину после добавления товара

Доброго времени суток! открыл файл /assets/components/minishop2/js/web/default.js

нашел там
switch (self.sendData.action) {
			case 'cart/add':
				miniShop2.Cart.add();
				break;
			case 'cart/remove':
				miniShop2.Cart.remove();
				break;
			case 'cart/change':
				miniShop2.Cart.change();
				break;
			case 'cart/clean':
				miniShop2.Cart.clean();
				break;
			case 'order/submit':
				miniShop2.Order.submit();
				break;
			case 'order/clean':
				miniShop2.Order.clean();
				break;
			default:
				return;
		}

вставил

$.post(miniShop2Config.actionUrl, params, function(response) {
	if (response.success) {
		document.location.href = '/cart.html';
	}
	else {
		miniShop2.Message.error(response.message);
	}
}, 'json')
но у меня все равно ничего не происходит уже второй день голову ломаю, что я не так сделал?
Андрей
28 ноября 2013, 10:46
modx.pro
2
6 997
0

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

Сергей
28 ноября 2013, 16:28
0
Не совсем понятно куда вы вставили, можете выложить код, так чтобы было видно как и куда вы вставили?
    Андрей
    28 ноября 2013, 16:39
    0
    если честно куда только я его не вставлял, а так сразу после miniShop2.Cart.add(); у меня либо переходило в корзину но она была пустой
      Clean
      28 ноября 2013, 16:43
      0
      в MODx есть замечательные штуки, плагинами зовутся.
      Собственно MS2 активно их использует.

      Рекомендую.

      Например для события корзины есть
      msOnAddToCart
      msOnBeforeAddToCart
      msOnBeforeChangeInCart
      msOnBeforeEmptyCart
      msOnBeforeRemoveFromCart
      msOnChangeInCart
      msOnEmptyCart
      msOnRemoveFromCart
      используйте нужный вам, и напишите простой forward.
      А default.js перезапишется с первым же обновлением
        Андрей
        28 ноября 2013, 17:13
        0
        так а можно узнать путь к расположению?
          Clean
          28 ноября 2013, 17:21
          0
          Вы про плагин?
          Конечно — путь Вам вот сюда!
          rtfm.modx.com/revolution/2.x/developing-in-modx/basic-development/plugins
            Андрей
            28 ноября 2013, 17:32
            0
            bezumkin.ru/modx/minishop2/classes/725/#comment-12494 я хотел сделать согласно вот этому посту)
              Clean
              28 ноября 2013, 17:46
              0
              Ну и так конечно можно раз Василий сказал.
              Расширь метод miniShop2.Cart.add(); и будет счастье тебе, но я например для безусловной переадресации (т.е никаких popup итп ) юзал бы плагин, так проще мне кажется, хотя кому как
            Aliaksandr Katlou
            28 ноября 2013, 17:31
            0
            Андрей, умный человек Василий, сделал системную настройку для минишопа — скрипт по умолчанию и цсс по умолчанию, сразу после установки стоит переименовать дефолтный js и css и указать там к ним путь — и никакой головной боли с перезаписываем по умолчанию.
              Андрей
              28 ноября 2013, 17:32
              0
              да это то сделал давно) осталось ток понять как его поправить)
          Андрей
          28 ноября 2013, 17:50
          0
          так что есть у кого то еще какие то соображения? кроме как ссылок
            Сергей
            28 ноября 2013, 18:15
            0
            Вы или не не поняли или прочитали невнимательно, нужно изменить сам метод miniShop2.Cart.add, который находится примерно на 170 строке.
              Андрей
              28 ноября 2013, 20:13
              0
              спс, все сделал!
            Виктор
            18 марта 2015, 23:30
            1
            0
            А вот моё решение:

            <button class="btn" type="submit" name="ms2_action" value="cart/add" onclick="miniShop2.Callbacks.Cart.add.response.success = function() {document.location = '/cart.html';}">купить</button>

            хз, выйдет ли оно мне боком, но пока работает! Никаких правок в скриптах, плагинах и функционал кнопки «добавить в корзину» не слетает!
              Kirill Spevakov
              08 августа 2015, 18:37
              0
              При обновлении страницы с корзиной количество товара не увеличивается?
                Василий Наумкин
                08 августа 2015, 20:18
                0
                Зачем на кнопку-то добавлять? Можно же просто при загрузке страницы один раз это указать и всё.
                  Роман
                  02 июля 2016, 18:06
                  0
                  пытаюсь в начале страницы добавить вот такой код:

                  <script type="text/javascript">
                      $(window).load(function() {
                  	miniShop2.Callbacks.Cart.add.response.success = function() {
                  		document.location = '/cart.html';
                  	}
                  </script>
                  при кликании на кнопку «В корзину» ничего не происходит. Ну, в смысле, что товар вроде как добавляется, но остаемся на странице с товаром. Правда, она перезагружается первый раз. При последующих нажатиях перезагрузки не происходит, а справа в углу выскакивает окошечко зеленое, что товар добавился.

                  Если делаю по способу Виктора, т.е. навешиваю на кнопку «В корзину» событие onclick, то при первом кликании точно так же просто страница с товаром перезагружается. А при повторном кликании уже переходим на нужную страницу, т.е. в корзину.

                  и чего не так-то?
                    Роман
                    02 июля 2016, 18:23
                    0
                    кстати, это не может быть связано с тем, что default.js от miniShop подключается в конце страницы, а не в начале?

                    P.S. и подключается он там только после первого кликания на кнопку «В корзину»
                      Роман
                      02 июля 2016, 22:35
                      0
                      не знаю, правильно или нет, но убрал из кнопки событие onclick, и добавил в form action="/cart.html"
                        Роман
                        10 июля 2016, 22:22
                        0
                        Василий, подскажите, пожалуйста. При загрузке страницы с товаром в консоли выскакивает ошибка «ReferenceError: miniShop2 is not defined». После первого клика на кнопку «Добавить в корзину» ошибка исчезает. А при втором клике происходит переход на страницу с корзиной. Что не так?
                    Дмитрий
                    28 марта 2016, 17:24
                    0
                    Не один из вариантов не прокатил. Товар добавляется. но переход не происходит.
                      Николай
                      28 марта 2016, 21:37
                      +1
                      Спасибо тем кто помог и мне решить проблемку :) Добавь в файлик .js вот такой конец:

                      });
                      
                      	});
                      
                      })(jQuery);
                      miniShop2.Callbacks.Cart.add.response.success = function() {
                      	document.location = '/cart.html';
                      }
                      p.s. с "});" сам разберешься, в коде выше лишние скобки…

                      ссылка доп. modx.pro/help/5175/
                        Дмитрий
                        29 марта 2016, 11:56
                        0
                        Спасибо. Помогло)
                      Волков Николай
                      11 июля 2016, 07:48
                      0
                      Мда. Я в упор не понимаю: зачем для решения задачи вообще нужно лезть в скрипты или плагины? Что мешает просто убрать в HTML у формы класс ms2_form?
                        Роман
                        11 июля 2016, 08:43
                        0
                        вопрос здесь как раз в том, что по клику на «Добавить в корзину» перейти сразу в корзину. Если убрать класс, то перехода не будет. Предположим, что добавить в форму action="/cart.html". Тогда переход в корзину случиться, но появляется один неприятный побочный эффект: при обновлении страницы с корзиной количество товаров в корзине увеличивается. Вот и пытаемся сделать как-то без этого. У меня никак не получается заставить работать вот этот код:
                        <script type="text/javascript">
                            $(window).load(function() {
                        	    miniShop2.Callbacks.Cart.add.response.success = function() {
                        		    document.location = '/cart.html';
                        	    };
                        	});
                        </script>
                        при первой загрузке страницы ругается «ReferenceError: miniShop2 is not defined». Т.е. на кнопку «Добавить в корзину» надо кликнуть два раза, чтобы сработало. Только тогда происходит переход в корзину. Но, тогда там уже два товара вместо одного :-((
                          Волков Николай
                          11 июля 2016, 14:09
                          0
                          Ну тут все достаточно просто на самом деле. У вас ошибка выползает, потому что код вашего js скрипта внутри HTML находится перед тем местом, где вызывается минишоповский скрипт default.js. Вторая ошибка в том, в скрипте нужно написать document.location.href
                            Роман
                            11 июля 2016, 21:16
                            0
                            Отвечу по порядку (надеюсь, Василий подключится ;-)

                            потому что код вашего js скрипта внутри HTML находится перед тем местом, где вызывается минишоповский скрипт default.js
                            1. Василий сам рекомендует размещать этот код вначале страницы
                            2. минишоповский скрипт default.js самостоятельно подключается после первого клика на кнопку «Добавить в корзину». При попытке его подключения вверху до нашего кода до первого клика вываливается ошибка «ReferenceError: miniShop2Config is not defined». После первого клика внизу страницы default.js подключается еще раз. Так что картина не меняется.
                            Создается впечатление, что до первого клика браузер не догадывается, что у нас установлен минишоп. А после первого клика всё приходит в норму

                            в скрипте нужно написать document.location.href
                            1. Код я копировал у Василия
                            2. Судя по поведению страницы, браузер сам догадывается, что там должно быть href написано
                            3. Спасибо, за подсказку. Дописал href
                            4. Легче, правда, все равно не стало :-)
                              Волков Николай
                              12 июля 2016, 01:53
                              0
                              Разумеется, что легче не стало, поскольку исходя только из:
                              минишоповский скрипт default.js самостоятельно подключается после первого клика на кнопку «Добавить в корзину»

                              Что теоритеская база слабовата. Во-первых, минишоповский скрипт подключается при загрузке страницы. Во-вторых, если загуглите ошибку, то убедитесь в том, что она была вызвана тем, что нельзя необъявленному объекту присвоить метод. То есть, указанный вами скрипт выполняется раньше подключения минишоповского скрипта, в котором, собственно этот объект и задан. В-третьих, имеет смысл разобраться в том, что в вашем коде написано. В нем указано то, что в случае Успешного выполнения АЯКС запроса на добавление в корзину, сразу после НЕГО должен будет происходить редирект на строчку корзины.

                              А теперь внимание вопрос: почему у вас получается так, как получается? То, что во время загрузки окна редирект не назначился ещё не означает то, что и минишоповский скрипт не повесил на кнопку добавления в корзину выполнение своего АЯКС запроса. При первом нажатии именно добавление АЯКСевское и происходит, но вы просто этого не видите. Другой вопрос, что что-то повторно запускает все то, что было повешено на window.load и в том числе и ваш скрипт, который, уже существующему объекту miniShop2, назначает редирект после успешного добавления в корзину, что собственно и происходит во время второго нажатия и, как следствие, повторного добавления в корзину.
                            Волков Николай
                            11 июля 2016, 14:11
                            0
                            Далее, если у формы убрать класс, то переход должен происходить. Вами не был указан атрибут для страницы перехода actions. Другой вопрос в том, что действительно, если перезагружать страницу в корзину будет расти количество товаров. Это лечится написанием плагина
                              Роман
                              11 июля 2016, 21:18
                              0
                              так я же писал, что добавил action.

                              Это лечится написанием плагина
                              так получается, что в одном месте мы сильно упрощаем задачу: убираем класс ms2_form, но при этом сами себе усложняем жизнь тем, что из-за этого приходится писать плагин в корзине
                                Волков Николай
                                12 июля 2016, 02:22
                                +1
                                Просто невероятно усложняем, написанием 3-5 строчек. И то, необходимых лишь для того, чтобы отправкой header с Location корзины, сбросить переданные данные методом POST, иначе при перезагрузке страницы произойдёт ю повторное добавление в корзину.

                                Да и ещё, в отличии от варианта с переадресацией через js, у этого способа есть два плюса:
                                1) Универсальность. Без проблем можно сделать, чтобы одни товары АЯКСом добавлялись без перехода в корзину, а другие наоборот с переходом, даже если оба варианта одновременно будут находиться на одной страничке. Поведение будет зависеть только от наличия класса ms2_form у формы.
                                2) Накосячить сложнее новичкам будет, чтобы это все не работало. Callback — это очень крутая фишка в JavaScript, но без базы знаний одна ошибка и море вопросов.
                                  Роман
                                  12 июля 2016, 11:34
                                  0
                                  добавляю в заголовок корзины:
                                  <?php
                                  $url = 'http://mysite.ru/cart.html';
                                  header("Location: $url");
                                  страница не грузится с формулировкой «Неверное перенаправление» :-(
                                    Волков Николай
                                    12 июля 2016, 23:08
                                    0
                                    В смысле в заголовок? Короче, сейчас я скину код с инструкцией и даже примером на субдомене тестовом.
                                      Роман
                                      14 июля 2016, 15:44
                                      0
                                      получилось?
                          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                          33