modx getresources tvfilters checkbox
Как можно сделать выборку по tv, если там массив значений, разделенный ||?
Вариант &tvFilters=`subcategory==%||[*id]||%` у меня не работает.
Есть ли выход из данной ситуации?
Вариант &tvFilters=`subcategory==%||[*id]||%` у меня не работает.
Есть ли выход из данной ситуации?
Комментарии: 8
А так?
&tvFilters=`subcategory==%[[*id]]%`
Павел, не совсем верно. К примеру если есть ID = 68 и оно удовлетворяет вашему примеру, а есть ID= 686, и оно удовлетвореяет вашему примеру, но по сути ошибочно
Решение:
Главное тут:
Чтобы заменить параметр ИЛИ (||) на другой воспользовался tvFiltersOrDelimiter
Решение:
[[!pdoResources?
&element=`getResources`
&elementClass=`modSnippet`
&parents=`53`
&includeTVs=`image,price,price-wsale,subcategory`
&processTVs=`1`
&tpl=`product-item`
&where=`{"template":4}`
&tvFilters=`subcategory==[[*id]]||%:subcategory==%||[[*id]]:subcategory==%||[[*id]]||%`
&tvFiltersOrDelimiter=`:`
]]
Вместо getresources я использовал pdoResources, но это сути не меняет. Главное тут:
&tvFilters=`subcategory==[[*id]]||%:subcategory==%||[[*id]]:subcategory==%||[[*id]]||%`
Т.е. у нас нужный ID может быть в начале строки, тогда subcategory==[[*id]]||%, либо в середине subcategory==%||[[*id]]||% и последнее в конце subcategory==%||[[*id]]||%Чтобы заменить параметр ИЛИ (||) на другой воспользовался tvFiltersOrDelimiter
Это понятно. Я сам обычно использую ## или ::
А что у Вас не работает-то? Если Вы используете || в качестве обёртки, то это должно фунциклировать:
Только вызов у Вас какой-то странный. Сделайте так:
А что у Вас не работает-то? Если Вы используете || в качестве обёртки, то это должно фунциклировать:
&tvFilters=`subcategory==%||[[*id]]||%`
Только вызов у Вас какой-то странный. Сделайте так:
[[pdoResources?
&parents=`53`
&includeTVs=`image,price,price-wsale,subcategory`
&tpl=`product-item`
&templates=`4`
&tvFilters=`subcategory==%||[[*id]]||%`
&tvFiltersOrDelimiter=`:`
]]
Да просто ранее pdoPage стоял. Я его обратно верну, поэтому все нормально)
И ваш вариант &tvFilters=`subcategory==%||[[*id]]||%` работать е будет, я выше написал почему
Если у Вас в TV subcategory у товара в базу пишется ||***||, то будет.
У одного товара это ||63||, у другого может быть ||636||,||363|| (если параметр множественный и соответствующим образом настроен), у третьего ||6363|| и тут нет никаких пересечений — это разные строки.
Если прописывать в tvFilters %||[[*id]]||%, то все нормально будет выводиться.
На странице с ID=636 мы же ищем товар, у которого в TV есть именно такая подстрока: ||636||. С какой стати нам выведется товар с ||63||?
Другое дело, что может быть путаница из-за этого || — потому я всегда использую #.
У одного товара это ||63||, у другого может быть ||636||,||363|| (если параметр множественный и соответствующим образом настроен), у третьего ||6363|| и тут нет никаких пересечений — это разные строки.
Если прописывать в tvFilters %||[[*id]]||%, то все нормально будет выводиться.
На странице с ID=636 мы же ищем товар, у которого в TV есть именно такая подстрока: ||636||. С какой стати нам выведется товар с ||63||?
Другое дело, что может быть путаница из-за этого || — потому я всегда использую #.
modx хранит значение tv checkbox в таком виде: 63||45||54
Т.е. разделитель в конце и в начале строки не пишется, вот я о чем. А условие subcategory==%||[[*id]]||% работает только для тех значений, которые в серидине строки, но не первые и не последние. тут либо мой вариант, либо tvFilters подставлять сниппет, который слегка модифицирует строку.
Т.е. разделитель в конце и в начале строки не пишется, вот я о чем. А условие subcategory==%||[[*id]]||% работает только для тех значений, которые в серидине строки, но не первые и не последние. тут либо мой вариант, либо tvFilters подставлять сниппет, который слегка модифицирует строку.
А, ну тогда да.
Сделайте, чтобы в базе было так: #63#||#66#||#636# и все будет гораздо проще ))
Сделайте, чтобы в базе было так: #63#||#66#||#636# и все будет гораздо проще ))
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.