msProducts - не подключается превьюшка
Уже на нескольких сайтах заметил одну и ту же проблему с подставлением правильных превьюшек после перетаскивания порядка фоток в админке.
Создаёшь новый товар, грузишь фотку — всё круто, msProducts выводит подключённые превьюшки заданных размеров, которые указаны в источнике файлов.
Но как только изменишь изображение товара, например удалишь старые и зальёшь новые, или даже просто поменяешь порядок изображений, то новая превьюшка не подтягивается!
Новые превьюшки на сервере успешно создаются. Просто не подставляются в плейсхолдер, не джойнятся.
Примерный вызов msProducts:
Раньше вроде бы таких проблем не было.
Заметил похожие глюки и у галереи ms2Gallery отдельно от минишопа.
Почему такое происходит? Как исправить?
=============== РЕШЕНИЕ =================>
Короче, пришлось писать костыльное решение:
Сниппет-модификатор get_thumb:
а в чанке этот модификатор вытаскивает путь к нужной превьюшке:
Жаль что miniShop ищет превьюшку с нулевым ранком, логичнее было бы чтобы он искал с наименьшим…
Создаёшь новый товар, грузишь фотку — всё круто, msProducts выводит подключённые превьюшки заданных размеров, которые указаны в источнике файлов.
Но как только изменишь изображение товара, например удалишь старые и зальёшь новые, или даже просто поменяешь порядок изображений, то новая превьюшка не подтягивается!
Новые превьюшки на сервере успешно создаются. Просто не подставляются в плейсхолдер, не джойнятся.
Примерный вызов msProducts:
{'!msProducts'|snippet:[
'includeThumbs' => '290x215',
'tpl' => 'tpl.card',
]}
В чанке же плейсхолдер [[+290x215]] не подтягивается для обновлённых товаров — пустой плейсхолдер!Раньше вроде бы таких проблем не было.
Заметил похожие глюки и у галереи ms2Gallery отдельно от минишопа.
Почему такое происходит? Как исправить?
=============== РЕШЕНИЕ =================>
Короче, пришлось писать костыльное решение:
Сниппет-модификатор get_thumb:
<?php
$output = ' ';
$q = $modx->prepare("SELECT url FROM ".$modx->config['table_prefix']."ms2_product_files WHERE product_id = '{$input}' AND path LIKE '%/{$options}/%' ORDER BY rank ASC LIMIT 1");
$q->execute();
$r = $q->fetchAll(PDO::FETCH_ASSOC);
if(count($r)) {$output = $r[0]['url'];}
return $output;
а в чанке этот модификатор вытаскивает путь к нужной превьюшке:
{set $preview = $id|get_thumb:'290x215'|replace:' ':''}
{if $preview}
<img src="{$preview}"/>
{else}
<img src="/assets/images/blank.gif"/>
{/if}
Жаль что miniShop ищет превьюшку с нулевым ранком, логичнее было бы чтобы он искал с наименьшим…
Поблагодарить автора
Отправить деньги
Комментарии: 16
У ms2Gallery тоже проскальзывают такие глюки.
Насколько я понимаю, в обоих случаях превьюшки джойнятся по
Но у изменённых товаров нету фоток с [rank] => 0!
Проверил в таблице modx_ms2_product_files — у всех есть, а у изменённых товаров нету файлов с [rank] => 0.
Такая же история и с ms2Gallery при подключении превьюшки к вызову pdoResources например — у проблемных не подтягивается картинка с [rank] => 0:
Насколько я понимаю, в обоих случаях превьюшки джойнятся по
[rank] => 0
то есть только главная превьюшка.Но у изменённых товаров нету фоток с [rank] => 0!
Проверил в таблице modx_ms2_product_files — у всех есть, а у изменённых товаров нету файлов с [rank] => 0.
Такая же история и с ms2Gallery при подключении превьюшки к вызову pdoResources например — у проблемных не подтягивается картинка с [rank] => 0:
'loadModels' => 'ms2gallery',
'leftJoin' => '{
"245x185": { "class":"msResourceFile","alias":"245x185", "on": "245x185.resource_id = Ticket.id AND 245x185.path LIKE \'%/245x185/\' AND 245x185.rank=0" }
}',
'select' => '{
"Ticket":"*"
,"245x185":"245x185.url as 245x185"
}',
Где проблема зарыта? Почему неправильно выставляется rank?
Тоже в Minishop2 столкнулся с такой проблемой, пока нет нормального решения сделал так
{set $path = '/assets/images/products/'~$id~'/120x90/'}
{set $preview = $_pls['thumb'] | replace : $path : ''}
<img src="/assets/images/products/{$id}/175x175/{$preview}" alt="" title=""/>
Ух ты, круто!
Спасибо за костыль!
Спасибо за костыль!
При таком подходе решаются описанные проблемы, и даже подключать отдельную превьюшку параметром в вызове сниппета не нужно.
Спасибо ещё раз!
Спасибо ещё раз!
Ну да, но все же хочется что бы правильно работало.
Тут в последнем обновлении minishop2 есть пункт
— Fixed bug with incorrect rank of thumbnails after a sorting.
Наверное это решение проблемы, надо обновиться.
Тут в последнем обновлении minishop2 есть пункт
— Fixed bug with incorrect rank of thumbnails after a sorting.
Наверное это решение проблемы, надо обновиться.
Обновился — стало ещё хуже! Теперь при сортировке затирается и thumb товара! Откуда теперь его брать для предыдущего костыля?
То есть в галерее 3 фотки, а в превью товара пусто — заглушка стоит…
Нет, глюк определённо остался!
То есть в галерее 3 фотки, а в превью товара пусто — заглушка стоит…
Нет, глюк определённо остался!
Оно работает, только если удалить все фотки у товара и загрузить заново. Т.е. баг вроде исправили, только что теперь все товары редактировать что-ли.
Насколько я помню, можно просто подвигать картинки, чтобы сработал save и всё пересохранилось.
Вот только что проверил, если подвигать или обновить превью, то ничего не меняется, а если удалить и загрузить картинку (возможно просто загрузить еще одну), то все норм, плейсхолдер появляется.
Ну ок.
Ты всегда можешь предложить своё более классное исправление в репозитории дополнения.
Ты всегда можешь предложить своё более классное исправление в репозитории дополнения.
Сможешь пальцем показать, как именно исправление повлияло на thumb товара?
Там исключительно замена rank превьюшек на родительский.
Там исключительно замена rank превьюшек на родительский.
Не знаю, я по наблюдениям только сужу…
Но баг с thumb-ом товара был и в прошлой версии точно — пару недель назад я тоже сталкивался с этим на другом сайте.
То есть иногда если перетаскивать картинки, thumb очищается, а не подставляется первая картинка.
Сложно отловить этот баг и сложно выявить закономерность. Например иногда, как писал Андрей выше, помогает удаление всех фоток товара и загрузка их заново, но иногда это не помогает, а помогает простая перегенерация первой превьюшки (что в других случаях тоже не всегда помогает).
Вот попробовал записать что получается у меня:
Я попробую ещё понаблюдать, может будет ещё что отписать.
Но баг с thumb-ом товара был и в прошлой версии точно — пару недель назад я тоже сталкивался с этим на другом сайте.
То есть иногда если перетаскивать картинки, thumb очищается, а не подставляется первая картинка.
Сложно отловить этот баг и сложно выявить закономерность. Например иногда, как писал Андрей выше, помогает удаление всех фоток товара и загрузка их заново, но иногда это не помогает, а помогает простая перегенерация первой превьюшки (что в других случаях тоже не всегда помогает).
Вот попробовал записать что получается у меня:
Я попробую ещё понаблюдать, может будет ещё что отписать.
Мой клиент, по ходу, не врал. А то у меня все работает, а у него примерно такие же симптомы.
Видимо, придется разбираться что к чему.
Видимо, придется разбираться что к чему.
Накостылял себе отдельное решение, т.к. у меня thumb не подгружается (обнуляется) после обновления.
Решение в статье.
Жаль только что miniShop ищет превьюшку с нулевым ранком, а не с наименьшим… Из-за этого у меня в админке изменённые товары загруженными фотографиями остались без превьюшек, а это очень неудобно…
Решение в статье.
Жаль только что miniShop ищет превьюшку с нулевым ранком, а не с наименьшим… Из-за этого у меня в админке изменённые товары загруженными фотографиями остались без превьюшек, а это очень неудобно…
Решение рабочее, но было бы удобнее выбирать превьюшку по наименьшему ранку сразу вместе с выборкой ресурсов, а не вызывать отдельно в каждом чанке сниппет, который будет это делать…
Интересно, а можно ли как-то джойнить превьюшку по наименьшему ранку не зная его?
Например вот это можно ли переделать:
Интересно, а можно ли как-то джойнить превьюшку по наименьшему ранку не зная его?
Например вот это можно ли переделать:
'loadModels' => 'ms2gallery',
'leftJoin' => '{
"245x185": { "class":"msResourceFile","alias":"245x185", "on": "245x185.resource_id = Ticket.id AND 245x185.path LIKE \'%/245x185/\' AND 245x185.rank=0" }
}',
'select' => '{
"Ticket":"*"
,"245x185":"245x185.url as 245x185"
}',
Нужно ппоэкспериментировать с функцией min. Если получится, отпишу сюда.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.