Получить исходный файл изображения из URL-адреса кэша
Существует ли какая-либо функция, которая при наличии файла продукта с изображением кэша возвращает исходный файл?
Пример:
=> URL-адрес кэша:
{BASEURL}/media/catalog/product/cache/2/image/9df78eab33525d08d6e5fb8d27136e95/a/l/IMAGE.jpg
=> Желаемый результат:
BASEURL/media/catalog/product/a/l/IMAGE.jpg
4 answers
Указанный вами 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, исходное изображение находится по адресу
Таким образом, получить исходный 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
Короткий ответ - нет. Нет способа вернуть базовое изображение на основе URL-адреса изображения кэша. Однако, если вы удалите папку кэша и хэш, вы сможете интуитивно понять, каким будет URL-адрес, например:
http://www.mysite.com/media/catalog/product/cache/1/image/109x298/9df78eab33525d08d6e5fb8d27136e95/u/t/uti001_2.jpg
Удалите все после продукта, пока не появится префикс (в этом случае удалите 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();
Это работает
$r = explode('/' ,$imagesCachePath);
unset($r[6]);
unset($r[7]);
unset($r[8]);
unset($r[9]);
$r = implode('/',$r);
В list.phtml
это то, что сработало для меня:
echo Mage::getModel('catalog/product_media_config')->getMediaUrl( $_product->getSmallImage());