Dapatkan file gambar asli dari URL cache

33

Apakah ada fungsi yang memberikan file produk gambar cache mengembalikan yang asli?

Contoh:

=> URL Cache:

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

=> Hasil yang diinginkan:

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

Jawaban:

74

URL gambar yang Anda berikan tidak mungkin dimiliki oleh toko Magento. Saya kira Anda ingin itu dikaburkan, tetapi dengan melakukan itu tidak memungkinkan untuk menjawab.

Saya tidak dapat memikirkan alasan apa pun untuk membangun ulang jalur gambar kecuali jika Anda menggores situs web lain, jika tidak, Anda akan memiliki akses langsung ke model produk dan dapat mengambil informasi ini secara langsung.

Namun demikian, menggunakan contoh nyata. Misalnya

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

De membangun jalur gambar 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

Menemukan gambar asli

Jika diunggah melalui admin Magento , gambar aslinya terletak di,

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

Jadi mendapatkan URL asli cukup mudah, cukup hapus jalur direktori cache dan hash.

Yaitu. Menghapuscache/1/image/9df78eab33525d08d6e5fb8d27136e95/

Begitu

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

Menjadi

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

Jika diunggah melalui aliran data / impor , gambar asli terletak di

/ media / impor

Tapi di luar akan ada dugaan. Namun orang-orang ingin memformat DIR unggahan mereka untuk impor benar-benar terserah mereka dan subdirektori gambarnya benar-benar tidak relevan - karena mereka memberikan jalur relatif ke gambar ketika mengunggah.

Sedikit tentang 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,

Argumen opsional jika ada tanda air

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

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

Jadi misalnya, dengan default

md5('non_no_no_not_ffffff_0_90')

The md5hash bisa sama di seluruh situs - untuk setiap gambar, tetapi Anda akan perlu untuk mengetahui nilai-nilai yang digunakan untuk menghasilkan itu. Anda bisa dengan kasar memaksanya dengan relatif mudah.

Ini adalah nilai Magento default untuk hash

9df78eab33525d08d6e5fb8d27136e95

Atribut: sonassi.com

Ben Lessani - Sonassi
sumber
3
Tentu saja Anda memiliki jawaban yang sangat lengkap dengan seni ascii ... :)
philwinkle
6
LOL - Saya sedang menunggu seseorang untuk mengomentari seni ASCII :) Membuatnya bermanfaat bahwa butuh 10 menit untuk menggambar / mengetik! Jelas kami tidak memposting jawaban dokumentasi Magento-1 secara tidak resmi.
Ben Lessani - Sonassi
1
sonassi, saya tidak tahu, dari mana waktu Anda berasal, tetapi Anda adalah kemenangan besar bagi masyarakat dan kita semua!
Fabian Blechschmidt
Itu sangat berguna bagi saya, dan salah satu jawaban terbaik yang pernah saya baca. Terima kasih!
LeCodeur
8

Jawaban singkat - tidak. Tidak ada metode untuk mengembalikan gambar dasar berdasarkan url gambar cache. Namun, jika Anda menghapus folder cache dan hash Anda harus dapat melihat seperti apa URL itu, misalnya:

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

hapus semuanya setelah produk sampai trif awalan (dalam hal ini, hapus cache/1/image/109x298/9df78eab33525d08d6e5fb8d27136e95/:

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

Mungkin cara yang lebih baik untuk menangani ini adalah menggunakan model objek:

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

Ini bekerja

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

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

   $r = implode('/',$r);
Fra
sumber
itu mungkin bukan pendekatan terbaik tetapi berfungsi dengan baik. mengapa downvote?
Fra
Bukankah ini akan menghasilkan hasil yang tidak konsisten jika ada dimensi gambar dalam nama file, karena ini akan mengimbangi indeks?
Eric Seastrand
4

Dalam list.phtml, inilah yang bekerja untuk saya:

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