Önbellek URL'sinden orijinal resim dosyasını al


33

Önbellek görüntü ürün dosyasına orijinalin döndürdüğü bir işlev var mı?

Örnek :

=> Önbellek URL'si:

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

=> İstenilen sonuç:

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

Yanıtlar:


74

Verdiğiniz resim URL’sinin Magento mağazasında olması mümkün değil. Sanırım karışıklığa uğramak istedin, ama bunu yaparken cevap vermeyi imkansız hale getirdin.

Başka bir web sitesini webden kazımadığınız sürece görüntü yolunu kaldırmak için herhangi bir neden düşünemiyorum, aksi takdirde ürün modeline doğrudan erişebilir ve bu bilgileri doğrudan alabilirsiniz.

Bununla birlikte, gerçek bir örnek kullanarak. Örneğin

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

Önbellek resmi yolunu oluşturma

/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

Orijinal görüntünün yerini belirleme

Magento yöneticisi ile yüklüyse , orijinal resim şurada bulunur:

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

Orijinal URL'yi almak oldukça kolaydır, sadece önbellek dizini yolunu ve karmasını kaldırın.

Yani. Kaldırcache/1/image/9df78eab33525d08d6e5fb8d27136e95/

Yani

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

Oluyor

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

Veri akışı / içe aktarma yoluyla yüklüyse , orijinal resim

/ Media / ithalat

Fakat ötesinde, tahminler de olur. Bununla birlikte, insanlar içe aktarma için DIR'lerini biçimlendirmek istiyorlar ve bu onlara bağlı ve resimlerin gerçekten ilgili olmadığı alt dizin - yükleme sırasında görüntünün göreceli yolunu sağladıkları için.

Md5 Hash hakkında bir bit

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

Filigran varsa isteğe bağlı args

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

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

Örneğin, varsayılanlarla

md5('non_no_no_not_ffffff_0_90')

md5Karma sitenin tamamında aynı olabilir - her resim için, ama bunu üretmek için kullanılan değerler anlamaya gerekir. Bunu göreceli olarak kolayca zorlayabilirsin.

Bu, karma için varsayılan Magento değeridir.

9df78eab33525d08d6e5fb8d27136e95

Atıflar : sonassi.com


3
Tabii ki ascii sanatıyla inanılmaz derecede ayrıntılı bir cevabınız var ... :)
philwinkle

6
LOL - Birisinin ASCII sanatı hakkında yorum yapmasını bekliyordum :) Çizmek / yazmak 10 dakika sürdü! Açıkça biz gayri resmi olarak Magento-1 dokümantasyon cevabını cevap olarak gönderiyoruz.
Ben Lessani - Sonassi

1
sonassi, zamanın nereden geldiğine dair hiçbir fikrim yok, ama sen ve hepimiz için büyük bir kazandın!
Fabian Blechschmidt

Bu benim için çok faydalı oldu ve okuduğum en iyi cevaplardan biri. Teşekkürler!
LeCodeur

8

Kısa cevap - hayır. Önbellek görüntüsünün URL'sini temel alarak temel görüntüyü döndürmenin bir yöntemi yoktur. Bununla birlikte, önbellek klasörünü ve karmasını kaldırırsanız, URL'nin ne olacağını sezebilmelisiniz, örneğin:

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

ön eke kadar üründen sonraki her şeyi kaldır (bu durumda, kaldır cache/1/image/109x298/9df78eab33525d08d6e5fb8d27136e95/:

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

Belki de bununla başa çıkmanın daha iyi bir yolu, nesne modelini kullanmaktır:

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

5

Bu çalışıyor

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

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

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

Muhtemelen en iyi yaklaşım değil ama iyi çalışıyor. neden aşağı oy?
Fra

Bu, dosya adında görüntü boyutları varsa dizinleri dengeleyeceğinden tutarsız sonuçlar üretmez mi?
Eric Seast ve

4

Bu, list.phtmlbenim için çalıştı budur:

echo Mage::getModel('catalog/product_media_config')->getMediaUrl( $_product->getSmallImage()); 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.