कैश URL से मूल छवि फ़ाइल प्राप्त करें


33

क्या कोई फ़ंक्शन है जिसने कैश छवि उत्पाद फ़ाइल को मूल एक लौटाया है?

उदाहरण :

=> कैश URL:

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

=> वांछित परिणाम:

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

जवाबों:


74

छवि URL जो आपने दिया है वह Magento स्टोर के साथ होना असंभव है। मुझे लगता है कि आप चाहते थे कि इसे बाधित किया जाए, लेकिन ऐसा करने में इसका जवाब देना असंभव हो गया है।

जब तक आप किसी अन्य वेबसाइट को वेब-स्क्रैप नहीं कर रहे हैं, तब तक मैं इमेज पथ को डी-कंस्ट्रक्ट करने के किसी भी कारण के बारे में नहीं सोच सकता, अन्यथा, आपके पास उत्पाद मॉडल तक सीधी पहुंच होगी और यह जानकारी सीधे प्राप्त कर सकता है।

फिर भी, एक वास्तविक उदाहरण का उपयोग करते हुए। उदाहरण के लिए

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

कैश छवि पथ का निर्माण करना

/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

मूल छवि का पता लगाना

यदि Magento के व्यवस्थापक के माध्यम से अपलोड किया जाता है , तो मूल छवि यहां स्थित है,

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

इसलिए मूल URL प्राप्त करना बहुत आसान है, बस कैश निर्देशिका पथ और हैश को हटा दें।

अर्थात। हटानाcache/1/image/9df78eab33525d08d6e5fb8d27136e95/

इसलिए

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

हो जाता है

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

यदि डेटाफ़्लो / आयात के माध्यम से अपलोड किया जाता है , तो मूल छवि स्थित होती है

/ मीडिया / आयात

लेकिन इससे परे अनुमान होगा। हालाँकि, लोग अपने अपलोड डीआईआर को आयात करने के लिए प्रारूपित करना चाहते हैं, यह वास्तव में उनके ऊपर है और उपनिर्देशिकाएं वास्तव में प्रासंगिक नहीं हैं - क्योंकि वे अपलोड करते समय छवि के सापेक्ष पथ प्रदान करते हैं।

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,

यदि वॉटरमार्क हो तो वैकल्पिक आर्गन्स

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

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

उदाहरण के लिए, चूक के साथ

md5('non_no_no_not_ffffff_0_90')

md5हैश पूरी साइट में एक ही हो सकता है - हर छवि के लिए, लेकिन आप इसे उत्पन्न करने के लिए प्रयोग किया जाता है मानों यह पता लगाने की आवश्यकता होगी। आप इसे अपेक्षाकृत आसानी से बल दे सकते हैं।

यह हैश के लिए डिफ़ॉल्ट Magento मान है

9df78eab33525d08d6e5fb8d27136e95

विशेषताएं: sonassi.com


3
निश्चित रूप से आपके पास
असीसी

6
LOL - मैं ASCII कला पर टिप्पणी करने के लिए किसी का इंतजार कर रहा था :) यह इस लायक बनाता है कि इसे खींचने / टाइप करने में 10 मिनट का समय लगे! स्पष्ट रूप से हम अनौपचारिक रूप से Magento-1 प्रलेखन उत्तर को उत्तर द्वारा पोस्ट कर रहे हैं।
बेन लेसानी - सोनासी

1
सोनासी, मुझे नहीं पता, आपका समय कहां से आता है, लेकिन आप समुदाय और हम सभी के लिए एक बड़ी जीत हैं!
फेबियन ब्लेसश्मिड

यह मेरे लिए बहुत उपयोगी था, और मेरे द्वारा पढ़े गए सबसे अच्छे उत्तरों में से एक। धन्यवाद!
लेकोडुर

8

संक्षिप्त उत्तर - नहीं। कैश छवि url के आधार पर आधार छवि को वापस करने के लिए कोई विधि नहीं है। हालाँकि, यदि आप कैश फ़ोल्डर और हैश को हटाते हैं, तो आपको यह पता लगाने में सक्षम होना चाहिए कि URL क्या होगा, जैसे:

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

उत्पाद के बाद सब कुछ निकालें जब तक उपसर्ग trie (इस मामले में, निकालें cache/1/image/109x298/9df78eab33525d08d6e5fb8d27136e95/:

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

शायद इससे निपटने का एक बेहतर तरीका है, हालांकि, ऑब्जेक्ट मॉडल का उपयोग करना है:

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

5

यह काम

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

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

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

यह शायद सबसे अच्छा तरीका नहीं है, लेकिन ठीक काम करता है। नीचे क्यों?
Fra

क्या यह असंगत परिणाम नहीं देगा यदि फ़ाइल नाम में छवि आयाम हैं, क्योंकि यह अनुक्रमणिका को ऑफसेट करेगा?
Eric Seastrand

4

इस में list.phtml, यह मेरे लिए काम किया है:

echo Mage::getModel('catalog/product_media_config')->getMediaUrl( $_product->getSmallImage()); 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.