47 votes

Comment obtenir l'image d'un produit dans Magento ?

Je fonctionne sur la version 1.3.2.1, mais sur le serveur de mon client ils avaient Magento 1.3.0 donc mon code précédent pour afficher les images pour ma copie locale,

echo $this->helper('catalog/image')->init($_product)->resize(163, 100);

ne fonctionne pas sur l'installation du client.

En regardant les résultats renvoyés par leur Magento, la version 1.3.0 renvoie effectivement une URL bien qu'elle pointe vers le dossier média du skin.

Existe-t-il un moyen d'obtenir le chemin absolu de l'image ?
Ou dois-je apporter des modifications à un autre endroit pour indiquer à Magento que le répertoire média doit se trouver sur la racine ?

1 votes

Ma faute, il ne charge pas les images depuis le répertoire du skin, il se trouve qu'il charge l'image par défaut no-image-found (dans le répertoire du skin) au cas où l'image du produit n'est pas trouvée.

0 votes

(string)Mage::helper('catalog/image')->init($product, 'image') ;

55voto

silvo Points 2970
echo $_product->getImageUrl();

Cette méthode de la classe Produit devrait faire l'affaire pour vous.

8 votes

N'oubliez pas d'ajouter aussi ceci : ->addAttributeToSelect('image')

0 votes

@HaydenThring vous êtes le sauveur !

3 votes

Déprécié depuis la version 1.1.5

33voto

Ricardo Martins Points 1249

Vous pouvez essayer de remplacer $this-> por Mage:: dans certains cas. Vous devez convertir en chaîne de caractères.

Dans mon cas, j'utilise Extension DirectResize (lien direct) Mon code est donc le suivant :

(string)Mage::helper('catalog/image')->init($_product, 'image')->directResize(150,150,3)

Les options de rapport (3ème paramètre) sont :

  • none proportionnel. L'image sera redimensionnée selon les valeurs Largeur et Hauteur.
  • proportionnel, basé sur la valeur de la largeur 2
  • proportionnel, sur la base de la valeur Height 3
  • proportionnelle pour la nouvelle image peut tenir dans les valeurs Largeur et Hauteur. 4
  • proportionnel. La nouvelle image couvrira une zone ayant les valeurs Largeur et Hauteur.

Mise à jour : autres infos et versions aquí


La voie commune, sans plugin serait :

(string)Mage::helper('catalog/image')->init($_product, 'image')->resize(150)

Vous pouvez remplacer "image" par "small_image" ou "thumbnail".

1 votes

À votre avis, pourquoi 'image' ne fonctionne pas et 'small_image' fonctionne, dans ma configuration ? L'option 'image' affiche toujours l'image standard de Magento (mais dans mes produits, j'ai spécifié les trois images : base, small et thumb). Jusqu'à il y a quelques jours, 'image' fonctionnait, puis s'est soudainement arrêté. Aucune mise à jour ou autre changement n'a été effectué dans le back-end.

13voto

Remy Points 378

J'ai récemment eu besoin de faire cela aussi... voici comment j'y suis arrivé :

$_product->getMediaGalleryImages()->getItemByColumnValue('label', 'LABEL_NAME')->getUrl();

J'espère que cela vous aidera !

1 votes

C'était parfait. Pratique pour obtenir une image spécifique (une bannière de produit, par exemple) en dehors de la vue du produit.

0 votes

Cool. Ça marche comme un charme. Merci.

8voto

Mitch Thompson Points 41

Voici la méthode que j'ai trouvée pour charger toutes les données d'image pour tous les produits d'une collection. Je ne suis pas sûr pour le moment pourquoi il est nécessaire de passer de Mage::getModel à Mage::helper et de recharger le produit, mais cela doit être fait. J'ai fait l'ingénierie inverse de ce code à partir de l'api magento image soap, donc je suis presque sûr que c'est correct.

Je l'ai configuré pour charger les produits dont le code fournisseur est égal à '39' mais vous pouvez changer cet attribut pour n'importe quel autre, ou simplement charger tous les produits, ou charger n'importe quelle collection que vous voulez (y compris les collections dans les fichiers phtml montrant les produits actuellement à l'écran !)

$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addFieldToFilter(array(
    array('attribute'=>'vendor_code','eq'=>'39'),
));

$collection->addAttributeToSelect('*');

foreach ($collection as $product) {

    $prod = Mage::helper('catalog/product')->getProduct($product->getId(), null, null);

    $attributes = $prod->getTypeInstance(true)->getSetAttributes($prod);

    $galleryData = $prod->getData('media_gallery');

    foreach ($galleryData['images'] as &$image) {
        var_dump($image);
    }

}

5voto

gowri Points 4775

Vous devez d'abord vérifier que l'image de base, la petite image et la vignette sont sélectionnées dans l'administration de Magento.

admin->catalogue->gestion du produit->produit->image

Sélectionnez ensuite le rôle de votre image (base, petit, vignette). enter image description here

Ensuite, vous appelez l'image en utilisant

echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(163, 100) ;

J'espère que cela vous aidera.

1 votes

Le redimensionnement ne fonctionne pas, il affiche toujours une image de 210 x 210. J'ai essayé de vider le cache et les index.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X