lập trình thêm sản phẩm vào giỏ hàng trả về giá trống


7

Tôi đã cố gắng lập trình thêm một sản phẩm vào giỏ hàng bằng cách sử dụng các dòng mã sau, nó dường như hoạt động và thêm thành công sản phẩm nhưng vì một lý do nào đó, giá của sản phẩm mới được thêm luôn luôn bằng không .. làm thế nào tôi có thể ngăn chặn điều này và để giá thực tế của sản phẩm sẽ được đặt cho giỏ hàng?

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


?>

Ở đâu / như thế nào được $productđịnh nghĩa?
pspahn

Tôi đã chỉnh sửa câu hỏi và định nghĩa sản phẩm là hàng đầu, tôi cũng đã thử $ ProductInstance cũng ở đó nhưng vẫn không có xúc xắc
ehmad11

Tôi đã cập nhật câu hỏi với mã đầy đủ cho đến nay, nó hơi lộn xộn nhưng bạn có thể biết một số ý tưởng tôi đang cố gắng làm gì ...
ehmad11

1
bạn có thể cho biết lý do tại sao bạn xóa giỏ hàng trong bước cuối cùng ..
Amit Bera

@AmitBera tôi đã xóa những dòng đó ... nó cũng hữu ích bằng cách nào đó ..
ehmad11

Câu trả lời:


28

Có nhiều điều sai ở đây và tôi cảm thấy bắt buộc phải thực hiện đánh giá mã với bạn. Xem kết thúc cho cách tiếp cận chính xác.

Đánh giá mã:


Dòng này đang tải một sản phẩm có $ sku var không xác định:

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

Bây giờ bạn đang tải lại var sản phẩm $ với giá trị không xác định, trả về một mô hình trống hoặc null.

$product->load($product_id);

Lấy mô hình giỏ hàng (nhưng không nhất thiết là của tôi từ phiên khách hàng của tôi):

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

Đợi đã - bây giờ chúng tôi đang tải một phiên bản khác của một đối tượng trống:

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

Xóa giỏ hàng mới:

$cart->truncate();

Lưu giỏ hàng trống của chúng tôi:

$cart->save();

Lấy tất cả các mục trong giỏ hàng trống của chúng tôi, xóa chúng và lưu lại:

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

Đúng cách


Tất cả trong tất cả các mã này không có ý nghĩa. Một số tìm kiếm của Google xuất hiện đúng cách để thêm sản phẩm vào giỏ hàng của người dùng hiện tại với giá chính xác được đính kèm:

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

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

Trường hợp $product$qtycả hai đều được định nghĩa, và $productlà một thể hiện của Mage_Catalog_Model_Product$qtylà một số nguyên.


1
Tôi đang nhận được điều này: Lỗi nghiêm trọng: Uncaught ngoại lệ 'Varien_Exception' với thông báo 'Phương thức không hợp lệ Mage_Checkout_Model_Session :: add SẢNt (Mảng ([0] => Mage_Catalog_Model_Sản phẩm đối tượng ...... có lẽ không có phương thức add sản phẩm nào ở đây $ quote = Mage : getSingleton ('thanh toán / phiên'); $ quote-> add sản phẩm ($ sản phẩm, $ qty);
ehmad11

Thứ hai tôi đang sử dụng thanh toán onepage!
ehmad11

$ storeId = $ store_id; $ checkout = Mage :: getSingleton ('thanh toán / type_onepage'); $ thanh toán-> initCheckout (); $ checkout-> saveCheckoutMethod ('đăng ký'); $ checkout-> saveShippingMethod ('Flatrate_flatrate'); $ checkout-> savePayment (mảng ('phương thức' => 'miễn phí')); thử {$ thanh toán-> saveOrder (); } Catch (Exception $ ex) {echo $ ex-> getMessage (); } / * Xóa giỏ hàng / $ cart-> cắt ngắn (); $ giỏ hàng-> lưu (); $ cart-> getItems () -> xóa () -> save (); / Thoát khỏi khách hàng bạn đã tạo * / Mage :: getSingleton ('khách hàng / phiên') -> đăng xuất ();
ehmad11

1
tôi đang thử cài đặt mới mà không có bất kỳ chủ đề hoặc mô-đun nào ...
ehmad11

1
hey @philwinkle cảm ơn .. Mã $quote->collectTotals()->save();lưu một tháng hoạt động của tôi
Amit Bera

3

Ở đây chúng tôi thêm sản phẩm vào giỏ hàng bằng cách sử dụng tập lệnh bên ngoài

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

Lưu ý : - ở đây 52 là id sản phẩm đơn giản và 4 là giá trị số lượng, bạn có thể thay thế bằng số lượng của mình.


Tôi muốn xóa giỏ hàng đầu tiên và hơn là thêm vào giỏ hàng. Làm thế nào tôi có thể làm
ND17

0

Tôi đã có vấn đề này trước đây. Trong nhiệm vụ của mình, tôi cần thêm sản phẩm vào trích dẫn cụ thể. Mã số đã giúp tôi thực hiện điều này:

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

Hy vọng rằng sẽ giúp bạn trong trường hợp này.


0

Đây là cách dễ dàng để thêm sản phẩm vào giỏ hàng / báo giá:

$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

Dưới đây là mã làm việc để thêm sản phẩm vào Giỏ hàng:

$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();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.