2016-05-13 4 views
0

Ich habe benutzerdefinierte Funktionalität in meiner Produktseite, wo viele Produkte in einer Tabelle angezeigt werden. Jetzt habe ich ein Array mit Produkt SKUs und Schleife sie foreach-Funktion Details unterWie bekomme ich mehrere Produktdetails in Magento 1.7

$url = Mage::getModel('catalog/product')->loadByAttribute('sku', $productSku)->getProductUrl();//get product page url of ech product 
$productName = Mage::getModel('catalog/product')->loadByAttribute('sku', $productSku)->getName();//get product name 
$productPrice = Mage::getModel('catalog/product')->loadByAttribute('sku', $productSku)->getFinalPrice();//get product price 
$qtyStock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId())->getQty(); 

Das Problem bei dieser Verwendung von Codes zu bekommen, ist, die Ladezeit meiner Seite ist bei 25 Sekunden. Gibt es eine Möglichkeit, alle Produktdetails der SKUs, die ich in meinem Array habe, in einem Anruf oder einer Anrufgruppe zu erhalten, da ich die Anzahl der Anrufe reduzieren muss, um die Ladezeit meiner Seite zu verbessern.

+0

warum verwenden Sie nicht eine Sammlung statt laden Modell so oft: o –

Antwort

2

Es gibt eine viel einfachere, um nicht zu sagen effizientere Möglichkeit, mehrere Produkte zu laden. Sie können in Sammlungen laden:

<?php 
$products = Mage::getModel('catalog/product') 
    ->getCollection() 
    ->addAttributeToSelect('*') // You can filter by attributes if required. 
    ->addAttributeToFilter('type_id', 'simple') // You can change to configurable or bundle or grouped, etc. 
    ->addFieldToFilter('attribute_set_id', 11); // If you want to get products that are a certain attribute set. 
?> 

Sie können dann ein foreach, um durch jedes Produkt verwenden und ihre Daten auf diese Weise erhalten:

<?php 
foreach($products as $product) { 
    echo "Name: " . $product->getName(); 
    echo "Price: " . $product->getPrice(); 
    // etc, etc 
?> 

Mehr Informationen zu Sammlungen hier: http://devdocs.magento.com/guides/m1x/magefordev/mage-for-dev-8.html (nach unten scrollen zu Modell Sammlungen).

EDIT - zum Filter von SKUs, können Sie entweder die genaue SKUs Sie wollen:

->addAttributeToFilter('sku', array('in' => array('customsku-101', 'customsku-101', 'customsku-102'))) 

oder Sie können SKUs erhalten, die mit einer bestimmten Zeichenfolge beginnen:

->addAttributeToFilter('sku', array('like' => 'customsku-%')); 

oder enden mit eine bestimmte Zeichenfolge (% ist der Platzhalter):

->addAttributeToFilter('sku', array('like' => '%-customsku')); 
+0

Das Problem ist, dass ich einen bestimmten Satz von SKUs an die Produktkollektion übergeben muss. Kann ich das bekommen? – prdp

+0

@ prdp Sie können tatsächlich - siehe bearbeiten. –

+0

@ Prdp HINWEIS: für das, was Sie versuchen zu tun, sollte die Verwendung von 'addFieldToFilter()' oder 'addAttributeToFilter()' sollte das gleiche funktionieren. –