Переход в корзину после добавления товара
Доброго времени суток! открыл файл /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')
но у меня все равно ничего не происходит уже второй день голову ломаю, что я не так сделал? Комментарии: 33
Не совсем понятно куда вы вставили, можете выложить код, так чтобы было видно как и куда вы вставили?
если честно куда только я его не вставлял, а так сразу после miniShop2.Cart.add(); у меня либо переходило в корзину но она была пустой
в MODx есть замечательные штуки, плагинами зовутся.
Собственно MS2 активно их использует.
Рекомендую.
Например для события корзины есть
А default.js перезапишется с первым же обновлением
Собственно MS2 активно их использует.
Рекомендую.
Например для события корзины есть
msOnAddToCart
msOnBeforeAddToCart
msOnBeforeChangeInCart
msOnBeforeEmptyCart
msOnBeforeRemoveFromCart
msOnChangeInCart
msOnEmptyCart
msOnRemoveFromCart
используйте нужный вам, и напишите простой forward.А default.js перезапишется с первым же обновлением
так а можно узнать путь к расположению?
Вы про плагин?
Конечно — путь Вам вот сюда!
rtfm.modx.com/revolution/2.x/developing-in-modx/basic-development/plugins
Конечно — путь Вам вот сюда!
rtfm.modx.com/revolution/2.x/developing-in-modx/basic-development/plugins
bezumkin.ru/modx/minishop2/classes/725/#comment-12494 я хотел сделать согласно вот этому посту)
Ну и так конечно можно раз Василий сказал.
Расширь метод miniShop2.Cart.add(); и будет счастье тебе, но я например для безусловной переадресации (т.е никаких popup итп ) юзал бы плагин, так проще мне кажется, хотя кому как
Расширь метод miniShop2.Cart.add(); и будет счастье тебе, но я например для безусловной переадресации (т.е никаких popup итп ) юзал бы плагин, так проще мне кажется, хотя кому как
Андрей, умный человек Василий, сделал системную настройку для минишопа — скрипт по умолчанию и цсс по умолчанию, сразу после установки стоит переименовать дефолтный js и css и указать там к ним путь — и никакой головной боли с перезаписываем по умолчанию.
да это то сделал давно) осталось ток понять как его поправить)
так что есть у кого то еще какие то соображения? кроме как ссылок
Вы или не не поняли или прочитали невнимательно, нужно изменить сам метод miniShop2.Cart.add, который находится примерно на 170 строке.
спс, все сделал!
А вот моё решение:
хз, выйдет ли оно мне боком, но пока работает! Никаких правок в скриптах, плагинах и функционал кнопки «добавить в корзину» не слетает!
<button class="btn" type="submit" name="ms2_action" value="cart/add" onclick="miniShop2.Callbacks.Cart.add.response.success = function() {document.location = '/cart.html';}">купить</button>
хз, выйдет ли оно мне боком, но пока работает! Никаких правок в скриптах, плагинах и функционал кнопки «добавить в корзину» не слетает!
При обновлении страницы с корзиной количество товара не увеличивается?
Зачем на кнопку-то добавлять? Можно же просто при загрузке страницы один раз это указать и всё.
пытаюсь в начале страницы добавить вот такой код:
Если делаю по способу Виктора, т.е. навешиваю на кнопку «В корзину» событие onclick, то при первом кликании точно так же просто страница с товаром перезагружается. А при повторном кликании уже переходим на нужную страницу, т.е. в корзину.
и чего не так-то?
<script type="text/javascript">
$(window).load(function() {
miniShop2.Callbacks.Cart.add.response.success = function() {
document.location = '/cart.html';
}
</script>
при кликании на кнопку «В корзину» ничего не происходит. Ну, в смысле, что товар вроде как добавляется, но остаемся на странице с товаром. Правда, она перезагружается первый раз. При последующих нажатиях перезагрузки не происходит, а справа в углу выскакивает окошечко зеленое, что товар добавился.Если делаю по способу Виктора, т.е. навешиваю на кнопку «В корзину» событие onclick, то при первом кликании точно так же просто страница с товаром перезагружается. А при повторном кликании уже переходим на нужную страницу, т.е. в корзину.
и чего не так-то?
кстати, это не может быть связано с тем, что default.js от miniShop подключается в конце страницы, а не в начале?
P.S. и подключается он там только после первого кликания на кнопку «В корзину»
P.S. и подключается он там только после первого кликания на кнопку «В корзину»
не знаю, правильно или нет, но убрал из кнопки событие onclick, и добавил в form action="/cart.html"
Василий, подскажите, пожалуйста. При загрузке страницы с товаром в консоли выскакивает ошибка «ReferenceError: miniShop2 is not defined». После первого клика на кнопку «Добавить в корзину» ошибка исчезает. А при втором клике происходит переход на страницу с корзиной. Что не так?
Не один из вариантов не прокатил. Товар добавляется. но переход не происходит.
Спасибо тем кто помог и мне решить проблемку :) Добавь в файлик .js вот такой конец:
ссылка доп. modx.pro/help/5175/
});
});
})(jQuery);
miniShop2.Callbacks.Cart.add.response.success = function() {
document.location = '/cart.html';
}
p.s. с "});" сам разберешься, в коде выше лишние скобки…ссылка доп. modx.pro/help/5175/
Спасибо. Помогло)
Мда. Я в упор не понимаю: зачем для решения задачи вообще нужно лезть в скрипты или плагины? Что мешает просто убрать в HTML у формы класс ms2_form?
вопрос здесь как раз в том, что по клику на «Добавить в корзину» перейти сразу в корзину. Если убрать класс, то перехода не будет. Предположим, что добавить в форму 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». Т.е. на кнопку «Добавить в корзину» надо кликнуть два раза, чтобы сработало. Только тогда происходит переход в корзину. Но, тогда там уже два товара вместо одного :-((
Ну тут все достаточно просто на самом деле. У вас ошибка выползает, потому что код вашего js скрипта внутри HTML находится перед тем местом, где вызывается минишоповский скрипт default.js. Вторая ошибка в том, в скрипте нужно написать document.location.href
Отвечу по порядку (надеюсь, Василий подключится ;-)
2. минишоповский скрипт default.js самостоятельно подключается после первого клика на кнопку «Добавить в корзину». При попытке его подключения вверху до нашего кода до первого клика вываливается ошибка «ReferenceError: miniShop2Config is not defined». После первого клика внизу страницы default.js подключается еще раз. Так что картина не меняется.
Создается впечатление, что до первого клика браузер не догадывается, что у нас установлен минишоп. А после первого клика всё приходит в норму
2. Судя по поведению страницы, браузер сам догадывается, что там должно быть href написано
3. Спасибо, за подсказку. Дописал href
4. Легче, правда, все равно не стало :-)
потому что код вашего js скрипта внутри HTML находится перед тем местом, где вызывается минишоповский скрипт default.js1. Василий сам рекомендует размещать этот код вначале страницы
2. минишоповский скрипт default.js самостоятельно подключается после первого клика на кнопку «Добавить в корзину». При попытке его подключения вверху до нашего кода до первого клика вываливается ошибка «ReferenceError: miniShop2Config is not defined». После первого клика внизу страницы default.js подключается еще раз. Так что картина не меняется.
Создается впечатление, что до первого клика браузер не догадывается, что у нас установлен минишоп. А после первого клика всё приходит в норму
в скрипте нужно написать document.location.href1. Код я копировал у Василия
2. Судя по поведению страницы, браузер сам догадывается, что там должно быть href написано
3. Спасибо, за подсказку. Дописал href
4. Легче, правда, все равно не стало :-)
Разумеется, что легче не стало, поскольку исходя только из:
Что теоритеская база слабовата. Во-первых, минишоповский скрипт подключается при загрузке страницы. Во-вторых, если загуглите ошибку, то убедитесь в том, что она была вызвана тем, что нельзя необъявленному объекту присвоить метод. То есть, указанный вами скрипт выполняется раньше подключения минишоповского скрипта, в котором, собственно этот объект и задан. В-третьих, имеет смысл разобраться в том, что в вашем коде написано. В нем указано то, что в случае Успешного выполнения АЯКС запроса на добавление в корзину, сразу после НЕГО должен будет происходить редирект на строчку корзины.
А теперь внимание вопрос: почему у вас получается так, как получается? То, что во время загрузки окна редирект не назначился ещё не означает то, что и минишоповский скрипт не повесил на кнопку добавления в корзину выполнение своего АЯКС запроса. При первом нажатии именно добавление АЯКСевское и происходит, но вы просто этого не видите. Другой вопрос, что что-то повторно запускает все то, что было повешено на window.load и в том числе и ваш скрипт, который, уже существующему объекту miniShop2, назначает редирект после успешного добавления в корзину, что собственно и происходит во время второго нажатия и, как следствие, повторного добавления в корзину.
минишоповский скрипт default.js самостоятельно подключается после первого клика на кнопку «Добавить в корзину»
Что теоритеская база слабовата. Во-первых, минишоповский скрипт подключается при загрузке страницы. Во-вторых, если загуглите ошибку, то убедитесь в том, что она была вызвана тем, что нельзя необъявленному объекту присвоить метод. То есть, указанный вами скрипт выполняется раньше подключения минишоповского скрипта, в котором, собственно этот объект и задан. В-третьих, имеет смысл разобраться в том, что в вашем коде написано. В нем указано то, что в случае Успешного выполнения АЯКС запроса на добавление в корзину, сразу после НЕГО должен будет происходить редирект на строчку корзины.
А теперь внимание вопрос: почему у вас получается так, как получается? То, что во время загрузки окна редирект не назначился ещё не означает то, что и минишоповский скрипт не повесил на кнопку добавления в корзину выполнение своего АЯКС запроса. При первом нажатии именно добавление АЯКСевское и происходит, но вы просто этого не видите. Другой вопрос, что что-то повторно запускает все то, что было повешено на window.load и в том числе и ваш скрипт, который, уже существующему объекту miniShop2, назначает редирект после успешного добавления в корзину, что собственно и происходит во время второго нажатия и, как следствие, повторного добавления в корзину.
Далее, если у формы убрать класс, то переход должен происходить. Вами не был указан атрибут для страницы перехода actions. Другой вопрос в том, что действительно, если перезагружать страницу в корзину будет расти количество товаров. Это лечится написанием плагина
так я же писал, что добавил action.
Это лечится написанием плагинатак получается, что в одном месте мы сильно упрощаем задачу: убираем класс ms2_form, но при этом сами себе усложняем жизнь тем, что из-за этого приходится писать плагин в корзине
Просто невероятно усложняем, написанием 3-5 строчек. И то, необходимых лишь для того, чтобы отправкой header с Location корзины, сбросить переданные данные методом POST, иначе при перезагрузке страницы произойдёт ю повторное добавление в корзину.
Да и ещё, в отличии от варианта с переадресацией через js, у этого способа есть два плюса:
1) Универсальность. Без проблем можно сделать, чтобы одни товары АЯКСом добавлялись без перехода в корзину, а другие наоборот с переходом, даже если оба варианта одновременно будут находиться на одной страничке. Поведение будет зависеть только от наличия класса ms2_form у формы.
2) Накосячить сложнее новичкам будет, чтобы это все не работало. Callback — это очень крутая фишка в JavaScript, но без базы знаний одна ошибка и море вопросов.
Да и ещё, в отличии от варианта с переадресацией через js, у этого способа есть два плюса:
1) Универсальность. Без проблем можно сделать, чтобы одни товары АЯКСом добавлялись без перехода в корзину, а другие наоборот с переходом, даже если оба варианта одновременно будут находиться на одной страничке. Поведение будет зависеть только от наличия класса ms2_form у формы.
2) Накосячить сложнее новичкам будет, чтобы это все не работало. Callback — это очень крутая фишка в JavaScript, но без базы знаний одна ошибка и море вопросов.
добавляю в заголовок корзины:
<?php
$url = 'http://mysite.ru/cart.html';
header("Location: $url");
страница не грузится с формулировкой «Неверное перенаправление» :-(
В смысле в заголовок? Короче, сейчас я скину код с инструкцией и даже примером на субдомене тестовом.
получилось?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.