magento: строка запроса URL для добавления продукта и применения купона на скидку в корзину

Я новичок, после обширных исследований и исследований я могу выяснить следующее:

Чтобы добавить товар в корзину, я могу использовать

/checkout/cart/add?product=76&qty=1

чтобы применить код скидки я могу использовать

/checkout/cart/couponPost?coupon_code=WQ9D-XXXX

Код для него находится в файле:

/public_html/app/code/local/Mage/Checkout/controllers/-

Я хотел бы добавить продукт и применить код скидки в одной ссылке, например:

/checkout/cart/couponPost?product=76&qty=1&coupon_code=WQ9D-XXXX

OR

/checkout/cart/add?product=76&qty=1&coupon_code=WQ9D-XXXX

ИЛИ Любые другие средства?

Есть ли способ заставить это работать? Идея состоит в том, чтобы встроить эту ссылку в рассылку, чтобы одним кликом пользователь мог добавить товар в корзину и получить скидку.

Я пробовал звонить $this->couponPostAction(); из function addAction() и наоборот, но это не работает!


person rukpat    schedule 05.11.2012    source источник
comment
Вы можете создать собственный модуль, который сочетает в себе логику из корзины/дополнения и корзины/купона или создать статическую страницу, которая делает 2 отдельных вызова ajax для добавления идентификатора продукта и кода купона.   -  person Renon Stewart    schedule 05.11.2012
comment
Я не думаю, что это сработает так, как вы пытаетесь. вызываемые контроллеры просто отбрасывают неиспользуемые переменные запроса. вы, вероятно, можете сделать это с помощью javascript. ссылки на /add?product=X, а затем просто измените phtml корзины/оформления заказа вашей темы, чтобы установить расположение документа для вызова купонПост   -  person Michael Tabolsky    schedule 05.11.2012


Ответы (3)


Заработало без изменения кода,

'http://www.example.com/checkout/cart/add?Product=76=1_url=http://www.example.com/index.php/checkout/cart/couponPost?coupon_code=WQ9D-XXXX_url=http ://www.example.com/checkout/cart/'

return_url должен быть закодирован.

См.: http://www.magentocommerce.com/boards/viewthread/296763/.

person rukpat    schedule 05.11.2012
comment
Искали это как 2 года! Хорошая находка! - person Grimace of Despair; 13.11.2012
comment
Ваша внешняя ссылка больше не действительна. - person DrCord; 29.07.2015

ответ рукпата не работает в Magento 1.8. Вам нужно отформатировать URL-адрес и строку запроса таким образом, как только вы расширили метод addAction CartController:

http://www.example.com/checkout/cart/add?product=76&qty=1&return_url=http://www.example.com/index.php/checkout/cart/couponPost?coupon_code=WQ9D-XXXX

Вы также можете опустить последний параметр return_url. Нет необходимости включать ; (точки с запятой).

Вы также можете добавить несколько продуктов в URL-адрес с несколькими количествами, просто выполнив:

http://www.example.com/checkout/cart/add?product=76&related_product=28,28,28&return_url=http://www.example.com/index.php/checkout/cart/couponPost?coupon_code=WQ9D-XXXX

Таким образом, просто добавив &related_product=28,28,28 с несколькими ссылками на идентификатор продукта, вы сможете добавить несколько количеств этого товара. Не очень элегантно, но работает.

Конечно, было бы лучше расширить метод addAction CartController.

Чтобы это решение работало в Magento 1.8 и выше, вам необходимо изменить CartController следующим образом:

ПРИМЕЧАНИЕ. Замените «Пространство имен» на ваше собственное пространство имен (название компании или ваше имя и т. д.).

etc/modules/Namespace_AddProductFromUrl.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Namespace_AddProductFromUrl>
            <active>true</active>
            <codePool>local</codePool>
        </Namespace_AddProductFromUrl>
    </modules>
</config>

app/code/local/Namespace/AddProductFromUrl/controllers/Checkout/CartController.php

<?php
    require_once 'Mage/Checkout/controllers/CartController.php';

    class Namespace_AddProductFromUrl_Checkout_CartController extends Mage_Checkout_CartController {
        # overloaded addAction
        public function addAction()
        {        
            // generate form_key if missing or invalid
            if ( ! ($formKey = $this->getRequest()->getParam('form_key', null)) or $formKey != Mage::getSingleton('core/session')->getFormKey())
            {
                $this->getRequest()->setParams(array('form_key' => Mage::getSingleton('core/session')->getFormKey()));
            }        

            // do parent actions
            parent::addAction();
        }
    }

app/code/local/Namespace/AddProductFromUrl/etc/config.xml

<config>
    <frontend>
        <routers>
            <checkout>
                <args>
                    <modules>
                        <Namespace_AddProductFromUrl before="Mage_Checkout">Namespace_AddProductFromUrl_Checkout</Namespace_AddProductFromUrl>
                    </modules>
                </args>
            </checkout>
        </routers>
    </frontend>
</config>
person Gareth Daine    schedule 19.03.2014
comment
Пробовал это на Magento 1.9, и это не работает должным образом. Я думаю, что нужно другое объявление самого модуля. Я изменил основной CartController.php, и это сработало, но не идеально first-access-and-works-on-2nd/56133214#56133214" title="добавление продуктов в корзину по URL-адресу дает 404 при первом доступе и работает на 2-м"> stackoverflow.com/questions/56126813/ - person Mike; 14.05.2019

Я могу убедиться, что приведенный выше код Газа с Namespace_AddProductFromUrl работает на 1.8.

Кроме того, если случайно ваш продукт является комплектным, вы должны использовать этот URL-адрес формата:

http://domain.com/en/checkout/cart/add?product=24&qty=1&bundle_option%5b2%5d=4&bundle_option%5b3%5d=8

person eyal_katz    schedule 05.06.2014
comment
это должен быть комментарий, а не ответ. - person DrCord; 29.07.2015