0

我需要在自定义页面(不是产品页面)上有一个“添加到购物车”按钮,基本上是一个可以传递某个产品 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 个错误的警报框:Product not found,并且This product is no longer available 。

我设法在 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;
    }

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

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

4

1 回答 1

0

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

创建你的 tpl 文件->

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'};"/>

现在您必须为单击同一文件中的该按钮编写一些脚本:

 </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;
        } 
}

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

于 2016-01-21T10:31:56.330 回答