Obtenir le fichier image d'origine à partir d'une URL de cache


33

Existe-t-il une fonction permettant à un fichier de produit d'image en cache de renvoyer le fichier d'origine?

Exemple :

=> URL du cache:

{BASEURL}/media/catalog/product/cache/2/image/9df78eab33525d08d6e5fb8d27136e95/a/l/IMAGE.jpg

=> Résultat souhaité:

BASEURL/media/catalog/product/a/l/IMAGE.jpg

Réponses:


74

L'URL de l'image que vous avez fournie est impossible à obtenir avec un magasin Magento. J'imagine que vous vouliez que ce soit obscurci, mais cela a rendu impossible toute réponse.

Je ne vois aucune raison de déconstruire le chemin de l'image à moins de gratter un autre site Web sur le Web. Dans le cas contraire, vous auriez un accès direct au modèle de produit et pourriez récupérer directement ces informations.

Néanmoins, en utilisant un exemple réel. Par exemple

/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/m/e/me-d1_2.jpg

De construire le chemin de l'image du cache

/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/m/e/me-d1_2.jpg
|___________________________|_|_____|________________________________|_|_|__________|
             |               |   |                  |                 | |     |
       Cache Directory       |   |                  |                 | |     |
Mage/Catalog/Model/Product/Media/Config.php         |                 | |     |
getBaseMediaPath()           |   |                  |                 | |     |
                             |   |                  |                 | |     |
                             |   |                  |                 | |     |
                          Store ID                  |                 | |     |
                          Mage::app()->getStore()->getId()            | |     |
                                 |                  |                 | |     |
                                 |                  |                 | |     |
                            Subdirectory            |                 | |     |
                            Mage/Catalog/Model/Product/Image.php      | |     |
                            getDestinationSubdir()  |                 | |     |
                                                    |                 | |     |
                                                    |                 | |     |
                                              MD5 of Image Params     | |     |
                                              See below               | |     |
                                              Mage/Catalog/Model/Product/Image.php
                                              Line +324               | |     |
                                                                      | |     |
                                                                      | |     |
                                                          First letter of Image Name
                                                                        |     |
                                                                        |     |
                                                          Second letter of Image Name
                                                                              |
                                                                              |
                                                                     Original Image Name

Localisation de l'image d'origine

Si téléchargé via l’administrateur de Magento , l’image originale se trouve à,

/media/catalog/product/m/e/me-d1_2.jpg

Donc, obtenir l'URL d'origine est assez facile, il suffit de supprimer le chemin du répertoire de cache et le hachage.

C'est à dire. Retirercache/1/image/9df78eab33525d08d6e5fb8d27136e95/

Alors

/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/m/e/me-d1_2.jpg

Devient

/media/catalog/product/m/e/me-d1_2.jpg

Si téléchargé via dataflow / import , l'image originale se trouve dans

/ media / import

Mais au-delà, il y aurait des conjectures. Cependant, les utilisateurs souhaitent formater leur répertoire de téléchargement pour l'importation, c'est leur choix et le sous-répertoire dans lequel les images se trouvent n'a vraiment aucune pertinence, car ils fournissent le chemin d'accès relatif à l'image lors du téléchargement.

Un peu sur le md5 Hash

($this->_keepAspectRatio  ? '' : 'non') . 'proportional',
($this->_keepFrame        ? '' : 'no')  . 'frame',
($this->_keepTransparency ? '' : 'no')  . 'transparency',
($this->_constrainOnly ? 'do' : 'not')  . 'constrainonly',
$this->_rgbToString($this->_backgroundColor),
'angle' . $this->_angle,
'quality' . $this->_quality,

Arguments optionnels s'il y a un filigrane

$this->getWatermarkFile(),
$this->getWatermarkImageOpacity(),
$this->getWatermarkPosition(),
$this->getWatermarkWidth(),
$this->getWatermarkHeigth()

md5(implode('_', $miscParams));

Donc, par exemple, avec les valeurs par défaut

md5('non_no_no_not_ffffff_0_90')

Le md5hachage pourrait être le même sur tout le site - pour chaque image, mais vous auriez besoin de déterminer les valeurs utilisées pour le générer. Vous pouvez le forcer assez facilement.

C'est la valeur par défaut de Magento pour le hachage

9df78eab33525d08d6e5fb8d27136e95

Attributions: sonassi.com


3
Bien sûr, vous avez une réponse incroyablement exhaustive avec l'art ascii ... :)
philwinkle

6
LOL - J'attendais que quelqu'un commente l'art ASCII :) Cela en vaut la peine qu'il ait fallu 10 minutes pour dessiner / taper! Il est clair que nous publions de manière non officielle la documentation de Magento-1 réponse par réponse.
Ben Lessani - Sonassi

1
Sonassi, je ne sais pas d'où votre temps vient, mais vous êtes une grande victoire pour la communauté et pour nous tous!
Fabian Blechschmidt

Cela m'a été très utile et l'une des meilleures réponses que j'ai jamais lues. Merci!
LeCodeur

8

Réponse courte - non. Il n'existe aucune méthode pour renvoyer l'image de base en fonction de l'URL de l'image cache. Cependant, si vous supprimez le dossier de cache et le hachage, vous devriez être en mesure de deviner ce que serait l'URL, par exemple:

 http://www.mysite.com/media/catalog/product/cache/1/image/109x298/9df78eab33525d08d6e5fb8d27136e95/u/t/uti001_2.jpg

tout supprimer après le produit jusqu'au préfixe trie (dans ce cas, supprimer cache/1/image/109x298/9df78eab33525d08d6e5fb8d27136e95/:

 http://www.mysite.com/media/catalog/product/u/t/uti001_2.jpg

Cependant, une meilleure façon de gérer cela consiste à utiliser le modèle objet:

$product = Mage::getModel('catalog/product')->load(42);
echo $product->getImage();
echo $product->getThumbnail();

5

Cela marche

   $r = explode('/' ,$imagesCachePath);

   unset($r[6]);
   unset($r[7]);
   unset($r[8]);
   unset($r[9]);

   $r = implode('/',$r);

ce n'est probablement pas la meilleure approche mais fonctionne bien. pourquoi downvote?
partir de

Cela ne produira-t-il pas des résultats incohérents s'il y a des dimensions d'image dans le nom de fichier, car cela décalerait les index?
Eric Seastrand

4

Dans le list.phtml, voici ce qui a fonctionné pour moi:

echo Mage::getModel('catalog/product_media_config')->getMediaUrl( $_product->getSmallImage()); 
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.