Nhận tệp hình ảnh gốc từ một URL bộ đệm


33

Có chức năng nào cung cấp một tệp sản phẩm hình ảnh bộ nhớ cache trả về bản gốc không?

Thí dụ :

=> URL bộ nhớ cache:

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

=> Kết quả mong muốn:

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

Câu trả lời:


74

Không thể có URL hình ảnh mà bạn đã cung cấp với cửa hàng Magento. Tôi đoán bạn muốn nó bị xáo trộn, nhưng làm như vậy đã khiến nó không thể trả lời.

Tôi không thể nghĩ ra bất kỳ lý do nào để hủy cấu trúc đường dẫn hình ảnh trừ khi bạn đang lướt web một trang web khác, nếu không, bạn sẽ có quyền truy cập trực tiếp vào mô hình sản phẩm và có thể lấy thông tin này trực tiếp.

Tuy nhiên, bằng cách sử dụng một ví dụ thực tế. Ví dụ

/ media

Không xây dựng đường dẫn hình ảnh bộ đệm

/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

Định vị ảnh gốc

Nếu được tải lên thông qua quản trị viên Magento , hình ảnh gốc được đặt tại,

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

Vì vậy, nhận được URL ban đầu là khá dễ dàng, chỉ cần loại bỏ đường dẫn thư mục bộ đệm và băm.

I E. Tẩycache/1/image/9df78eab33525d08d6e5fb8d27136e95/

Vì thế

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

Trở thành

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

Nếu được tải lên qua dataflow / import , ảnh gốc nằm ở

/ phương tiện / nhập khẩu

Nhưng ngoài đó sẽ có phỏng đoán. Tuy nhiên, mọi người muốn định dạng tải lên TRỰC TIẾP của họ để nhập thực sự tùy thuộc vào họ và thư mục con hình ảnh thực sự không liên quan - vì chúng cung cấp đường dẫn tương đối đến hình ảnh khi tải lên.

Một chút về 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,

Tùy chọn args nếu có hình mờ

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

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

Vì vậy, ví dụ, với các mặc định

md5('non_no_no_not_ffffff_0_90')

Hàm md5băm có thể giống nhau trên toàn bộ trang web - đối với mọi hình ảnh, nhưng bạn sẽ cần phải tìm ra các giá trị được sử dụng để tạo ra nó. Bạn có thể vũ phu nó tương đối dễ dàng.

Đây là giá trị Magento mặc định cho hàm băm

9df78eab33525d08d6e5fb8d27136e95

Các bản phân phối: sonassi.com


3
Tất nhiên bạn có một câu trả lời cực kỳ
thấu

6
LOL - Tôi đã chờ đợi ai đó nhận xét về nghệ thuật ASCII :) Làm cho nó đáng giá khi phải mất 10 phút để vẽ / gõ! Rõ ràng chúng tôi không chính thức đăng câu trả lời tài liệu Magento-1 bằng cách trả lời.
Ben Lessani - Sonassi

1
Sonassi, tôi không biết, thời gian của bạn đến từ đâu, nhưng bạn là một chiến thắng lớn cho cộng đồng và tất cả chúng ta!
Fabian Blechschmidt

Điều đó rất hữu ích với tôi, và là một trong những câu trả lời hay nhất tôi từng đọc. Cảm ơn!
LeCodeur

8

Câu trả lời ngắn - không. Không có phương pháp để trả về hình ảnh cơ sở dựa trên url hình ảnh bộ đệm. Tuy nhiên, nếu bạn xóa thư mục bộ đệm và hàm băm, bạn sẽ có thể xác định được URL sẽ là gì, ví dụ:

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

xóa mọi thứ sau sản phẩm cho đến khi tiền tố trie (trong trường hợp này, xóa cache/1/image/109x298/9df78eab33525d08d6e5fb8d27136e95/:

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

Tuy nhiên, có lẽ cách tốt hơn để xử lý vấn đề này là sử dụng mô hình đối tượng:

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

5

Những công việc này

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

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

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

nó có thể không phải là cách tiếp cận tốt nhất nhưng hoạt động tốt Tại sao downvote?
Fra

Điều này sẽ không tạo ra kết quả không nhất quán nếu có kích thước hình ảnh trong tên tệp, vì điều này sẽ bù cho các chỉ mục?
Eric Seastrand

4

Trong đó list.phtml, đây là những gì làm việc cho tôi:

echo Mage::getModel('catalog/product_media_config')->getMediaUrl( $_product->getSmallImage()); 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.