Pobierz oryginalny plik obrazu z adresu URL pamięci podręcznej


33

Czy jest jakaś funkcja, która podając plik produktu obrazu pamięci podręcznej zwraca oryginał?

Przykład:

=> Adres URL pamięci podręcznej:

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

=> Pożądany wynik:

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

Odpowiedzi:


74

Podany adres URL obrazu jest niemożliwy do uzyskania w sklepie Magento. Domyślam się, że chciałeś go zaciemnić, ale w ten sposób uniemożliwiłeś odpowiedź.

Nie mogę wymyślić żadnego powodu, aby usunąć ścieżkę obrazu, chyba że robisz przeglądanie stron internetowych innej witryny, w przeciwnym razie miałbyś bezpośredni dostęp do modelu produktu i mógłbyś pobrać te informacje bezpośrednio.

Niemniej jednak, używając prawdziwego przykładu. Na przykład

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

De konstruowanie ścieżki obrazu pamięci podręcznej

/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

Lokalizowanie oryginalnego obrazu

W przypadku przesłania za pośrednictwem administratora Magento oryginalny obraz znajduje się pod adresem,

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

Tak więc uzyskanie oryginalnego adresu URL jest dość łatwe, wystarczy usunąć ścieżkę katalogu podręcznego i skrót.

To znaczy. Usunąćcache/1/image/9df78eab33525d08d6e5fb8d27136e95/

Więc

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

Staje się

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

W przypadku przesłania za pośrednictwem przepływu danych / importu oryginalny obraz znajduje się w

/ media / import

Ale poza tym będą domysły. Jednak ludzie chcą sformatować swój plik DIR do importu, tak naprawdę zależy od nich, a podkatalog, w którym znajdują się obrazy, naprawdę nie jest istotny - ponieważ zapewniają względną ścieżkę do obrazu podczas przesyłania.

Trochę o haszu md5

($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,

Opcjonalne argumenty, jeśli istnieje znak wodny

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

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

Na przykład z ustawieniami domyślnymi

md5('non_no_no_not_ffffff_0_90')

md5Hash może być taka sama na całej stronie - dla każdego obrazu, ale trzeba by wymyślić wartości użyte do wygenerowania tego. Możesz brutalnie wymusić to stosunkowo łatwo.

Jest to domyślna wartość Magento dla skrótu

9df78eab33525d08d6e5fb8d27136e95

Uznanie autorstwa: sonassi.com


3
Oczywiście masz niewiarygodnie wyczerpującą odpowiedź ze sztuką ascii ... :)
philwinkle

6
LOL - Czekałem, aż ktoś skomentuje sztukę ASCII :) Warto, żeby narysowanie / napisanie zajęło 10 minut! Najwyraźniej nieoficjalnie publikujemy odpowiedź na dokumentację Magento-1 jako odpowiedź.
Ben Lessani - Sonassi

1
sonassi, nie mam pojęcia, skąd pochodzi twój czas, ale jesteś wielką wygraną dla społeczności i nas wszystkich!
Fabian Blechschmidt

To było dla mnie bardzo przydatne i jedna z najlepszych odpowiedzi, jakie kiedykolwiek przeczytałem. Dzięki!
LeCodeur,

8

Krótka odpowiedź - nie. Nie ma metody zwrócenia obrazu podstawowego na podstawie adresu URL obrazu pamięci podręcznej. Jeśli jednak usuniesz folder pamięci podręcznej i skrót, powinieneś mieć możliwość intuicyjnego określenia adresu URL, np .:

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

usuń wszystko po produkcie aż do prefiksu trie (w tym przypadku usuń cache/1/image/109x298/9df78eab33525d08d6e5fb8d27136e95/:

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

Być może jednak lepszym sposobem radzenia sobie z tym jest użycie modelu obiektowego:

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

5

To działa

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

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

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

nie jest to prawdopodobnie najlepsze podejście, ale działa dobrze. dlaczego głosować?
Fra

Czy nie spowoduje to niespójnych wyników, jeśli w nazwie pliku znajdują się wymiary obrazu, ponieważ spowodowałoby to przesunięcie indeksów?
Eric Seastrand,

4

W tym list.phtml, co działało dla mnie:

echo Mage::getModel('catalog/product_media_config')->getMediaUrl( $_product->getSmallImage()); 
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.