modx getresources tvfilters checkbox

Как можно сделать выборку по tv, если там массив значений, разделенный ||?
Вариант &tvFilters=`subcategory==%||[*id]||%` у меня не работает.
Есть ли выход из данной ситуации?
aligan
17 июня 2016, 18:55
modx.pro
2 414
0

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

Павел Романов
18 июня 2016, 16:30
0
А так?
&tvFilters=`subcategory==%[[*id]]%`
    aligan
    18 июня 2016, 16:36
    0
    Павел, не совсем верно. К примеру если есть ID = 68 и оно удовлетворяет вашему примеру, а есть ID= 686, и оно удовлетвореяет вашему примеру, но по сути ошибочно
    Решение:
    [[!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
      Павел Романов
      18 июня 2016, 16:47
      0
      Это понятно. Я сам обычно использую ## или ::
      А что у Вас не работает-то? Если Вы используете || в качестве обёртки, то это должно фунциклировать:
      &tvFilters=`subcategory==%||[[*id]]||%`

      Только вызов у Вас какой-то странный. Сделайте так:
      [[pdoResources?
              &parents=`53`
              &includeTVs=`image,price,price-wsale,subcategory`
              &tpl=`product-item`
              &templates=`4`
              &tvFilters=`subcategory==%||[[*id]]||%`
              &tvFiltersOrDelimiter=`:`
      ]]
        aligan
        18 июня 2016, 16:49
        0
        Да просто ранее pdoPage стоял. Я его обратно верну, поэтому все нормально)
          aligan
          18 июня 2016, 16:50
          0
          И ваш вариант &tvFilters=`subcategory==%||[[*id]]||%` работать е будет, я выше написал почему
            Павел Романов
            18 июня 2016, 17:04
            0
            Если у Вас в TV subcategory у товара в базу пишется ||***||, то будет.

            У одного товара это ||63||, у другого может быть ||636||,||363|| (если параметр множественный и соответствующим образом настроен), у третьего ||6363|| и тут нет никаких пересечений — это разные строки.
            Если прописывать в tvFilters %||[[*id]]||%, то все нормально будет выводиться.
            На странице с ID=636 мы же ищем товар, у которого в TV есть именно такая подстрока: ||636||. С какой стати нам выведется товар с ||63||?

            Другое дело, что может быть путаница из-за этого || — потому я всегда использую #.
              aligan
              18 июня 2016, 17:14
              0
              modx хранит значение tv checkbox в таком виде: 63||45||54
              Т.е. разделитель в конце и в начале строки не пишется, вот я о чем. А условие subcategory==%||[[*id]]||% работает только для тех значений, которые в серидине строки, но не первые и не последние. тут либо мой вариант, либо tvFilters подставлять сниппет, который слегка модифицирует строку.
                Павел Романов
                18 июня 2016, 17:21
                0
                А, ну тогда да.
                Сделайте, чтобы в базе было так: #63#||#66#||#636# и все будет гораздо проще ))

      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      8