プログラムでカートに商品を追加すると、空の価格が返される


7

次のコード行を使用してプログラムでカートに商品を追加しようとしていますが、機能して正常に商品を追加しているようですが、何らかの理由で、新しく追加した商品の価格が常にゼロに設定されています。これを防止して、カートに設定する商品の実際の価格は?

<?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();


?>

どこで/どのように$product定義されていますか?
pspahn 2014

私は質問を編集し、製品の定義が一番上にあります。また、そこにある$ productInstanceも試しましたが、まだサイコロはありません
ehmad11

これまでに完全なコードで質問を更新しましたが、少し厄介ですが、私が何をしようとしているのかいくつかのアイデアを得ることができます...
ehmad11

1
あなたは最後のステップでなぜ明らかカートを伝えることができます。..
アミットベラ

@AmitBera私はそれらの行を削除しました...それも何とか役に立ちました...
ehmad11 '28

回答:


28

ここには多くの誤りがあり、私はあなたとコードレビューを行うことを余儀なくされています。正しいアプローチについては、最後を参照してください。

コードレビュー:


この行は、未定義の$ sku変数を持つ製品をロードしています:

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

ここで、$ product変数を未定義の値で再読み込みし、空のモデルまたはnullを返します。

$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();

正しい方法:


全体として、このコードは意味がありません。一部のGoogle検索では、正しい価格を付けて商品を現在のユーザーのカートに追加する正しい方法が表示されます。

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

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

ここで、$product$qtyの両方に定義され、$productのインスタンスであり、Mage_Catalog_Model_Productかつ$qty整数です。


1
これを取得しています:致命的なエラー:キャッチされない例外 'Varien_Exception'とメッセージ 'Invalid method Mage_Checkout_Model_Session :: addProduct(Array([0] => Mage_Catalog_Model_Product Object ...... :getSingleton( 'checkout / session'); $ quote-> addProduct($ product、$
qty

次に、1ページのチェックアウトを使用しています!
ehmad11 2014

$ storeId = $ store_id; $ checkout = Mage :: getSingleton( 'checkout / type_onepage'); $ checkout-> initCheckout(); $ checkout-> saveCheckoutMethod( 'register'); $ checkout-> saveShippingMethod( 'flatrate_flatrate'); $ checkout-> savePayment(array( 'method' => 'free')); {$ checkout-> saveOrder();を試してください } catch(Exception $ ex){echo $ ex-> getMessage(); } / *カートをクリアします/ $ cart-> truncate(); $ cart-> save(); $ cart-> getItems()-> clear()-> save(); /作成した顧客をログアウト* / Mage :: getSingleton( 'customer / session')-> logout();
ehmad11 2014

1
テーマやモジュールなしの新規インストールでこれを試しています...
ehmad11

1
ねえ@philwinkleありがとう..コードで$quote->collectTotals()->save();1か月の作業時間を節約
Amit Bera

3

ここで、外部スクリプトを使用して製品をカートに追加します

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

:-ここで52は単純な製品IDで、4は数量値です。数量で置き換えることができます。


最初にカートをクリアしてから、カートに追加します。どうすればよいですか
ND17

0

以前にこの問題がありました。私の仕事では、特定の見積もりに製品を追加する必要がありました。以下のコードは、これを達成するのに役立ちました。

$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();

この場合に役立つことを願っています。


0

カート/見積もりに製品を追加する簡単な方法は次のとおりです。

$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();

0

カートに商品を追加するための作業コードは次のとおりです。

$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();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.