วิธีการรับสินค้าทั้งหมดในรถเข็นในขณะนี้?


45

ฉันต้องการได้รับชุดของรายการทั้งหมดในรถเข็นในขณะนี้

ฉันจะทำสิ่งนี้ได้อย่างไร ข้อเสนอแนะใด ๆ จะได้รับการชื่นชม


หากคุณกำลังมองหาวิธีแก้ปัญหาด้วย Magento 2 ให้ดูmagento.stackexchange.com/questions/111137/ …
Fabian Schmengler

คำตอบ:


61
$cart = Mage::getModel('checkout/cart')->getQuote();
foreach ($cart->getAllItems() as $item) {
    $productName = $item->getProduct()->getName();
    $productPrice = $item->getProduct()->getPrice();
}

ใน$cartคุณมีคอลเลกชันทั้งหมดของรถเข็นรายการและถ้าคุณต้องการที่จะได้รับรหัสสินค้าชื่อคุณจะได้รับจากการใช้ห่วง foreach


6
มันใช้งานได้ แต่มันจะแสดงผลิตภัณฑ์ทั้งหมดรวมถึงผลิตภัณฑ์ที่เป็นของผลิตภัณฑ์ที่กำหนดค่าได้ ในการแสดงผลิตภัณฑ์ทั้งหมดยกเว้นผลิตภัณฑ์ที่ฉันกล่าวถึงคุณต้องใช้ getAllVisibleItems ()
Attila Naghi

วิธีการแสดงปริมาณของรายการนี้?
Marcos Vinicius

คุณควรใช้ getModel หรือไม่? คุณไม่ควรใช้ getSingleton ใช่ไหม
Danny Dev Nz

28

ฉันพบวิธีแก้ไขปัญหาอื่น รหัสต่อไปนี้ใช้งานได้สำหรับฉัน

$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
foreach ($cartItems as $item) {
    $productId = $item->getProductId();     
    // Do something more
}

วิธีการแสดงปริมาณของรายการนี้?
Marcos Vinicius

1
ทำไม 27 upvotes สำหรับการโหลดผลิตภัณฑ์ในลูป .... ?
sv3n

สิ่งนี้มีประสิทธิภาพที่แย่มาก .. คุณกำลังโหลดแต่ละผลิตภัณฑ์ในลูปเมื่อมีอยู่แล้วผ่าน$item->getProduct()... ทุกครั้งที่คุณคิดเกี่ยวกับการใช้ -> load () ในวีโอไอพีคุณสามารถไว้ใจได้กับประสิทธิภาพที่ไม่ดีบางครั้งก็ไม่มีอื่น ๆ ตัวเลือกจริงๆ แต่กรณีนี้ไม่ได้ที่นี่ ..
ชีวิตคู่

1
@ sv3n: ขอบคุณที่ชี้ให้เห็น แก้ไขรหัส
Sukeshini

20

มีหลายวิธีที่ทำงานในวิธีที่ต่างกัน:

  1. $items = Mage::getSingleton('checkout/cart')->getQuote()->getItemsCollection();

    ส่งคืนคอลเลกชันรายการคำพูดที่มีรายการทั้งหมดที่เกี่ยวข้องกับคำพูดปัจจุบัน

  2. $items = Mage::getSingleton('checkout/cart')->getItems();

    นี่คือทางลัดสำหรับวิธีการด้านบน แต่ถ้าไม่มีการอ้างอิงจะส่งคืนอาร์เรย์ที่ว่างเปล่าดังนั้นคุณจึงไม่สามารถพึ่งพาการรับอินสแตนซ์ของการเก็บรวบรวมได้

  3. $items = Mage::getSingleton('checkout/cart')->getQuote()->getAllItems();

    โหลดคอลเล็กชันไอเท็มจากนั้นส่งคืนอาร์เรย์ของไอเท็มทั้งหมดที่ไม่ได้ทำเครื่องหมายว่าถูกลบ (เช่นถูกลบในคำขอปัจจุบัน)

  4. $items = Mage::getSingleton('checkout/cart')->getQuote()->getAllVisibleItems();

    โหลดคอลเล็กชันไอเท็มจากนั้นส่งคืนอาร์เรย์ของไอเท็มทั้งหมดที่ไม่ได้ทำเครื่องหมายว่าถูกลบและไม่มีพาเรนต์ (เช่นคุณได้รับไอเท็มสำหรับผลิตภัณฑ์ที่รวมและกำหนดค่าได้ แต่ไม่ใช่ลูกที่เกี่ยวข้อง) แต่ละรายการอาร์เรย์สอดคล้องกับแถวที่แสดงในหน้ารถเข็น

เลือกสิ่งที่เหมาะกับความต้องการของคุณที่สุด ในกรณีส่วนใหญ่วิธีสุดท้ายคือสิ่งที่คุณต้องการ แต่น่าเสียดายที่ Magento ให้มันเป็นอาร์เรย์เท่านั้น


โปรดทราบว่าMage::getSingleton('checkout/cart')->getQuote()และMage::getSingleton('checkout/session')->getQuote()สามารถเปลี่ยนได้


1
$items =Mage::getSingleton('checkout/session')->getQuote()->getAllItems();

foreach($items as $item) {
    echo 'ID: '.$item->getProductId().'<br />';
    echo 'Name: '.$item->getName().'<br />';
    echo 'Sku: '.$item->getSku().'<br />';
    echo 'Quantity: '.$item->getQty().'<br />';
    echo 'Price: '.$item->getPrice().'<br />';
    echo "<br />";
}

วิธีที่ดีที่สุดในการรับสินค้าทั้งหมดในตะกร้า


ใช้ Mage :: getSingleton ('ชำระเงิน / ตะกร้า') -> getQuote () -> getAllItems ();
Aman Srivastava

ทำไม? ความแตกต่างคืออะไร?
LM_Fielding

-7

รหัสด้านล่างนี้ใช้สำหรับรับรายการรถเข็น

$cart = new Mage_Checkout_Model_Cart();

$cart->init();

foreach ($cart->getItems() as $item) {

   // we can wrap our request in this IF statement

   if (!$item->getParentItemId()) {

   }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.