msProducts - не подключается превьюшка

Уже на нескольких сайтах заметил одну и ту же проблему с подставлением правильных превьюшек после перетаскивания порядка фоток в админке.

Создаёшь новый товар, грузишь фотку — всё круто, 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 ищет превьюшку с нулевым ранком, логичнее было бы чтобы он искал с наименьшим…
Василий Столейков
29 декабря 2016, 17:32
modx.pro
3
2 976
0
Поблагодарить автора Отправить деньги

Комментарии: 16

Василий Столейков
29 декабря 2016, 20:43
1
0
У ms2Gallery тоже проскальзывают такие глюки.

Насколько я понимаю, в обоих случаях превьюшки джойнятся по
[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?
    Андрей
    29 декабря 2016, 21:02
    1
    +1
    Тоже в Minishop2 столкнулся с такой проблемой, пока нет нормального решения сделал так

    {set $path = '/assets/images/products/'~$id~'/120x90/'}
    {set $preview = $_pls['thumb'] | replace : $path : ''}
    <img src="/assets/images/products/{$id}/175x175/{$preview}" alt="" title=""/>
      Василий Столейков
      29 декабря 2016, 21:03
      1
      0
      Ух ты, круто!
      Спасибо за костыль!
        Василий Столейков
        29 декабря 2016, 21:14
        1
        0
        При таком подходе решаются описанные проблемы, и даже подключать отдельную превьюшку параметром в вызове сниппета не нужно.
        Спасибо ещё раз!
          Андрей
          29 декабря 2016, 21:17
          0
          Ну да, но все же хочется что бы правильно работало.

          Тут в последнем обновлении minishop2 есть пункт
          — Fixed bug with incorrect rank of thumbnails after a sorting.

          Наверное это решение проблемы, надо обновиться.
            Василий Столейков
            29 декабря 2016, 21:26
            1
            0
            Обновился — стало ещё хуже! Теперь при сортировке затирается и thumb товара! Откуда теперь его брать для предыдущего костыля?
            То есть в галерее 3 фотки, а в превью товара пусто — заглушка стоит…
            Нет, глюк определённо остался!
              Андрей
              29 декабря 2016, 22:51
              0
              Оно работает, только если удалить все фотки у товара и загрузить заново. Т.е. баг вроде исправили, только что теперь все товары редактировать что-ли.
                Василий Наумкин
                29 декабря 2016, 22:54
                0
                Насколько я помню, можно просто подвигать картинки, чтобы сработал save и всё пересохранилось.
                  Андрей
                  29 декабря 2016, 22:59
                  0
                  Вот только что проверил, если подвигать или обновить превью, то ничего не меняется, а если удалить и загрузить картинку (возможно просто загрузить еще одну), то все норм, плейсхолдер появляется.
                    Василий Наумкин
                    29 декабря 2016, 23:07
                    0
                    Ну ок.

                    Ты всегда можешь предложить своё более классное исправление в репозитории дополнения.
                Василий Наумкин
                29 декабря 2016, 22:52
                0
                Сможешь пальцем показать, как именно исправление повлияло на thumb товара?

                Там исключительно замена rank превьюшек на родительский.
                  Василий Столейков
                  29 декабря 2016, 23:50
                  1
                  0
                  Не знаю, я по наблюдениям только сужу…

                  Но баг с thumb-ом товара был и в прошлой версии точно — пару недель назад я тоже сталкивался с этим на другом сайте.
                  То есть иногда если перетаскивать картинки, thumb очищается, а не подставляется первая картинка.

                  Сложно отловить этот баг и сложно выявить закономерность. Например иногда, как писал Андрей выше, помогает удаление всех фоток товара и загрузка их заново, но иногда это не помогает, а помогает простая перегенерация первой превьюшки (что в других случаях тоже не всегда помогает).

                  Вот попробовал записать что получается у меня:


                  Я попробую ещё понаблюдать, может будет ещё что отписать.
                    Іван Клімчук
                    30 декабря 2016, 10:52
                    +1
                    Мой клиент, по ходу, не врал. А то у меня все работает, а у него примерно такие же симптомы.

                    Видимо, придется разбираться что к чему.
                Василий Столейков
                29 декабря 2016, 22:07
                1
                0
                Накостылял себе отдельное решение, т.к. у меня thumb не подгружается (обнуляется) после обновления.
                Решение в статье.

                Жаль только что miniShop ищет превьюшку с нулевым ранком, а не с наименьшим… Из-за этого у меня в админке изменённые товары загруженными фотографиями остались без превьюшек, а это очень неудобно…
            Василий Столейков
            29 декабря 2016, 22:17
            1
            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"
            }',
              Іван Клімчук
              30 декабря 2016, 10:53
              +1
              Нужно ппоэкспериментировать с функцией min. Если получится, отпишу сюда.
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              16