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