Holen Sie sich die Original-Bilddatei von einer Cache-URL

33

Gibt es eine Funktion, mit der eine Cache-Image-Produktdatei die ursprüngliche zurückgibt?

Beispiel

=> Cache URL:

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

=> Gewünschtes Ergebnis:

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

Antworten:

74

Die von Ihnen angegebene Bild-URL ist in einem Magento-Shop nicht verfügbar. Ich nehme an, Sie wollten, dass es verschleiert wird, haben es aber unmöglich gemacht, darauf zu antworten.

Ich kann mir keinen Grund vorstellen, den Bildpfad zu dekonstruieren, wenn Sie nicht eine andere Website über das Web scrappen. Andernfalls hätten Sie direkten Zugriff auf das Produktmodell und könnten diese Informationen direkt abrufen.

Trotzdem anhand eines realen Beispiels. Z.B

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

Erstellen Sie den Cache-Image-Pfad

/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

Auffinden des Originalbilds

Beim Hochladen über den Magento-Administrator befindet sich das Originalbild unter

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

Das Abrufen der ursprünglichen URL ist also ziemlich einfach. Entfernen Sie einfach den Cache-Verzeichnispfad und den Hash.

Dh Löschencache/1/image/9df78eab33525d08d6e5fb8d27136e95/

So

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

Wird

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

Beim Hochladen über Datenfluss / Import befindet sich das Originalbild in

/ media / import

Aber darüber hinaus würde es Rätselraten geben. Wie auch immer die Leute ihr Upload-DIR für den Import formatieren wollen, ist ihnen überlassen und das Unterverzeichnis, in dem sich die Bilder befinden, ist nicht wirklich relevant - da sie den relativen Pfad zum Bild beim Upload angeben.

Ein bisschen über den 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,

Optionale Argumente, wenn ein Wasserzeichen vorhanden ist

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

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

So zum Beispiel mit den Vorgaben

md5('non_no_no_not_ffffff_0_90')

Der md5Hash könnte auf der gesamten Site gleich sein - für jedes Bild, aber Sie müssten herausfinden, welche Werte verwendet werden, um es zu generieren. Sie könnten es relativ leicht brachial erzwingen.

Dies ist der Standard-Magento-Wert für den Hash

9df78eab33525d08d6e5fb8d27136e95

Zuschreibungen: sonassi.com

Ben Lessani - Sonassi
quelle
3
Natürlich haben Sie eine unglaublich umfassende Antwort mit ASCII-Kunst ... :)
Philwinkle
6
LOL - Ich habe darauf gewartet, dass jemand die ASCII-Grafik kommentiert :) Lohnt es sich, dass das Zeichnen / Tippen 10 Minuten gedauert hat! Offensichtlich veröffentlichen wir die Magento-1-Dokumentation inoffiziell Antwort für Antwort.
Ben Lessani - Sonassi
1
sonassi, ich habe keine ahnung, woher deine zeit kommt, aber du bist ein großer gewinn für die gemeinschaft und uns alle!
Fabian Blechschmidt
Das war sehr nützlich für mich und eine der besten Antworten, die ich je gelesen habe. Vielen Dank!
LeCodeur
8

Kurze Antwort - nein. Es gibt keine Methode, um das Basis-Image basierend auf der Cache-Image-URL zurückzugeben. Wenn Sie jedoch den Cache-Ordner und den Hash entfernen, sollten Sie in der Lage sein, die URL zu erkennen, z. B .:

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

entferne alles nach dem Produkt bis zum Präfix trie (in diesem Fall entferne cache/1/image/109x298/9df78eab33525d08d6e5fb8d27136e95/:

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

Vielleicht ist es jedoch besser, das Objektmodell zu verwenden:

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

Das funktioniert

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

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

   $r = implode('/',$r);
Fra
quelle
es ist wahrscheinlich nicht der beste Ansatz, funktioniert aber gut. warum abstimmen?
Ab
Wird dies nicht zu inkonsistenten Ergebnissen führen, wenn der Dateiname Bildabmessungen enthält, da dies die Indizes versetzen würde?
Eric Seastrand
4

Das list.phtmlhat bei mir funktioniert:

echo Mage::getModel('catalog/product_media_config')->getMediaUrl( $_product->getSmallImage()); 
wpguy
quelle