Привязка статей к товару minishop2

Есть интернет магазин на minishop2.
Есть статьи по товарам или околотематические. В самой статье я указываю «Сопутствующие товары» (ид через запятую) и показываю товары о которых идет речь в статье.
Все замечательно работает.
Теперь задача обратная — хочу показывать статьи в карточке товара или категории товара и статьи определять по полю «Сопутствующие товары» (ид через запятую) которые указаны в статье.

В карточке товара у меня есть его ИД. И есть список статей в которых есть поле relatedProducts.
Надо выбрать статьи в которых ИД товара присутствует в поле relatedProducts.

Как это сделать?
Pavel
24 июня 2022, 15:01
modx.pro
1
679
0

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

Артур Шевченко
24 июня 2022, 21:46
0
Попробуй так:
{'pdoResources' | snippet: [
'parents' => 0,
'includeTVs' => 'relatedProducts',
'where' => ['relatedProducts:LIKE' => '%'~$_modx->resource.id~'%']
]}
    Pavel
    27 июня 2022, 10:11
    0
    у меня внутри шаблона другое написание, я немного переделал
    Правильно сделал? В таком варианте такое ощущение что условие WHERE не работает
    [[pdoResources?
        &tpl=`asideNewsElement`
        &showHidden=`1`
        &includeTVs=`img,relatedProducts`
        &limit=`3`
        &parents=`62`
        &showLog=`1`
        &where=`{'relatedProducts:LIKE':'%[[*id]]%'}`
    ]]
    И как сделать чтоб ваш вариант у меня в шаблонах работал?
      Pavel
      27 июня 2022, 14:21
      0
      Вот рабочий вариант. Спасибо!
      [[pdoResources?
         &tpl=`asideNewsElement`
         &includeTVs=`img,relatedProducts`
         &limit=`3`
         &parents=`62`
         &where=`{"relatedProducts:LIKE": "%[[*id]]%"}`
      ]]
        Артур Шевченко
        27 июня 2022, 21:38
        0
        Для json нужны двойные кавычки.
        Максим
        28 июня 2022, 22:14
        0
        Ну а теперь давайте посмотрим на ситуацию, когда в условие придет цифра 1… Как думаете какая выборка придет?
        Использовать такую реализацию для связи многие ко многим достаточно ресурсозатратно. Но если уж не хотите или нет возможности переделать, то для корректного результата можно написать сниппет с использованием pdoFetch… Условия выборки оставляем такими же и получить массив результатов… Но потом средствами PHP отфильтровать выборку из БД сравнивая id ресурса с искомым id.
          Артур Шевченко
          28 июня 2022, 23:19
          0
          Так я и не говорю, что это отличное решение. Оптимальнее всего создать дополнительное поле у товара и при сохранении статьи, получать список связанных с ней товаров и в каждый дописывать id этой статьи, в потом просто вывести это значение в параметр resources. Т.е. в статье есть relatedProducts, а у товара сделать relatedArticles и значение последнего подставлять в параметр.
            Максим
            28 июня 2022, 23:32
            0
            И снова мимо… Посмотрите как реализованы дополнительные категории в miniShop2…
            А первоначально предложенное решение не то что «не отличное»… Оно просто не рабочее… Так как если в условие придет 1, то в выборку попадут id статей, в которых присутствует 1, то есть: 1, 10, 11, 12 и т.д.
              Артур Шевченко
              28 июня 2022, 23:38
              0
              Через отдельную таблицу они реализованы, но это самый сложный вариант. А что со вторым вариантом не так?
                Максим
                28 июня 2022, 23:54
                0
                Ну вы же сами начали описывать логику… Ну продолжите ее… Предположим, у нас к статье прикреплено 50 товаров (Ну такая вот статья, где много всего описывается)… И тогда получается, что плагин делает выборку из 50 товаров и для каждого товара получает значение TV… После этого превращает значение в массив, дописывает id статьи, уникализирует массив и сохраняет новое значение для TV… Я бы такое писал только в том случае, если бы хотел кому-то «поднасрать»…
                  Артур Шевченко
                  29 июня 2022, 00:03
                  +1
                  Думаю, что даже с 50 товарами не будет тормозить. Думаю, даже в отдалённом будущем 50 товаров к статье привязано не будет. И необязательно делать TV, можно расширить модель товара с помощью msAddFields. А в целом, согласен с Вами, лучше всего создать отдельную таблицу и связи записывать туда. Но в этом случае нужен отдельный сниппет для получения данных из этой таблицы, или сгенерировать модель и загрузить её в modx, чтобы с помощью pdoResources можно было выборку сделать.
                  Максим
                  28 июня 2022, 23:57
                  +1
                  И главное! Артур, вы молодец, что находите время помогать другим! У меня нет цели принизить ваши знания и достоинства.
                    Артур Шевченко
                    29 июня 2022, 00:04
                    0
                    А у меня нет цели вас переспорить. Я просто хочу понимать все нюансы предлагаемых мною решений)))
                Pavel
                29 июня 2022, 16:45
                0
                Да все верно, это будет самое правильное решение, но реализация данной схемы пришла в голову когда на сайте 500+ товаров и 500+ статей. К статьям товары привязаны, а делать привязку статей к товарам уже проблематично (если только не писать скрипт).
                С учетом того, что ИД товаров четырехзначные цифры решение вполне пригодное.
                Спасибо.
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            13