Comment obtenir le premier article de la collection de produits

23

Dans la catégorie view.phtml, si j'obtiens la catégorie, puis une collection de produits, comment puis-je obtenir le premier formulaire de produit de la collection affecté à $ _product à utiliser dans le code? Voici ce que j'ai:

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

J'ai essayé d'utiliser foreach mais j'obtenais toujours des erreurs.

danny
la source
2
$_product = $_collection->getFirstItem()
pzirkind
1
@pzirkind a mis cette answer.please ne le mettez pas comment
Amit Bera
1
J'ai essayé cela mais j'obtiens une erreur - Méthode non valide Mage_Catalog_Block_Category_View :: canEmailToFriend (Array))
danny
1
@heisenberg qui signifie que vous essayez d'appeler une fonction qui ne se termine pas, de toute façon, c'est une erreur différente (non liée à votre question d'origine), soit mettez à jour votre question avec le nouveau code ou commencez-en une nouvelle
pzirkind
@danny si vous avez trouvé une réponse ici, veuillez accepter de marquer cette question comme résolue.
sv3n

Réponses:

25

Pour obtenir le premier élément d'une collection, utilisez simplement la getFirstItem()fonction de la collection.

Exemple:

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

Exemple 2 (pour cette question particulière):

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

Certains autres domaines peuvent être utilisés:

Les clients

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

Ordres

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

Notez s'il vous plaît:

Ce n'est pas une bonne idée de charger TOUS les produits / clients / commandes car cela prend beaucoup de ressources. La manière préférée est de limiter ce que vous voulez charger en utilisant les fonctions addAttributeToFilter()ou addFieldToFilter(), voir l'exemple ci-dessous:

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

pzirkind est totalement correct, se demandant simplement que personne ne se soucie des performances. Si vous souhaitez UNIQUEMENT le premier / dernier élément d'une collection, vous devez toujours limiter votre requête à 1:

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

Le simple fait d'utiliser getFirstItem()chargera toujours toute la collection et après cela, il agrandira le premier élément.


Exemple : catégorie avec 750 produits

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

Juste getFirstItem():

  • Total incl. Temps de paroi (microsec): 2,318,497 microsecs
  • Total incl. CPU (microsecs): 2,000,604 microsecs
  • Total incl. MemUse (octets): 7 729 776 octets
  • Total incl. PeakMemUse (octets): 7 977 672 octets
  • Nombre d'appels de fonction: 96 957

Ajout getSelect()->limit(1):

  • Total incl. Temps de paroi (microsec): 424,955 microsecs
  • Total incl. CPU (microsecs): 380,326 microsecs
  • Total incl. MemUse (octets): 4 043 728 octets
  • Total incl. PeakMemUse (octets): 3 976 000 octets
  • Nombre d'appels de fonction: 15 249
sv3n
la source
2
Ceci est idéal car il couvre deux solutions, fournit des temps d'exécution et explique les avantages en
termes de
3
var_dump($_collection->getFirstItem()->getData());
echo $_collection->getFirstItem()->getName();

Aussi comment obtenir le dernier élément:

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

@pZirKind a raison, vous pouvez obtenir le premier article de la collection de produits en utilisant les méthodes natives de la classe Varien Collection comme:

$_category  = $this->getCurrentCategory();

$_collection = $_category->getProductCollection();

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

Essayez ceci s'il vous plaît

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