Cara mendapatkan item pertama dari koleksi produk

23

Pada view.phtml kategori jika saya mendapatkan kategori dan kemudian mendapatkan koleksi produk, bagaimana saya bisa mendapatkan produk pertama dari koleksi yang ditugaskan untuk $ _produk untuk digunakan dalam kode? Inilah yang saya miliki:

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

Saya mencoba menggunakan foreach tetapi terus mendapatkan kesalahan.

danny
sumber
2
$_product = $_collection->getFirstItem()
pzirkind
1
@pzirkind berikan jawaban ini. Tolong jangan berikan komentar
Amit Bera
1
Saya mencoba ini tetapi mendapatkan kesalahan - Metode tidak valid Mage_Catalog_Block_Category_View :: canEmailToFriend (Array))
danny
1
@heisenberg yang saya maksudkan dan Anda mencoba memanggil fungsi yang tidak ada, salah satu kesalahannya berbeda (tidak terhubung dengan pertanyaan awal Anda), perbarui pertanyaan Anda dengan kode baru atau mulai yang baru
pzirkind
@danny jika Anda menemukan jawaban di sini, harap terima untuk menandai pertanyaan ini sebagai terselesaikan.
sv3n

Jawaban:

25

Untuk mendapatkan item pertama dalam koleksi cukup gunakan getFirstItem()fungsi pada koleksi.

Contoh:

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

Contoh 2 (untuk pertanyaan khusus ini):

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

Beberapa area lain yang dapat digunakan:

Pelanggan

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

Pesanan

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

Tolong dicatat:

Bukan ide yang baik untuk memuat SEMUA produk / pelanggan / pesanan untuk ini membutuhkan banyak sumber daya. Cara yang disukai adalah membatasi apa yang ingin Anda muat dengan menggunakan fungsi addAttributeToFilter()atau addFieldToFilter(), lihat contoh di bawah ini:

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

pzirkind sepenuhnya benar, hanya ingin tahu bahwa tidak ada yang peduli dengan kinerja. Jika Anda HANYA menginginkan item pertama / terakhir dari koleksi, Anda harus selalu membatasi kueri Anda ke 1:

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

Hanya menggunakan getFirstItem()masih akan memuat seluruh koleksi dan setelah itu itu memenuhi item pertama.


Contoh : kategori dengan 750 produk

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

Hanya getFirstItem():

  • Total Termasuk Waktu Dinding (microsec): 2.318.497 microsecs
  • Total Termasuk CPU (microsec): 2.000.604 microsec
  • Total Termasuk MemUse (bytes): 7.729.776 bytes
  • Total Termasuk PeakMemUse (bytes): 7.977.672 bytes
  • Jumlah Panggilan Fungsi: 96.957

Menambahkan getSelect()->limit(1):

  • Total Termasuk Waktu Dinding (microsec): 424.955 microsecs
  • Total Termasuk CPU (mikrod): 380.326 mikrod
  • Total Termasuk MemUse (bytes): 4.043.728 bytes
  • Total Termasuk PeakMemUse (bytes): 3.976.000 bytes
  • Jumlah Panggilan Fungsi: 15.249
sv3n
sumber
2
Ini sangat ideal karena mencakup dua solusi, dan waktu pelaksanaan persediaan, dan menjelaskan manfaat kinerja +1
BENN1TH
3
var_dump($_collection->getFirstItem()->getData());
echo $_collection->getFirstItem()->getName();

Juga cara mendapatkan Item Terakhir:

echo $_collection->getLastItem()->getName();
var_dump($_collection->getLastItem()->getData()); 
TBI Infotech
sumber
2

@pZirKind benar Anda bisa mendapatkan item pertama dari koleksi produk menggunakan metode asli dari kelas Varien Collection seperti:

$_category  = $this->getCurrentCategory();

$_collection = $_category->getProductCollection();

$_product = $_collection->getFirstItem()
sandip.vaghasiya
sumber
0
$Collection = Mage::getResourceModel('catalog/products_collection');
$firstItem = $Collection->getFirstItem(); 
Sheshgiri Anvekar
sumber
0

Tolong, coba ini

    $_category  = $this->getCurrentCategory();        
    $_collection = $_category->getProductCollection();        
    $_items = $_productCollection->getItems(); 
   if($_items){  
    $_items[0]->getShortName();
    $_items[0]->getProductUrl();
   }
Vivacity InfoTech Pvt. Ltd.
sumber