Данная проблема может возникнуть, например, при попытке клиента скачать pdf-файл с данными своего заказа, если тот уже находится в обработке. Самое интересное в этом, что администратор магазина скачать данный pdf может без проблем!
Как понятно из текста ошибки, проблема в обращении к изображению (чаще всего – товара). В интернете есть несколько способ решения данной проблемы (например, тут), которые действенны в общем случае. У Prestashop’a проблема чаще всего в другом, а именно – в пути к изображению, который генерируется в методе thumbnail класса ImageManager. Примечательно то, что для администратора магазина путь генерируется не так, как для посетителя – этим и объясняется возможность скачать pdf одним, и отсутствие возможности у другого:
1 2 3 4 |
if (Context::getContext()->controller->controller_type == 'admin') return '<img src="../img/tmp/'.$cache_image.($disable_cache ? '?time='.time() : '').'" alt="" class="imgm img-thumbnail" />'; else return '<img src="'._PS_TMP_IMG_.$cache_image.($disable_cache ? '?time='.time() : '').'" alt="" class="imgm img-thumbnail" />'; |
Данный метод вызывается для определения параметра image_tag, который и используется для вывода изображения в pdf:
1 2 3 |
{if Configuration::get('PS_PDF_IMG_INVOICE')} <td style="text-align: left;">{if isset($order_detail.image) && $order_detail.image->id}{$order_detail.image_tag}{/if}</td> {/if} |
Вызывается он в методе getContent класса HTMLTemplateInvoice:
1 |
$order_detail['image_tag'] = ImageManager::thumbnail(_PS_IMG_DIR_.'p/'.$order_detail['image']->getExistingImgPath().'.jpg', $name, 45, 'jpg', false); |
Таким образом, для администратора получается относительный путь:
../img/tmp/product_mini_2_7.jpg
, а для посетителя – абсолютный:
/img/tmp/product_mini_2_7.jpg
что и приводит к проблеме. Почему – не знаю :)
В версии 1.6.1.0 данную проблему исправили – изменили присваивание image_tag в методе getContent класса HTMLTemplateInvoice:
1 2 3 4 5 6 7 |
$path = _PS_PROD_IMG_DIR_.$order_detail['image']->getExistingImgPath().'.jpg'; $order_detail['image_tag'] = preg_replace( '/\.*'.preg_quote(__PS_BASE_URI__, '/').'/', _PS_ROOT_DIR_.DIRECTORY_SEPARATOR, ImageManager::thumbnail($path, $name, 45, 'jpg', false), 1 ); |
Это изменение позволило передавать полный путь до изображения и решило имеющуюся проблему. Соответственно, это решение подходит и для версии 1.6.0.14…
Надеюсь, данный материал кому-нибудь поможет решить проблему ошибки CPDF ERROR [Image] unable to get Image в CMS Prestashop.
Для отправки комментария вам необходимо авторизоваться.
Спасибо, помогло