简体   繁体   English

如何在prestashop中以编程方式在购物车中添加产品

[英]how to add product in cart programmatically in prestashop

I am using prestashop 1.5.3 and i am developing a payment gateway problem is this i couldn't find how to add product programmatically in cart and order for adding payment fee 我正在使用prestashop 1.5.3 ,我正在开发支付网关的问题是我找不到如何在购物车中以编程方式添加产品并订购添加支付费用

Please anyone help me 请有人帮帮我

Below is the code for adding multiple products programatically. 以下是以编程方式添加多个产品的代码。 Can be use to add one product also. 也可以用来添加一个产品。 Put these code in a file called test.php on your website root and then run it like this /test.php??products_ids=11,9,10 where 11, 9,10 are 3 products id. 将这些代码放在您的网站根目录下名为test.php的文件中,然后像/test.php??products_ids=11,9,10那样运行它,其中11,9,10是3个产品ID。 Hope this helps. 希望这可以帮助。

<?php
require(dirname(__FILE__).'/config/config.inc.php');

$context=Context::getContext();//new Cart();
$id_cart=$context->cookie->__get('id_cart');

$products_ids=$_GET['products_ids']; // comma seprated products id example : test.php?products_ids=1,2,3

$products_ids_array=explode(",",$products_ids);

if(count($products_ids_array)>0){
    $cart=new Cart($id_cart);
    $cart->id_currency=2;
    $cart->id_lang=1;
    foreach($products_ids_array as $key=>$id_product){
        $cart->updateQty(1, $id_product);
    }
}
?>

you can place this code in a php file in your Root directory and use a simple form directing to this page containing product id & quantity. 您可以将此代码放在Root目录中的php文件中,并使用一个简单的表单指向包含产品ID和数量的页面。

Just change: 只是改变:

<?php    
$idProduct= 19825 to $idProduct=$_POST["txtproductid"]
$qty=5 to $qty=$_POST["txtqty"]; 

$useSSL = true;

include('/config/config.inc.php');

include('/header.php');
global $params; 
$errors = array();

$idProduct =19825;
$qty=5; 

if ($cookie->isLogged())
{
    /* Cart already exists */
    if ((int)$cookie->id_cart)
    {
        $cart = new Cart((int)$cookie->id_cart);
    }
    if (!isset($cart) OR !$cart->id)
    {
        $cart = new Cart();
        $cart->id_customer = (int)($cookie->id_customer);
        $cart->id_address_delivery = (int)  (Address::getFirstCustomerAddressId($cart->id_customer));
        $cart->id_address_invoice = $cart->id_address_delivery;
        $cart->id_lang = (int)($cookie->id_lang);
        $cart->id_currency = (int)($cookie->id_currency);
        $cart->id_carrier = 1;
        $cart->recyclable = 0;
        $cart->gift = 0;
        $cart->add();
        $cookie->id_cart = (int)($cart->id);    
    }


/* get product id and product attribure id */
        $data = explode(",", $product);
        $idProduct = $data[0];  */
        $idProductAttribute = $data[1]; 

        if ($qty != '') 
        {  

 $producToAdd = new Product((int)($idProduct), true, (int)($cookie->id_lang));

 if ((!$producToAdd->id OR !$producToAdd->active) AND !$delete)
/* Product is no longer available, skip product */ 
                continue;

            /* Check the quantity availability  */
if ($idProductAttribute > 0 AND is_numeric($idProductAttribute))
            {
if (!$producToAdd->isAvailableWhenOutOfStock($producToAdd->out_of_stock) AND !Attribute::checkAttributeQty((int)$idProductAttribute, (int)$qty))
                { 
/* There is not enough product attribute in stock - set customer qty to current stock on hand */ 
            $qty = getAttributeQty($idProductAttribute); 
                } 
            }
            elseif (!$producToAdd->checkQty((int)$qty))
                /* There is not enough product in stock - set customer qty to current stock on hand */ 
             $qty = $producToAdd->getQuantity(idProduct); 


$updateQuantity = $cart->updateQty((int)($qty), (int)($idProduct), (int)($idProductAttribute), NULL, 'up');
           $cart->update();

        }


    /* redirect to cart 
    if (!sizeof($errors)) */

    Tools::redirect('order.php');


}
else
{
 Tools::redirect('/index.php');
}

$smarty->assign(array(
'id_customer' => (int)($cookie->id_customer),
'errors' => $errors
));

include_once('/footer.php');

If you develop a payment module, you should first check how are made other payments modules, for exemple Ogone or Paypal module. 如果您开发支付模块,您应首先检查如何制作其他支付模块,例如Ogone或Paypal模块。 You can find them here : https://github.com/PrestaShop/PrestaShop-modules 你可以在这里找到它们: https//github.com/PrestaShop/PrestaShop-modules

The method used in prestashop to add / delete products from cart is Cart->updateQty() (in file classes/Cart.php). prestashop中用于从购物车添加/删除产品的方法是Cart-> updateQty()(在文件类/ Cart.php中)。

<script>
        $(document).ready(function(){
            $.ajax({
            type: 'POST',
            headers: { "cache-control": "no-cache" },
            url: 'yourshopurl',
            async: true,
            cache: false,
            dataType: 'json',
                        //( (parseInt(idCombination) && idCombination != null) ? '&ipa=' + parseInt(idCombination): '')
                        data: 'controller=cart&add=1&ajax=true&qty=1&id_product=247&token=' + static_token ,
            success: function(jsonData)
            {
                console.log("products added");
            }
        });
        });
    </script>

Now just add id of product...or any combinations (commented) 现在只需添加产品ID ...或任何组合(评论)

// Add cart if no cart found
if (!$this->context->cart->id) {
    if (Context::getContext()->cookie->id_guest) {
        $guest = new Guest(Context::getContext()->cookie->id_guest);
        $this->context->cart->mobile_theme = $guest->mobile_theme;
    }
    $this->context->cart->add();
    if ($this->context->cart->id) {
        $this->context->cookie->id_cart = (int)$this->context->cart->id;
    }
}

// Add product
$Cart = $this->context->cart;
$Cart->updateQty(1, 13, 1, false);

/* Optional parameters  */
// classes/cart.php
// public function updateQty(
//     $quantity,
//     $id_product,
//     $id_product_attribute = null,
//     $id_customization = false,
//     $operator = 'up',
//     $id_address_delivery = 0,
//     Shop $shop = null,
//     $auto_add_cart_rule = true,
//     $skipAvailabilityCheckOutOfStock = false
// )

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Prestashop购物车和订购商品,如何“确认”购物车并使其成为来自外部付款方式的订单 - Prestashop cart and order lifesycle, how to “confirm” a cart and let it become an order coming from external payment method 如何重定向到购物车网址页面 - How to redirect Add to cart url page Prestashop 1.6无法通过购物车ID查找订单 - Prestashop 1.6 unable to find Order via Cart ID 根据 WooCommerce 购物车中的商品数量和产品类别禁用支付网关 - Disable payment gateway based on number of items and product category in WooCommerce cart 基于“添加到购物车”按钮更改Woocmmerce默认付款网关 - Change Woocmmerce Default Payment gateway Based on Add To Cart Button 根据 Woocommerce 中的购物车总金额添加或删除支付网关 - add or remove payment gateways based on cart total amount in Woocommerce 如何在Prestashop中为第三方ipg创建自定义付款模块 - How to create Custom payment module for thirdparty ipg in prestashop 使用单个请求管理PayPal捐赠,添加到购物车和订阅 - Managing PayPal Donations, Add to Cart and Subscription using single request WooCommerce 将多个产品的自定义重定向添加到购物车 - WooCommerce Add to Cart custom redirection for multiple products Variations 添加一个复选框作为 WooCommerce 管理产品选项,禁用支付网关 - Add a checkbox as WooCommerce admin product option that disables payment gateways
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM