В этой таблице есть поле, которое совершенно не нужно и нигде не используется. Это поле original_filename
Оно, по идее, нужно чтобы восстанавливать эскизы из файла оригинала. Однако в thumb.php мы видим вот такой фрагмент кода:
$image_pattern = '#^((?:\d{2}/){2}([0-9]+)/(?:reviews/[0-9]+/)?images/)([0-9]+)/([a-zA-Z0-9_\.-]+)\.(\d+(?:x\d+)?)(@2x)?\.([a-z]{3,4})$#i';
// /wa-data/public/shop/products/69/42/14269/video/96x96.jpg
$video_pattern = '#^((?:\d{2}/){2}([0-9]+)/video)/(\d+(?:x\d+)?)(@2x)?\.([a-z]{3,4})$#i';
if (preg_match($image_pattern, $request_file, $matches)) {
if ($matches[3] === $matches[4]) {
$n = $matches[3];
} else {
$n = $matches[3].'.'.$matches[4];
}
$file = $matches[1].$n.'.'.$matches[7];
.........................
$original_path = $protected_path.$file;
То есть скрипт ищет файл с именем, которое генерируется из поля filename, а original_filename полностью игнорируется. Предлагаю удалить это поле либо задействовать, чтобы оно таки использовалось и несло какой-то смысл.
12 комментариев
Вдогонку смотрим класс shopImage и смотрим
На этот метод ссылаются все внутренние механизмы шопскрипта типа восстановления эскизов из оригиналов. То есть, если мы хотим чтобы правильно восстанавливались картинки, то в поле filename обязательно нужно записать строку "original" и ничего другого. Можно вписать другое, оно будет работать, но все методы, использующие shopImage::getOriginalPath дадут сбой.
Я раньше все время удивлялся почему, если используется плагин синхронизации для создания товаров, то эскизы на таких товарах не восстанавливаются из оригинала. Вот вам и ответ.
Вы считаете, что из-за наличия в таблице неиспользуемого поля неправильно работает какой-то конкретный плагин? Какой именно плагин? Какой последовательностью действий можно продемонстрировать ошибку в работе плагина?
Я считаю, что у вас бардак в коде в этом месте, и нужно как-то его привести в порядок. Плагины закостыливают этот момент, пишут в эти поля что попало, но, т.к. оно не работает, то особой разницы нет и вреда не наносит. Но было бы полезно, если бы правильно использовалось поле original_filename и была бы возможность восстанавливать изображения из оригиналов и правильная генерация эскизов налету. Сейчас или одно или другое. Просто попробуйте сами разобраться откуда берется путь к оригиналу фотки в thumb.php и откуда в других местах где используется метод getOriginalPath. Сразу поймете что там что-то не правильно сделано.
Исправлять код только ради того, чтобы он стал выглядеть логичным, мы вряд ли сможем, потому что непонятно, ради чего это нужно делать, если это не улучшит работу пользователей.
Если вам это изменение нужно для решения какой-то конкретной задачи, постарайтесь описать эту задачу как можно более конкретно.
Какими действиями можно продемонстрировать это ограничение?
вот это попробуйте сделать и эскизы не будут создаваться у изображения. хотя, с точки зрения кода, тут все верно. последний кусок кода взят из контроллера, который создает товары.
Код выполнил (с небольшими модификациями, чтобы не было ошибок из-за несуществующих переменных или объектов). Эскизы изображения товара создаются.
Похоже, что я делаю что-то не так, как вы себе это представляете. Возможно, это из-за недостаточно точного или последовательного описания.
Попробуйте описать проблему ещё раз по такому плану:
какая строка была в filename?
$original_file точно так же вызывался как у меня в коде?
Вот весь код, который я выполнил:
а можно узнать какой файл и по какому пути прилетел оригинал картинки в итоге?
просто может у нас как-то по разному все работает...
Давайте сделаем так (как обычно): точно и подробно опишите проблему по описанному выше плану. Пришлите пример кода, который вы выполняете. Пример файла, с которым пытаетесь работать. Обоснуйте, почему вы считаете текущее поведение ошибкой, вызванной в коде программных продуктов Webasyst.
Мы изучим эту информацию, попробуем повторить ваши действия, постараемся получить тот же результат и либо расскажем, что не так в вашем коде, либо примем сообщение об ошибке в работу.
Честно говоря, я не понял почему у вас сработал пример выше. Может быть потому что у меня чистый апач без nginx. Попробую разобраться.
и не лень тебе?
у него в настройках отключена опция image_filename, либо поле filename заполнено
поле используется, правда в основном в качестве читабельной метки. кроме того ты упускаешь из вида плагины которые могут использовать данное поле - подобные изменения мог могут привести к проблемам обратной совместимости