รับไฟล์ภาพต้นฉบับจาก 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

หากอัปโหลดผ่าน dataflow / importภาพต้นฉบับจะอยู่ที่

/ สื่อ / นำเข้า

แต่นอกเหนือจากนั้นจะมีการคาดเดา อย่างไรก็ตามคนที่ต้องการจัดรูปแบบการอัปโหลด DIR เพื่อนำเข้านั้นขึ้นอยู่กับพวกเขาและไดเรกทอรีย่อยที่เป็นรูปภาพนั้นไม่เกี่ยวข้องกันเพราะพวกเขาให้เส้นทางสัมพัทธ์กับภาพเมื่อทำการอัพโหลด

เล็กน้อยเกี่ยวกับ 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,

เป็นตัวเลือกถ้ามีลายน้ำ

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

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

ตัวอย่างเช่นด้วยค่าเริ่มต้น

md5('non_no_no_not_ffffff_0_90')

md5กัญชาอาจจะเป็นแบบเดียวกันทั่วทั้งเว็บไซต์ - สำหรับทุกภาพ แต่คุณจะต้องคิดออกค่าใช้ในการสร้างมัน คุณสามารถเดรัจฉานได้อย่างง่ายดาย

นี่เป็นค่าวีโอไอพีเริ่มต้นสำหรับแฮช

9df78eab33525d08d6e5fb8d27136e95

คุณสมบัติ: sonassi.com


3
แน่นอนคุณมีคำตอบที่ครบถ้วนสมบูรณ์อย่างไม่น่าเชื่อกับงานศิลปะ ASCII ... :)
philwinkle

6
ฮ่า ๆ - ฉันกำลังรอให้ใครบางคนแสดงความคิดเห็นเกี่ยวกับศิลปะ ASCII :) ทำให้คุ้มค่าที่จะต้องใช้เวลา 10 นาทีในการวาด / พิมพ์! เห็นได้ชัดว่าเราโพสต์คำตอบเอกสารวีโอไอพีอย่างไม่เป็นทางการโดยตอบ
Ben Lessani - Sonassi

1
Sonassi ฉันไม่มีความคิดเวลาของคุณมาจากไหน แต่คุณเป็นผู้ชนะที่ยิ่งใหญ่สำหรับชุมชนและพวกเราทุกคน!
Fabian Blechschmidt

นั่นมีประโยชน์มากสำหรับฉันและเป็นหนึ่งในคำตอบที่ดีที่สุดที่ฉันเคยอ่าน ขอบคุณ!
LeCodeur

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);

มันอาจไม่ใช่วิธีที่ดีที่สุด แต่ใช้ได้ดี ทำไม downvote
รา

สิ่งนี้จะให้ผลลัพธ์ที่ไม่สอดคล้องกันหรือไม่หากมีขนาดภาพในชื่อไฟล์เนื่องจากสิ่งนี้จะชดเชยดัชนีหรือไม่
Eric Seastrand

4

ในlist.phtmlนี่คือสิ่งที่ได้ผลสำหรับฉัน:

echo Mage::getModel('catalog/product_media_config')->getMediaUrl( $_product->getSmallImage()); 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.