So erhalten Sie den ersten Artikel aus der Produktkollektion


23

Wie kann ich in der Kategorie view.phtml, wenn ich die Kategorie erhalte und dann eine Produktsammlung erhalte, das erste Produkt aus der Sammlung abrufen, die $ _product zur Verwendung im Code zugewiesen ist? Folgendes habe ich:

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

Ich habe versucht, foreach zu verwenden, habe aber immer wieder Fehler erhalten.


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

1
@pzirkind diese Antwort setzen.bitte nicht kommentieren
Amit Bera

1
Ich habe versucht, dies, aber immer Fehler - Ungültige Methode Mage_Catalog_Block_Category_View :: canEmailToFriend (Array))
danny

1
@heisenberg das meand Sie versuchen, eine Funktion aufzurufen, die nicht so oder so exixt, es ist ein anderer Fehler (nicht mit Ihrer ursprünglichen Frage verbunden), aktualisieren Sie entweder Ihre Frage mit dem neuen Code oder starten Sie eine neue
pzirkind

@danny Wenn Sie hier eine Antwort gefunden haben, stimmen Sie zu, um diese Frage als gelöst zu markieren.
Sv3n

Antworten:


25

Um das erste Element in einer Sammlung zu erhalten, verwenden Sie einfach die getFirstItem()Funktion in der Sammlung.

Beispiel:

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

Beispiel 2 (für diese spezielle Frage):

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

Einige andere Bereiche, in denen dies verwendet werden kann:

Kunden

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

Aufträge

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

Bitte beachten Sie:

Es ist keine gute Idee, ALLE Produkte / Kunden / Bestellungen zu laden, da dies eine Menge Ressourcen in Anspruch nimmt. Die bevorzugte Methode besteht darin, das zu laden, was Sie laden möchten, indem Sie die Funktionen addAttributeToFilter()oder addFieldToFilter()verwenden (siehe Beispiel unten):

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

5

pzirkind hat vollkommen recht und wundert sich nur, dass sich niemand um die leistung kümmert. Wenn Sie NUR das erste / letzte Element einer Sammlung möchten, sollten Sie Ihre Abfrage immer auf Folgendes beschränken 1:

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

Wenn Sie nur "using" auswählen, getFirstItem()wird trotzdem die gesamte Sammlung geladen, und danach wird der erste Artikel angezeigt.


Beispiel : Kategorie mit 750 Produkten

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

Nur getFirstItem():

  • Insgesamt Inkl. Wandzeit (Mikrosekunde): 2.318.497 Mikrosekunden
  • Insgesamt Inkl. CPU (Mikrosekunden): 2.000.604 Mikrosekunden
  • Insgesamt Inkl. MemUse (Bytes): 7.729.776 Bytes
  • Insgesamt Inkl. PeakMemUse (Bytes): 7.977.672 Bytes
  • Anzahl der Funktionsaufrufe: 96.957

Hinzufügen getSelect()->limit(1):

  • Insgesamt Inkl. Wandzeit (Mikrosekunde): 424.955 Mikrosekunden
  • Insgesamt Inkl. CPU (Mikrosekunden): 380.326 Mikrosekunden
  • Insgesamt Inkl. MemUse (Bytes): 4.043.728 Bytes
  • Insgesamt Inkl. PeakMemUse (Bytes): 3.976.000 Bytes
  • Anzahl der Funktionsaufrufe: 15.249

2
Dies ist ideal, da es zwei Lösungen abdeckt, Ausführungszeiten liefert und die Leistungsvorteile +1
BENN1TH

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

So erhalten Sie auch den letzten Artikel:

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

2

@pZirKind ist richtig, Sie können den ersten Artikel aus der Produktkollektion mit den nativen Methoden der Varien Collection-Klasse abrufen, z.

$_category  = $this->getCurrentCategory();

$_collection = $_category->getProductCollection();

$_product = $_collection->getFirstItem()

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

0

Versuchen Sie das bitte

    $_category  = $this->getCurrentCategory();        
    $_collection = $_category->getProductCollection();        
    $_items = $_productCollection->getItems(); 
   if($_items){  
    $_items[0]->getShortName();
    $_items[0]->getProductUrl();
   }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.