Условия для фильтра по TV (tvFilters)
        Всем доброго времени суток, есть вопрос:
При фильтре по ID документа
Он выводит все похожие. Например, если ID=12, то в списке выведутся и 120 и 112 и т.д.
мне надо четкое соответствие — подскажете как это реализовать?
Понятно, что дело в %%, но убирая их вообще ничего не выводится. Уже голову сломал (((
    
    
                                                                                
            При фильтре по ID документа
&tvFilters=`my_filter==%[[+id]]%`.Он выводит все похожие. Например, если ID=12, то в списке выведутся и 120 и 112 и т.д.
мне надо четкое соответствие — подскажете как это реализовать?
Понятно, что дело в %%, но убирая их вообще ничего не выводится. Уже голову сломал (((
Комментарии: 6
                Добавить какие-либо нецифровые символы в возможные значения TV, чтобы прописывалось, к примеру, так:
Ну и в вызове:
                    _120_
_112_Ну и в вызове:
&tvFilters=`my_filter==%_[[+id]]_%`            
                К сожалению, этот вариант не подходит. (((
id назначает сам ModX к документу, а не я руками.
                    id назначает сам ModX к документу, а не я руками.
                Можете использовать конструкцию 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, '||', ','))"]`
]]            
                Артем, огромное спасибо!
Идеально подошло решение добавить строку &where:
Буду смотреть везде ли правильно отрабатывает. Но первичный анализ показал, что это именно то, что нужно!
                    Идеально подошло решение добавить строку &where:
&tvFilters=`my_filter==%[[+id]]%`
&where=`["1 = 1 AND FIND_IN_SET('[[+id]]', replace(my_filter, '||', ','))"]`.Буду смотреть везде ли правильно отрабатывает. Но первичный анализ показал, что это именно то, что нужно!
                Tvfilters параметр не нужен в вашем случае            
                    
                У меня в Tvfilters есть еще условия для фильтра. Просто тут не указал. ))
Спасибо!
                    Спасибо!
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.