8
votes

Obtenez des images de la galerie de médias à partir d'une collection de produits à Magento

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. XXX

Je pourrais évidemment continuer à recharger le produit à chaque fois, Mais cela ajouterait un peu de surcharge au moment requis pour exécuter ce code.

est un moyen d'ajouter dans les images de la galerie de médias à la collection?


2 commentaires

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/...


5 Réponses :


-5
votes

Ici, le code que vous recherchiez, désolé pour le retard :)

Cela vient de cette discussion: http://www.magentocommerce.com/boards/viewththread/17414/

Je viens d'ajouter un contrôle supplémentaire sur le nombre d'identifiant A et de pagination xxx


4 commentaires

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é)



3
votes

Charger l'image mise en cache du produit à l'aide de la collection par les codes suivants xxx pré>

// ou p> PRE> xxx pré>

// ou p>

$collection = Mage::getModel('catalog/product')->getCollection()
        ->addAttributeToSelect('small_image') //or
        ->addAttributeToSelect('thumbnail')  //or
        ->addAttributeToSelect('image');


1 commentaires

Cela ne chargez pas la galerie multimédia, mais seulement les 3 images principales (petit, pouce, image principale)



18
votes

Vous pouvez utiliser

$product->load('media_gallery');


4 commentaires

é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



0
votes

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: xxx pré>

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 );


0 commentaires

7
votes

une méthode simple pour référence future:

En dehors de votre forach Ajouter P>

foreach ($productCollection as $product) {
    $mediaBackend->afterLoad($product);
}


1 commentaires

Je n'ai pas testé mais je pense que c'est la seule bonne réponse sur cette page