user1645055
user1645055

Reputation:

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

Please anyone help me

Upvotes: 4

Views: 20427

Answers (5)

Pelingier
Pelingier

Reputation: 133

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.

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');

Upvotes: 3

Felipe
Felipe

Reputation: 78

// 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
// )

Upvotes: 0

Jaroslav Štreit
Jaroslav Štreit

Reputation: 430

<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)

Upvotes: 0

Dheeraj
Dheeraj

Reputation: 39

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. 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);
    }
}
?>

Upvotes: 3

Rapha&#235;l Mali&#233;
Rapha&#235;l Mali&#233;

Reputation: 4002

If you develop a payment module, you should first check how are made other payments modules, for exemple Ogone or Paypal module. You can find them here : 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).

Upvotes: 2

Related Questions