Принадлежность двум категориям (msProducts)
Доброго времени суток!
Есть следующие категории:
Категория 1 (1)
Категория 2 (2)
Категория 3 (3)
— Подкатегория 3.1 (4)
— Подкатегория 3.2 (5)
Для товаров в Подкатегория 3.1 я поставил галочку в дереве, что они еще принадлежат и Категории 1.
Задача в следующем: нужно вывести все товары из Категория 3, которые, также, принадлежат Категория 1 (товары из Категория 1 выводить не нужно).
Делаю следующим образом:
Пробовал выставить так:
Единственное, что сейчас приходит в голову это писать свой сниппет, которому передавать результат этого вызова:
Может можно как-то отфильтровать для моего случая без своего сниппета, а только используя msProducts либо другим способом?
Есть следующие категории:
Категория 1 (1)
Категория 2 (2)
Категория 3 (3)
— Подкатегория 3.1 (4)
— Подкатегория 3.2 (5)
Для товаров в Подкатегория 3.1 я поставил галочку в дереве, что они еще принадлежат и Категории 1.
Задача в следующем: нужно вывести все товары из Категория 3, которые, также, принадлежат Категория 1 (товары из Категория 1 выводить не нужно).
Делаю следующим образом:
[[!msProducts? &tpl=`tpl.row` &parents=`3`]]
Этот вызов выведет все товары из Категория 3, даже те, которые не принадлежат еще и Категория 1.Пробовал выставить так:
[[!msProducts? &tpl=`tpl.row` &parents=`3` &where=`{"parent:=":"1"}`]]
— выводятся только товары из Категория 1.[[!msProducts? &tpl=`tpl.row` &parents=`3` &where=`{"parent:IN(1)"}`]]
— снова выводятся все товары из Категория 3.Единственное, что сейчас приходит в голову это писать свой сниппет, которому передавать результат этого вызова:
[[!msProducts? &tpl=`tpl.row` &parents=`1`]]
В своем сниппете получать id всех подкатегорий Категория 3, и если parent элемента равен одному из id полученных подкатегорий, то выводить этот товар.Может можно как-то отфильтровать для моего случая без своего сниппета, а только используя msProducts либо другим способом?
Комментарии: 10
Смотрите базу данных и как в нём хранятся родители и принадлежность категориям у товаров. parent — стандартный столбец прямого единственного родителя в modx и имеет тип integer (если мне память не изменяет), то есть одно целое число. А вы пишите parent=3 и тут же parent=1. Добавьте showLog=`1` при вызове сниппета и посмотрите какой запрос в итоге получается. А вот дополнительные категории не знаю точно где хранятся, в этом не разбирался, но возможно в таблице modx_ms2_products.
это я посмотрел. основные категории берутся из таблицы modx_site_content столбца parent. дополнительные категории берутся из таблицы modx_ms2_product_categories, следовательно, если делать:
не совсем понятно, как используя только msProducts можно выбрать товары из Категория 3, а потом эту выборку отфильтровать так, чтобы остались товары, которые еще принадлежат и Категория 1.
[[!msProducts? &tpl=`tpl.row` &parents=`1`]]
то добавится:OR:msProduct.id:IN(53,57,58,59,60,61)
это id товаров, которые присутствуют в modx_ms2_product_categories.не совсем понятно, как используя только msProducts можно выбрать товары из Категория 3, а потом эту выборку отфильтровать так, чтобы остались товары, которые еще принадлежат и Категория 1.
А вот «костыль» modx.com/extras/package/taxonomies, который позволяет связать любой ресурс с несколькими категориями создаваемые этим костылем. Как вариант.
все уже связано. вы видимо не вникли в суть моего вопроса.
Если эта таблица не подключается по умолчанию, то используйте параметр join вроде называется при вызове сниппета для подключения таблицы с дополнительными категориям, затем в where указываете правильное условие. Сейчас не за компьютером, не могу посмотреть как там точно.
не могу сообразить, как правильно использовать leftJoin и select в msProducts. написал следующее:
[[!msProducts? &tpl=`tpl.main.page.content.goods.row`
&parents=`3`
&leftJoin=`{
"modx_ms2_product_categories":"*"
}`
&select=`{"modx_ms2_product_categories":"modx_ms2_product_categories.product_id as cpid, modx_ms2_product_categories.category_id as ccid"}`
&limit=`50`
&showLog=`1`]]
и получаю такую ошибку:Could not process query, error #1054: Unknown column 'modx_ms2_product_categories.product_id' in 'field list'
Как-то так:
[[!msProducts?
&tpl=`tpl.main.page.content.goods.row`
&parents=`3`
&innerJoin=`{
"msCategoryMember": {
"class": "msCategoryMember",
"on": "msCategoryMember.product_id = msProduct.id AND msCategoryMember.category_id = 1"
}
}`
&limit=`50`
&showLog=`1`
]]
спасибо большое :)
а почему таблицу modx_ms2_product_categories называть в msProducts, как msCategoryMember?
подскажите, пожалуйста, где можно почитать про данные тонкости, чтобы потом самому составлять подобные выборки?
а почему таблицу modx_ms2_product_categories называть в msProducts, как msCategoryMember?
подскажите, пожалуйста, где можно почитать про данные тонкости, чтобы потом самому составлять подобные выборки?
Спасибо, Василий :)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.