Условия для фильтра по TV (tvFilters)

Всем доброго времени суток, есть вопрос:

При фильтре по ID документа
&tvFilters=`my_filter==%[[+id]]%`
.
Он выводит все похожие. Например, если ID=12, то в списке выведутся и 120 и 112 и т.д.
мне надо четкое соответствие — подскажете как это реализовать?

Понятно, что дело в %%, но убирая их вообще ничего не выводится. Уже голову сломал (((
Михаил Боровов
30 апреля 2019, 00:18
modx.pro
792
0

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

Павел Романов
30 апреля 2019, 10:02
0
Добавить какие-либо нецифровые символы в возможные значения TV, чтобы прописывалось, к примеру, так:
_120_
_112_

Ну и в вызове:
&tvFilters=`my_filter==%_[[+id]]_%`
    Михаил Боровов
    30 апреля 2019, 23:47
    0
    К сожалению, этот вариант не подходит. (((
    id назначает сам ModX к документу, а не я руками.
    Петропавловский Артем
    30 апреля 2019, 10:50
    1
    0
    Можете использовать конструкцию FIND_IN_SET запрос будет примерно такой:
    $prefix = $modx->getOption('table_prefix');
    $sql1 = "SELECT * FROM ".$prefix."site_tmplvar_contentvalues WHERE tmplvarid = 14 AND FIND_IN_SET('".$id."', replace(value, '||', ','))";
    $statement = $modx->query($sql1);
    $arr1 = $statement->fetchAll(PDO::FETCH_ASSOC);
    foreach($arr1 as $item){
        $output[] = $item['contentid'];
    }
    Идентификатор TV и ресурса измените на свои. Здесь это уже обсуждалось, например, здесь. Ну, и из поста можете использовать в параметре where pdoResources:
    [[!pdoPage?
    &limit=`18`
    &includeTVs=`categories`
    &where=`["1 = 1 AND FIND_IN_SET('[[*id]]', replace(categories, '||', ','))"]`
    ]]
      Михаил Боровов
      01 мая 2019, 00:03
      0
      Артем, огромное спасибо!
      Идеально подошло решение добавить строку &where:

      &tvFilters=`my_filter==%[[+id]]%`
      &where=`["1 = 1 AND FIND_IN_SET('[[+id]]', replace(my_filter, '||', ','))"]`
      .
      Буду смотреть везде ли правильно отрабатывает. Но первичный анализ показал, что это именно то, что нужно!
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    6