OC v3.х Что не так с конвертацией изображений в webp на опенкарт3?

  • Автор темы Автор темы labirint
  • Дата начала Дата начала

labirint

Разрушитель (V)
Сообщения
129
Реакции
25
Баллы
89
Заменяю изображение без изменения названия, на хостинге или через админку, а фото не меняется (выводится старое изображение). Кэш в папках чистил. Стоит отметить что используется штатный модуль из шаблона для конвертации jpg в webp. По прямой ссылке jpg в браузере отображается корректно (новое изображение), а вот с webp беда, отображается старое фото. Думаю что код в шаблоне для преобразования jpg в webp, также использован в бесплатном модуле, или наоборот. Как заставить webp изменятся после замены jpg на сервере?
PHP:
<?xml version="1.0" encoding="UTF-8"?>
<modification>
<name>Unishop2 WebpImg</name>
<code>Unishop2 WebpImg</code>
<version>1.0</version>
<author>based on original idea - https://stick-design.ru</author>
    <file path="catalog/model/tool/image.php">
        <operation>
            <search><![CDATA[$image_new = str_replace]]></search>
            <add position="before"><![CDATA[
            $gd_info = gd_info();
        
            if($gd_info['WebP Support']) {
                $image_new_webp = 'cache/webp/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . (int)$width . 'x' . (int)$height . '.webp';
            
                if (is_file(DIR_IMAGE . $image_new) && (!is_file(DIR_IMAGE . $image_new_webp) || (filemtime(DIR_IMAGE . $image_new) > filemtime(DIR_IMAGE . $image_new_webp)))) {
                    $path = '';

                    $directories = explode('/', dirname($image_new_webp));

                    foreach ($directories as $directory) {
                        $path = $path . '/' . $directory;

                        if (!is_dir(DIR_IMAGE . $path)) {
                            @mkdir(DIR_IMAGE . $path, 0777);
                        }
                    }
            
                    $extension = strtolower($extension);
                    
                    if ($extension == 'gif') {
                        $img = imagecreatefromgif(DIR_IMAGE.$image_new);
                    } elseif ($extension == 'png') {
                        $img = imagecreatefrompng(DIR_IMAGE.$image_new);
                    } elseif ($extension == 'jpeg' || $extension == 'jpg') {
                        $img = imagecreatefromjpeg(DIR_IMAGE.$image_new);
                    } else {
                        $img = '';
                    }
                    
                    if($img) {
                        imagepalettetotruecolor($img);
                        imagewebp($img, DIR_IMAGE.$image_new_webp);
                        imagedestroy($img);
                    }
                }
            
                if(is_file(DIR_IMAGE . $image_new_webp)) {
                    if(stripos($this->request->server['REQUEST_URI'], 'admin') === false && isset($this->request->server['HTTP_ACCEPT']) && strpos($this->request->server['HTTP_ACCEPT'], 'image/webp') !== false) {
                        $image_new = $image_new_webp;
                    }
                }
            }
            ]]></add>
        </operation>
    </file>
</modification>
 
Причина оказалась в том, что сайт подключен к cloudflare, с кешированием. Почистил там кэш, теперь всё ок
 
У меня немного другая проблема, использую шаблон deluxe, и там видимо вшита конвертация в webp в самом шаблоне, возможность отключить - не нашёл. Нужно установить модуль для водяных знаков, но не работает, я так подозреваю он пытается наложить водяной знак при выводе на webp, и у него ничего не выходит = ноль эффекта
 
Назад
Верх