Das programmgesteuerte Hinzufügen eines Produkts zum Warenkorb gibt den leeren Preis zurück

7

Ich habe versucht, ein Produkt mithilfe der folgenden Codezeilen programmgesteuert in den Warenkorb zu legen. Es scheint zu funktionieren und das Produkt erfolgreich hinzuzufügen. Aus irgendeinem Grund wird der Preis für neu hinzugefügte Produkte immer auf Null gesetzt. Wie kann ich dies verhindern und das Produkt zulassen? tatsächlicher Preis des Produkts, das für den Warenkorb festgelegt werden soll?

<?php

 error_reporting(E_ALL);
 ini_set('display_errors', 1);

require_once("app/Mage.php");
umask(0);
Mage::app('default');



 function mres($value)
{
    $search = array("\\",  "\x00", "\n",  "\r",  "'",  '"', "\x1a");
    $replace = array("\\\\","\\0","\\n", "\\r", "\'", '\"', "\\Z");

    return str_replace($search, $replace, $value);
}


echo "testing";
print_r($_POST);



$fname = mres( $_POST['fname'] );
$lname = mres( $_POST['lname'] );
$email = mres( $_POST['email'] );
$day = mres( $_POST['day'] );
$month = mres( $_POST['month'] );
$year = mres( $_POST['year'] );
$phone = mres( $_POST['phone'] );
$mobile = mres( $_POST['mobile'] );
$city = mres( $_POST['city'] );
$address = mres( $_POST['address'] );
$discount = mres( $_POST['discount'] );
$quantity = mres( $_POST['quantity'] );
$comments = mres( $_POST['comments'] );
$url = mres( $_POST['url'] );
$store = mres( $_POST['store'] );
$store_id = mres( $_POST['store_id'] );
$web_id = mres( $_POST['web_id'] );
$product_id = mres( $_POST['product_id'] );
$sku = mres( $_POST['sku'] );

setcookie('fname', $fname);
setcookie('lname', $lname);
setcookie('email', $email);
//setcookie('age', $age);
setcookie('phone', $phone);
setcookie('mobile', $mobile);
setcookie('city', $city);
setcookie('address', $address);



$customer = Mage::getModel('customer/customer');
//$customer  = new Mage_Customer_Model_Customer();
$password = substr(str_shuffle(md5(time())),0,8);;

$customer->setWebsiteId(Mage::app()->getWebsite()->getId());
$customer->loadByEmail($email);


//Zend_Debug::dump($customer->debug()); 

$isNew = 0;
if(!$customer->getId()) {
    $customer->setEmail($email);
    $customer->setFirstname($fname);
    $customer->setLastname($lname);
    $customer->setPassword($password);
    $isNew = 1;
}
try {
    $customer->save();
    $customer->setConfirmation(null);
    $customer->save();

    if($isNew)
    {
        $customer->sendNewAccountEmail();


        $ch = curl_init();

        //set the url, number of POST vars, POST data
        curl_setopt($ch,CURLOPT_URL, "//sameurl.php");
        curl_setopt($ch,CURLOPT_POST, count($_POST));
        curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);

        //execute post
        $result = curl_exec($ch);

        //close connection
        curl_close($ch);


    }

    Mage::getSingleton('customer/session')->loginById($customer->getId());
}
catch (Exception $ex) {
    //Zend_Debug::dump($ex->getMessage());
}





//Build billing and shipping address for customer, for checkout
$_custom_address = array (
    'firstname' => $fname,
    'lastname' => $lname,
    'street' => array (
        '0' => $address,
        '1' => '',
    ),
    'city' => $city,
    'region_id' => '',
    'region' => '',
    'postcode' => '0000',
    'country_id' => 'PK',
    'telephone' => $phone . '-' . $mobile,
);
//$customAddress = Mage::getModel('customer/address')
$customAddress = new Mage_Customer_Model_Address();
$customAddress->setData($_custom_address)
            ->setCustomerId($customer->getId())
            ->setIsDefaultBilling('1')
            ->setIsDefaultShipping('1')
            ->setSaveInAddressBook('1');
try {
    $customAddress->save();


    Zend_Debug::dump($customAddress->debug()); 


}
catch (Exception $ex) {
    Zend_Debug::dump($ex->getMessage());
}
//Mage::getSingleton('checkout/session')->getQuote()->setBillingAddress(Mage::getSingleton('sales/quote_address')->importCustomerAddress($customAddress));


Mage::getSingleton('checkout/session')->getQuote()
->setBillingAddress(Mage::getSingleton('sales/quote_address')->importCustomerAddress($customAddress)) ->setShippingAddress(Mage::getSingleton('sales/quote_address')->importCustomerAddress($customAddress));

/*
$product = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToFilter('sku', $sku)
    ->addAttributeToSelect('*')
    ->getFirstItem();

$product->load($product_id);
$cart = Mage::getSingleton('checkout/cart');

$productInstance = Mage::getModel('catalog/product')->load($product_id);
$cart->truncate();
$cart->save();
$cart->getItems()->clear()->save();
try {
    //$cart->addProduct($product, array('options'=> array('some-custom-option-id-here' => 'Some value goes here');
    //$cart->addProduct($product, array('price' => 5000));
    //$cart->addProduct($productInstance, $param);
    //$cart->save();


    $cart->init();
    $cart->addProduct($product, array('qty' => $qty));
    $cart->save();
    Mage::getSingleton('checkout/session')->setCartWasUpdated(true);


}
catch (Exception $ex) {
    echo $ex->getMessage();
}
unset($product);
*/

$product = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToFilter('sku', $sku)
    ->addAttributeToSelect('*')
    ->getFirstItem();

$product->load($product_id);
$quote = Mage::getSingleton('checkout/session');
$quote->addProduct($product, $qty);

$quote->collectTotals()->save();


$storeId = $store_id;
$checkout = Mage::getSingleton('checkout/type_onepage');
$checkout->initCheckout();
$checkout->saveCheckoutMethod('register');
$checkout->saveShippingMethod('flatrate_flatrate');     
$checkout->savePayment(array('method'=>'free'));


try {
    $checkout->saveOrder();
}
catch (Exception $ex) {
    echo $ex->getMessage();
}
/* Clear the cart */
$cart->truncate();
$cart->save();
$cart->getItems()->clear()->save();
/* Logout the customer you created */
Mage::getSingleton('customer/session')->logout();


?>
ehmad11
quelle
Wo / wie ist $productdefiniert?
pspahn
Ich habe die Frage bearbeitet und die Produktdefinition ist oben, ich habe auch $ productInstance ausprobiert, das auch dort oben ist, aber immer noch keine Würfel
ehmad11
Ich habe Frage mit vollem Code bis jetzt aktualisiert, es ist ein bisschen chaotisch, aber Sie können eine Vorstellung davon bekommen, was ich versuche zu tun ...
ehmad11
1
Kannst du sagen, warum du den Wagen im letzten Schritt
räumst?
@AmitBera Ich habe diese Zeilen entfernt ... es war auch irgendwie hilfreich ..
ehmad11

Antworten:

28

Hier sind viele Dinge falsch und ich fühle mich gezwungen, eine Codeüberprüfung mit Ihnen durchzuführen. Siehe das Ende für den richtigen Ansatz.

Code-Review:


Diese Zeile lädt ein Produkt mit einer undefinierten $ sku var:

$product = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToFilter('sku', $sku)
    ->addAttributeToSelect('*')
    ->getFirstItem();

Jetzt laden Sie die $ product-Variable mit einem undefinierten Wert neu, geben ein leeres Modell oder null zurück.

$product->load($product_id);

Erhalten des Wagenmodells (aber nicht unbedingt meines aus meiner Kundensitzung):

$cart = Mage::getSingleton('checkout/cart');

Warten Sie - jetzt laden wir eine weitere Instanz eines leeren Objekts:

$productInstance = Mage::getModel('catalog/product')->load($product_id);

Den brandneuen Wagen räumen:

$cart->truncate();

Speichern unseres leeren Wagens:

$cart->save();

Alle Artikel in unseren leeren Warenkorb legen, löschen und erneut speichern:

$cart->getItems()->clear()->save();

Der richtige Weg:


Alles in allem macht dieser Code keinen Sinn. Bei einigen Google-Suchvorgängen wird der richtige Weg gefunden, um ein Produkt mit dem richtigen Preis in den Warenkorb des aktuellen Benutzers zu legen:

$quote = Mage::getSingleton('checkout/session')->getQuote();
$quote->addProduct($product, $qty);

$quote->collectTotals()->save();

Wobei $productund $qtybeide definiert sind und $producteine Instanz von Mage_Catalog_Model_Productund $qtyeine Ganzzahl sind.

philwinkle
quelle
1
Ich erhalte Folgendes: Schwerwiegender Fehler: Nicht erfasste Ausnahme 'Varien_Exception' mit Meldung 'Ungültige Methode Mage_Checkout_Model_Session :: addProduct (Array ([0] => Mage_Catalog_Model_Product Object ...... wahrscheinlich gibt es hier keine Methode addProduct $ quote = Mage: : getSingleton ('checkout / session'); $ quote-> addProduct ($ product, $ qty);
ehmad11
zweitens benutze ich onepage checkout!
Ehmad11
$ storeId = $ store_id; $ checkout = Mage :: getSingleton ('checkout / type_onepage'); $ checkout-> initCheckout (); $ checkout-> saveCheckoutMethod ('register'); $ checkout-> saveShippingMethod ('flatrate_flatrate'); $ checkout-> savePayment (array ('method' => 'free')); try {$ checkout-> saveOrder (); } catch (Ausnahme $ ex) {echo $ ex-> getMessage (); } / * Lösche den Wagen / $ cart-> truncate (); $ cart-> save (); $ cart-> getItems () -> clear () -> save (); / Den von Ihnen erstellten Kunden abmelden * / Mage :: getSingleton ('Kunde / Sitzung') -> Abmelden ();
Ehmad11
1
Ich versuche dies auf einer Neuinstallation ohne Thema oder Modul ...
ehmad11
1
hey @philwinkle danke .. Der Code $quote->collectTotals()->save();speichere meine einmonatigen Arbeiten
Amit Bera
3

Hier legen wir das Produkt mit einem externen Skript in den Warenkorb

<?php
include 'app/Mage.php';
Mage::app();
// Need for start the session
Mage::getSingleton('core/session', array('name' => 'frontend'));
try {
    $product_id = '52'; // Replace id with your product id
    $qty = '4'; // Replace qty with your qty
    $product = Mage::getModel('catalog/product')->load($product_id);
    $cart = Mage::getModel('checkout/cart');
    $cart->init();
    $cart->addProduct($product, array('qty' => $qty));
    $cart->save();
    Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
    Mage::getSingleton('core/session')->addSuccess('Product added successfully');
    header('Location: ' . 'index.php/checkout/cart/');
} catch (Exception $e) {
    echo $e->getMessage();
}
?>

Hinweis : - Hier ist 52 die einfache Produkt-ID und 4 der Mengenwert, den Sie durch Ihre Menge ersetzen können.

Kinjalkumar Prajapati
quelle
Ich möchte zuerst den Warenkorb löschen und dann zum Warenkorb hinzufügen. Wie kann ich tun
ND17
0

Ich hatte dieses Problem schon einmal. Bei meiner Aufgabe musste ich ein Produkt zu einem bestimmten Angebot hinzufügen. Der folgende Code hat mir dabei geholfen:

$quoteModel = Mage::getModel('sales/quote')->load($quoteId);
$cartModel = Mage::getModel('checkout/cart');
$cartModel->setData('quote', $quoteModel);
$cartModel->init();
$cartModel->addProduct(productId, array('qty'=>5));
$cartModel->save();

Hoffe das hilft dir in diesem Fall.

Magemad
quelle
0

Hier ist die einfache Möglichkeit, ein Produkt zum Warenkorb / Angebot hinzuzufügen:

$customer = Mage::getModel('customer/customer')->load($customerId);
$product = Mage::getModel('catalog/product')->load($productId);
// load quote by customer and store...
$quote = Mage::getModel('sales/quote')->setStore($storeId)->loadByCustomer($customerId);
$quote->addProduct($product, 1);
$quote->setIsActive(1);
$quote->collectTotals()->save();
Shripad Bhat
quelle
0

Hier ist der Arbeitscode zum Hinzufügen eines Produkts zum Warenkorb:

$customer = Mage::getModel('customer/customer')->load($customerId);
$product = Mage::getModel('catalog/product')->load($productId);
// load quote by customer and store...
$quote = Mage::getModel('sales/quote')->setStore($storeId)->loadByCustomer($customerId);
$quote->addProduct($product, 1);
$quote->setIsActive(1);
$quote->collectTotals()->save();
Shripad Bhat
quelle