Ottieni il file di immagine originale da un URL della cache


33

Esiste una funzione che ha restituito quella originale con un file di prodotto immagine cache?

Esempio :

=> URL cache:

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

=> Risultato desiderato:

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

Risposte:


74

L'URL dell'immagine che hai fornito è impossibile da avere con un negozio Magento. Immagino che tu volessi che fosse offuscato, ma nel farlo hai reso impossibile rispondere.

Non riesco a pensare a nessun motivo per decostruire il percorso dell'immagine a meno che tu non stia raschiando web un altro sito Web, altrimenti, avresti accesso diretto al modello del prodotto e potresti recuperare direttamente queste informazioni.

Tuttavia, usando un esempio reale. Per esempio

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

De costruire il percorso dell'immagine della 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

Individuazione dell'immagine originale

Se caricato tramite l'amministratore Magento , l'immagine originale si trova in,

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

Quindi ottenere l'URL originale è abbastanza semplice, basta rimuovere il percorso della directory della cache e l'hash.

Vale a dire. Rimuoverecache/1/image/9df78eab33525d08d6e5fb8d27136e95/

Così

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

diventa

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

Se caricato tramite flusso di dati / importazione , l'immagine originale si trova in

/ Media / import

Ma oltre ci sarebbero le congetture. Tuttavia, le persone vogliono formattare il loro DIR DIR per l'importazione dipende davvero da loro e la sottodirectory in cui si trovano le immagini non è davvero rilevante, in quanto forniscono il percorso relativo all'immagine durante il caricamento.

Un po 'di hash 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,

Args facoltativi se è presente una filigrana

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

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

Quindi, ad esempio, con le impostazioni predefinite

md5('non_no_no_not_ffffff_0_90')

L' md5hash potrebbe essere lo stesso in tutto il sito - per ogni immagine, ma dovresti capire i valori usati per generarlo. Potresti forzarlo in modo relativamente semplice.

Questo è il valore Magento predefinito per l'hash

9df78eab33525d08d6e5fb8d27136e95

Attribuzioni: sonassi.com


3
Ovviamente hai una risposta incredibilmente esauriente con l'arte ascii ... :)
Filwinkle,

6
LOL - Stavo aspettando che qualcuno commentasse l'arte ASCII :) Vale la pena impiegare 10 minuti per disegnare / scrivere! Chiaramente stiamo pubblicando ufficiosamente la documentazione Magento-1 risposta per risposta.
Ben Lessani - Sonassi,

1
Sonassi, non ho idea di dove venga il tuo tempo, ma sei una grande vittoria per la comunità e tutti noi!
Fabian Blechschmidt,

Mi è stato molto utile e una delle migliori risposte che abbia mai letto. Grazie!
LeCodeur

8

Risposta breve - no. Non esiste un metodo per restituire l'immagine di base in base all'URL dell'immagine della cache. Tuttavia, se rimuovi la cartella della cache e l'hash dovresti essere in grado di intuire quale sarebbe l'URL, ad esempio:

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

rimuovere tutto dopo il prodotto fino al prefisso trie (in questo caso, rimuovere cache/1/image/109x298/9df78eab33525d08d6e5fb8d27136e95/:

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

Forse un modo migliore di affrontare questo, però, è usare il modello a oggetti:

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

5

Questo funziona

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

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

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

probabilmente non è l'approccio migliore ma funziona bene. perché downvote?
Fra

Questo non produrrà risultati incoerenti se ci sono dimensioni dell'immagine nel nome del file, poiché ciò compenserebbe gli indici?
Eric Seastrand,

4

Nel list.phtml, questo è ciò che ha funzionato per me:

echo Mage::getModel('catalog/product_media_config')->getMediaUrl( $_product->getSmallImage()); 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.