Суть проблемы.
Я думаю многие сталкивались с такой штукой, может и нет.. Рассмотрим ситуацию..
- TV = demoTV параметр checkbox ( param1||param2||param3 )
- для документа выбираем param1||param2
- выводим документ, выводим наш TV [*demoTV*], в результате получаем param1param2, то есть tv сливается в одну строчку, что не есть хорошо, поскольку если ставить условие проверки [+demoTV:is=`param`:then=`param1`:else=`param2`+] в результате получим ничего.. поскольку наш TV на выходе равен param1param2.
У меня было такое условие:
каждый параметр checkbox - это картинка+фильтр.
То-есть:
1 - выбираем TV, и в результате отображается картинка(может быть несколько)
2 - есть разделы на сайте, в которых стоит фильтр по этому TV, и если фильтр в Ditto писать тегом - тег обрезается, и фильтрация не работает.
3 - N разделов, N фильтров, каждый документ может относится к нескольким разделам, потому и checkbox.
Пришло в голову такое решение, TV прописываю текстом, то есть param1||param2...paramN.
Для фильтра Ditto пишу
&filter=`tv,param1,7`
Mode Meaning
1 !=
2 ==
3 <
4 >
5 <=
6 >=
7 Text not in field value
8 Text in field value
9 case insenstive version of #7
10 case insenstive version of #8
11 checks leading character of the field
И в самом отображении(в чанке вывода документа) пишу для каждого варианта
[+demoTV:is=`param1`:then=`<img src='param1' />`:else=``+]
[+demoTV:is=`param2`:then=`<img src='param2' />`:else=``+]
Знаю, решение не совсем динамично, благо у меня таких вариантов всего 6
НО! Это не срабатывает..
Почему? - если для документа поставил 2 параметра(чтобы выводился в 2 разделах), то на выходе наш TV = param1param2(как я уже писал выше), и условие PHx не срабатывает, потому что там точная проверка на совпадение.
РЕШЕНИЕ
Что сделал я, чтобы все работало:
- открыл файл
/assets/plugins/phx/phx.parser.class.inc.php
- находим
##### Conditional Modifiers
- ниже добавил
case "like": $condition[] = intval(strpos($output,$modifier_value[$i])===FALSE); break;
как это работает? Принцип фильтра #7 Ditto. Ищет
Вуаля!
Есть небольшое примечание:)
Немного глючит это условие, поскольку проверка на самом деле стоит так
[*demotv:like=`param1`:then=``:else=`<img src='param1' />`*]
[*demotv:like=`param2`:then=``:else=`<img src='param2' />`*]
Условие как бы равно - Если в строке demotv(param1param2) есть строчка param1 - выводим картинку 1, аналогично и для всех следующих. Но почему тогда пишу не в then=`bad`, а именно в else=`good`. Не знаю:) столкнулся с проблемой. Если переделать
case "like": $condition[] = intval(strpos($output,$modifier_value[$i]) != FALSE); break;
В результате получаю только последний param(картинку), хотя в фильтре Ditto, выводится в нужных разделах
Вот такое вот небольшое решение придумал. Возможно есть и проще способы, но я не нашел.
Так же если кто сможет сделать, чтобы нормально работало для then=``, а не else=``, буду благодарен:) А то не совсем правильно получается(хоть и работает)
Надеюсь понятно расписал, будут вопросы, задавайте, с удовольствием постараюсь ответить:)