J'ai une collection de produits à Magento que j'aimerais pouvoir obtenir les images de la galerie de médias. Cependant, je constate que je dois intituler ma collection et charger le produit pour obtenir la fonction GetMediagalleryimages () pour fonctionner correctement. Je pourrais évidemment continuer à recharger le produit à chaque fois, Mais cela ajouterait un peu de surcharge au moment requis pour exécuter ce code. P> est un moyen d'ajouter dans les images de la galerie de médias à la collection? P> P>
5 Réponses :
Ici, le code que vous recherchiez, désolé pour le retard :)
Cela vient de cette discussion: http://www.magentocommerce.com/boards/viewththread/17414/ P>
Je viens d'ajouter un contrôle supplémentaire sur le nombre d'identifiant A et de pagination p>
Veillez à ce que les informations relatives à la marque et à la valeur par défaut ont été commentées dans la requête
Je prolonge une extension de sorte que nous puissions présenter des produits sur la page d'accueil Magento et je me demande où je peux implémenter ce code afin que nous puissions Chargez des images de la galerie de produit avec la collection à la page d'accueil . Ne savez pas si nous devions ajouter cette fonction au modèle ou exécuter à partir du fichier de modèle.
Vous pouvez remplacer cette classe MAGE_CATALOG_BLOCK_PRODUCT_LIST ... ou le mettre dans n'importe quelle classe liée à votre modèle ... Il vous suffit de passer la collection et de faire le travail ... UP vote est toujours la bienvenue;)
En tout cas, je suis d'accord, cela fonctionne et il est plus rapide que chargez le produit. (Je suis surpris que cette réponse a été évitée alors qu'il y ait au moins 2 réponse totalement fausse mais avec un score élevé)
Charger l'image mise en cache du produit à l'aide de la collection par les codes suivants // ou p> PRE> xxx pré> // ou p> $collection = Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect('small_image') //or
->addAttributeToSelect('thumbnail') //or
->addAttributeToSelect('image');
Cela ne chargez pas la galerie multimédia, mais seulement les 3 images principales (petit, pouce, image principale)
Vous pouvez utiliser
$product->load('media_gallery');
étrangement, cela fonctionne. La magie se produit dans mage_eav_model_entyty_abstract-> charger ($ objet, $ entityidid, $ attributs). Si $ Attributs est vide, il appellera Lohallattribute ($ objet). Donc, $ Produit-> Charge ('Blah') chargera tous les attributs manquants, y compris 'media_gallery'
Cela charge-t-il donc un produit individuel? Si tel est le cas, il est donc prohibitif de l'utiliser pour un grand nombre de produits et annule l'avantage d'utiliser des collections.
La magie ! ça a marché. Si vous utilisez quelque part dans le téléchargement de l'image produit, assurez-vous d'enregistrer le produit avant d'utiliser ceci.
Oui, ce chargement de l'ensemble du produit de sorte que cette réponse est totalement fausse pour 2 raisons: 1. Il est évident que le chargement de l'ensemble du produit que vous obtenez également la galerie multimédia, 2. La charge de fonction est utilisée dans le mauvais sens
Vous pouvez créer une classe d'assistance et l'utiliser à chaque fois que vous avez besoin d'images de galerie multimédia pour être chargée pour une collection de produits: Utilisation des échantillons: p> $coll = Mage::getResourceModel('catalog/product_collection')
->setStoreId( Mage::app()->getStore()->getId() )
->addAttributeToFilter( 'sku', array( 'in' => array( 'AAA', 'BBB' ) ) );
Mage::helper('my_package/media')->addMediaGalleryAttributeToProductCollection( $coll );
une méthode simple pour référence future:
En dehors de votre forach Ajouter P>
foreach ($productCollection as $product) { $mediaBackend->afterLoad($product); }
Je n'ai pas testé mais je pense que c'est la seule bonne réponse sur cette page
Vous pouvez faire une jointure: MediaGalleryCollection -> Rejoignez le produitCollection dans lequel ProductID -S IN (ID, ID, ID, ID). Comme il y a généralement plus d'une image par produit, vous ne pouvez pas simplement les rejoindre au produitCollection
Cette question a été répondue dans un autre poste: Stackoverflow.com/Questtions/5900522/...