自定义"添加到购物车"按钮在PrestaShop中抛出错误的错误

时间:2014-07-30 12:00:36

标签: php ajax prestashop prestashop-1.6

我需要在自定义页面(不是产品页面)上有一个“添加到购物车”按钮,基本上是一个按钮,我可以传递某个产品ID并调用ajax-cart.js函数“添加”。

现在,我尝试了这段代码:

<a class="exclusive_small ajax_add_to_cart_button" title="{l s='Add to cart'}" onclick="ajaxCart.add(26, null, false, null, 1, null)">{l s='Add to cart'}</a>

但是,虽然确实将具有指定ID(在这种情况下为26)的产品添加到购物车,但它也会触发一个包含2个错误的警告框:未找到产品此产品不再可用。

我已经设法在CartController.php中找到处理这些错误的代码:

protected function processChangeProductInCart()
{
    $mode = (Tools::getIsset('update') && $this->id_product) ? 'update' : 'add';

    if ($this->qty == 0)
        $this->errors[] = Tools::displayError('Null quantity.', !Tools::getValue('ajax'));
    elseif (!$this->id_product)
        $this->errors[] = Tools::displayError('Product not found', !Tools::getValue('ajax'));

    $product = new Product($this->id_product, true, $this->context->language->id);
    if (!$product->id || !$product->active)
    {
        $this->errors[] = Tools::displayError('This product is no longer available.', !Tools::getValue('ajax'));
        return;
    }

但是我不明白它是如何工作的,以及为什么错误显示它何时正常工作。

我做错了什么,这是一个错误吗?

1 个答案:

答案 0 :(得分:0)

在您的自定义页面中,首先您需要获取产品ID和产品属性ID,然后单击您的按钮,您必须将这些值提交给您的前端控制器(您制作),并在该控制器中获得这些ID和添加到新购物车。您必须编写如下代码:

创建您的tpl文件 - &gt;

abc.tpl

        <input type="button" name="vss_add_to_cart" value="{l s='Add to cart' mod='your_module_name'}" class="vss_btn1" id="vss_add_to_cart"  style="background:{$background|escape:'htmlall':'UTF-8'};color:{$text|escape:'htmlall':'UTF-8'};border:{$border|escape:'htmlall':'UTF-8'};"/>

现在你必须在同一个文件中点击那个buuton写一些脚本:

 </script>
 $( "#vss_add_to_cart" ).one( "click", function() {
        var id_product_attribute = document.getElementById('idCombination').value;
        var id_product = document.getElementById('product_page_product_id').value;
        var quantity = document.getElementById('quantity_wanted').value;
        $.post(
                '{$link|escape:'quotes':'UTF-8'}',
                {
                    id: id_product,
                    ipa: id_product_attribute,
                    qty: quantity
                },
        function (data) {
            window.location.replace(data);
        }
        );
    });
    </script>

因为{$ link}是你想要获取值的地方,实际上你需要在你的模块文件夹中创建一个控制器,并在那里创建一个前端文件夹,如:

C:\wamp\www\prestashop\modules\oneclickcheckout\controllers\front

现在你必须创建一个文件your_module_name.php并编写代码:

your_module_name.php

class OneclickcheckoutOneclickcheckoutModuleFrontController extends ModuleFrontController
{

    public function initContent()
    {

        $qty = Tools::getValue('qty');
        $id_product = Tools::getValue('id');
        $id_product_attribute = Tools::getValue('ipa');

            $this->context->cart->add();
            if ($this->context->cart->id) {
                $this->context->cookie->id_cart = (int) $this->context->cart->id;
            }
            $this->context->cart->updateQty($qty, $id_product, $id_product_attribute);
            $link = $this->context->link->getPageLink('order');
            echo $link;
            die;
        } 
}

然后在您的数据库中添加了一个新购物车,并且还插入了相应的购物车产品详细信息。我希望这对您有所帮助。