We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 7368
    • 264 Posts
    Суть проблемы.

    Я думаю многие сталкивались с такой штукой, может и нет.. Рассмотрим ситуацию..

    - 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 smiley

    НО! Это не срабатывает.. Почему? - если для документа поставил 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, выводится в нужных разделах smiley

    Вот такое вот небольшое решение придумал. Возможно есть и проще способы, но я не нашел.

    Так же если кто сможет сделать, чтобы нормально работало для then=``, а не else=``, буду благодарен:) А то не совсем правильно получается(хоть и работает)

    Надеюсь понятно расписал, будут вопросы, задавайте, с удовольствием постараюсь ответить:)