commeta / modxWebpConverter

Convert files to WEBP format into Modx Admin Panel
20 stars 8 forks source link

Почему-то конвертирует не все изображения на странице + еще один моментик #11

Open NDruce opened 1 year ago

NDruce commented 1 year ago

На сайте почему-то не все изображения переконвертированы, хотя все изображения переконвертированы и присутствуют в файловой системе (/webp/*/*/*.webp). Посмотрите пожалуйста HTML-код сайта. В чем может быть проблема? Спасибо.

И еще некоторые изображения на сайте меняются (заменяются другими), но при этом их названия надо оставить. Для того, чтобы у посетителей сайта они обновлялись в браузерах (в обход уже закэшированых браузерами старых версий), к URL-ам изображений добавляется на конце ?[version], например /assets/images/img.jpg?1. Надо, чтобы плагин умел и их обрабатывать. Для этого надо при получении ссылок на странице (из src="..." и url(...)) делать $img_real = explode('?', $img_real)[0];

commeta commented 1 year ago

На сайте почему-то не все изображения переконвертированы

С виду всё в порядке, я так понял что у вас используются модули подмены изображений, в этом месте не может конфликтовать?

Тут 2 варианта: либо регулярка спотыкается либо файла нет в момент подмены, давайте разбираться

commeta commented 1 year ago

ошибка в пути noindex != no_index

/assets/images/_glemping/noindex/intro/intro.jpg

commeta commented 1 year ago

URL-ам изображений добавляется на конце ?[version]

можно добавить в начале функции check_image_file_for_webp_converter $img_real = explode('?', $img_real)[0];

NDruce commented 1 year ago

Тут 2 варианта: либо регулярка спотыкается либо файла нет в момент подмены, давайте разбираться

Сделал отладку, все файлы PHP находит:

image

Значит не справляется регулярка. Понял, в чем дело:

image

Нужно еще обрабатывать атрибуты href="*.(jpg|jpeg|png)" и любой src="*.(jpg|jpeg|png)" вне img, даже если это скажем data-src.

Главное, чтобы любой атрибут имел .(jpg|jpeg|png). Тогда меняем его на +.webp

NDruce commented 1 year ago

Но href надо сперва проверять на то, не внешняя ли это ссылка, а только внутренние ссылки на сайте, при том с доменом или без

commeta commented 1 year ago
  1. битый https://glamping42.ru/assets/images/_glemping/noindex/intro/intro.jpg

  2. data-src он и так умеет modx_plugin_webp_converter.php строка 162

commeta commented 1 year ago
можно добавить такую конструкцию на 180 строке: (на скорую руку, не проверял)
    preg_match_all('/<a[^>]+>/i', $output, $result);
    if(count($result)){ // Search images in a href tag
        foreach($result[0] as $img_tag) {
            $img_tag= str_replace("'", '"', $img_tag); // src
            preg_match('/(href)=("[^"]*")/i', $img_tag, $img[$img_tag]);                        
            $img_real= str_replace('"', '', $img[$img_tag][2]);
            check_image_file_for_webp_converter($img_real, $webp_on_page);
        }
    }