วิธีรับไอเท็มแรกจากการรวบรวมผลิตภัณฑ์


23

ในหมวดหมู่ view.phtml หากฉันได้รับหมวดหมู่จากนั้นรับชุดผลิตภัณฑ์ฉันจะได้รับผลิตภัณฑ์รูปแบบแรกจากกลุ่มที่กำหนดให้กับ $ _product เพื่อใช้ในรหัสได้อย่างไร นี่คือสิ่งที่ฉันมี:

$_category   = $this->getCurrentCategory();
$_collection = $_category->getProductCollection();
$_product    = 
$_resource   = $_product->getResource();

ฉันลองใช้ foreach แล้วแต่ได้รับข้อผิดพลาด


2
$_product = $_collection->getFirstItem()
pzirkind

1
@pzirkind ใส่คำตอบนี้โปรดอย่าใส่ความเห็น
Amit Bera

1
ฉันลอง แต่ได้รับข้อผิดพลาด - วิธีการที่ไม่ถูกต้อง Mage_Catalog_Block_Category_View :: canEmailToFriend (Array))
danny

1
@heisenberg ว่าฉันและคุณพยายามที่จะเรียกฟังก์ชั่นที่ไม่ exixt ไม่ว่าจะเป็นข้อผิดพลาดที่แตกต่างกัน (ไม่ได้เชื่อมต่อกับคำถามเดิมของคุณ) ทั้งอัปเดตคำถามของคุณด้วยรหัสใหม่หรือเริ่มใหม่
pzirkind

@ แดนนี่หากคุณพบคำตอบที่นี่โปรดยอมรับเพื่อทำเครื่องหมายคำถามนี้ว่าแก้ไขแล้ว
sv3n

คำตอบ:


25

ในการรับไอเท็มแรกในคอลเล็กชันให้ใช้getFirstItem()ฟังก์ชันในการรวบรวม

ตัวอย่าง:

// this gets all the products
$productCollection = Mage::getResourceModel('catalog/products_collection');
// this line gets just the first product
$firstItem = $productCollection->getFirstItem(); 

ตัวอย่างที่ 2 (สำหรับคำถามนี้โดยเฉพาะ):

$_category  = $this->getCurrentCategory();
$_collection = $_category->getProductCollection();
$_product =  $_collection->getFirstItem(); // this will get first item in collection

พื้นที่อื่น ๆ ที่สามารถใช้ได้:

ลูกค้า

$customerCollection = Mage::getResourceModel('customer/customer_collection');
$firstCustomer = $customerCollection->getFirstItem();

สั่งซื้อ

$orderCollection = Mage::getResourceModel('sales/order_collection');
$firstOrder = $orderCollection->getFirstItem();

โปรดทราบ:

ไม่ใช่ความคิดที่ดีที่จะโหลดผลิตภัณฑ์ / ลูกค้า / คำสั่งซื้อทั้งหมดนี้ใช้ทรัพยากรจำนวนมาก วิธีที่ต้องการคือ จำกัด สิ่งที่คุณต้องการโหลดโดยใช้addAttributeToFilter()หรือaddFieldToFilter()ฟังก์ชั่นดูตัวอย่างด้านล่าง:

$productCollection = Mage::getResourceModel('catalog/product_collection')
                           ->addAttributeToFilter('sku', 'book123`);

5

pzirkindถูกต้องทั้งหมดเพียงแค่สงสัยว่าไม่มีใครสนใจเรื่องการแสดง ถ้าคุณเพียงต้องการคนแรก / รายการสุดท้ายของคอลเลกชันที่คุณควรเสมอจำกัด สอบถามของคุณเพื่อ1:

$collection->getSelect()->limit(1);

เพียงแค่ใช้getFirstItem()จะยังคงโหลดคอลเลกชันทั้งหมดและหลังจากนั้นจะทำให้รายการแรก


ตัวอย่าง : หมวดหมู่ที่มีผลิตภัณฑ์ 750 รายการ

$category = Mage::getModel('catalog/category')->load(41);
$collection = $category->getProductCollection();
# $collection->getSelect()->limit(1);
var_dump($collection->getSelect()->__toString());
var_dump($collection->getFirstItem()->getData());

เพียงgetFirstItem():

  • รวม เวลากำแพง (ไมโครไซต์): 2,318,497 ไมโครเซส
  • รวม CPU (ไมโครไซต์): 2,000,604 microsecs
  • รวม MemUse (ไบต์): 7,729,776 ไบต์
  • รวม PeakMemUse (ไบต์): 7,977,672 ไบต์
  • จำนวนการเรียกใช้ฟังก์ชัน: 96,957

การเพิ่มgetSelect()->limit(1):

  • รวม กำแพงเวลา (ไมโคร): 424,955 ไมโครเซส
  • รวม CPU (ไมโครไซต์): 380,326 microsecs
  • รวม MemUse (ไบต์): 4,043,728 ไบต์
  • รวม PeakMemUse (ไบต์): 3,976,000 ไบต์
  • จำนวนการเรียกใช้ฟังก์ชัน: 15,249

2
เหมาะอย่างยิ่งเนื่องจากครอบคลุมสองโซลูชันและให้เวลาดำเนินการและอธิบายถึงประโยชน์ด้านประสิทธิภาพ +1
BENN1TH

3
var_dump($_collection->getFirstItem()->getData());
echo $_collection->getFirstItem()->getName();

วิธีรับไอเท็มสุดท้าย:

echo $_collection->getLastItem()->getName();
var_dump($_collection->getLastItem()->getData()); 

2

@pZirKind ถูกต้องคุณสามารถรับไอเท็มแรกจากการรวบรวมผลิตภัณฑ์โดยใช้วิธีเนทีฟของคลาส Varien Collection เช่น:

$_category  = $this->getCurrentCategory();

$_collection = $_category->getProductCollection();

$_product = $_collection->getFirstItem()


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