Ürün koleksiyonundan ilk ürün nasıl alınır?


23

Eğer kategori ve ardından bir ürün koleksiyonu alırsam view.phtml kategorisinde ilk koddan $ _product atanan koleksiyondan kodda kullanmak için nasıl alabilirim? İşte elimde ne var:

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

Foreach kullanarak denedim ama hata almaya devam etti.


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

1
@pzirkind bu cevabı koy. lütfen yorum yapma
Amit Bera

1
Bunu denedim ama hata alıyorum - Geçersiz yöntem Mage_Catalog_Block_Category_View :: canEmailToFriend (Array))
danny

1
@heisenberg, her iki şekilde de farklı olmayan bir işlevi çağırmaya çalıştığınızı gösteriyor (farklı bir hatadır (orijinal sorunuza bağlı değil)) ya sorunuzu yeni kodla güncelleyin ya da yeni bir tane başlatın
pzirkind

@ danny burada bir cevap bulursanız, lütfen bu soruyu çözülmüş olarak işaretlemeyi kabul edin.
sv3n

Yanıtlar:


25

Koleksiyondaki ilk öğeyi almak için koleksiyondaki getFirstItem()işlevi kullanın .

Örnek:

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

Örnek 2 (bu belirli soru için):

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

Bunun kullanılabileceği diğer bazı alanlar:

Müşteriler

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

Emirler

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

Lütfen aklınızda bulundurun:

Bunun için TÜM ürünleri / müşterileri / siparişleri yüklemek iyi bir fikir değil, çok fazla kaynak gerekiyor. Tercih edilen yol, addAttributeToFilter()veya addFieldToFilter()işlevlerini kullanarak yüklemek istediklerinizi sınırlandırmaktır , aşağıdaki örneğe bakın:

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

5

pzirkind tamamen haklı , sadece kimsenin performansı önemsemediğini merak ediyorum. Eğer varsa SADECE bir koleksiyonun ilk / son madde istiyorsan, gereken her zaman Sorgunuzla için sınırlamak 1:

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

Sadece kullanmak getFirstItem()hala tüm koleksiyonu yükler ve ondan sonra ilk öğeyi alır.


Örnek : 750 ürün içeren kategori

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

Sadece getFirstItem():

  • Toplam Dahil Duvar Saati (mikrosec): 2.318.497 mikrosec
  • Toplam Dahil CPU (mikrosec): 2.000.604 mikrosek
  • Toplam Dahil MemUse (bayt): 7.729.776 bayt
  • Toplam Dahil PeakMemUse (bayt): 7,977,672 bayt
  • İşlev Çağrısı Sayısı: 96,957

Ekleme getSelect()->limit(1):

  • Toplam Dahil Duvar Saati (mikrosec): 424.955
  • Toplam Dahil CPU (mikrosec): 380,326 mikrosec
  • Toplam Dahil MemUse (bayt): 4,043,728 bayt
  • Toplam Dahil PeakMemUse (bayt): 3,976,000 bayt
  • Fonksiyon Çağrısı Sayısı: 15.249

2
Bu, iki çözümü kapsadığı ve yürütme süreleri sağladığı için idealdir ve performans avantajlarını açıklar +1
BENN1TH

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

Ayrıca Son Öğe nasıl alınır:

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

2

@pZirKind haklı, Varien Collection sınıfının yerel yöntemlerini kullanarak ürün koleksiyonundan ilk öğeyi alabilirsiniz:

$_category  = $this->getCurrentCategory();

$_collection = $_category->getProductCollection();

$_product = $_collection->getFirstItem()

0
$Collection = Mage::getResourceModel('catalog/products_collection');
$firstItem = $Collection->getFirstItem(); 

0

Bunu dene lütfen

    $_category  = $this->getCurrentCategory();        
    $_collection = $_category->getProductCollection();        
    $_items = $_productCollection->getItems(); 
   if($_items){  
    $_items[0]->getShortName();
    $_items[0]->getProductUrl();
   }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.