Видимость на основе значения нескольких флажков

Все еще нахожусь на ногах с Орбеоном. Надеюсь, кто-нибудь сможет мне помочь со следующим. У меня есть форма, в которой для флажков ввода есть пять вариантов. Каждому флажку соответствует поле ввода текста. Вы устанавливаете флажок два, и отображается ввод текста B. Установите флажок Четыре, и отобразится ввод текста D. Это просто, поэтому при вводе текста D видимость устанавливается как:

$checkboxes_input = 'Four' 

Однако, если я установлю флажок два и флажок четыре, тогда ни один из текстовых полей не будет отображаться. Итак, как мне установить видимость ввода текста, чтобы он отображался на основе двух условий, например:

$checkboxes_input = 'Four' or 
($checkboxes_input = 'Two' and $checkboxes_input = 'Four')

Примечание. Стоит сказать, что если бы я делал это с помощью JavaScript, это было бы легко. Но я хочу сделать это в конструкторе форм. Я вижу, что предыдущий разработчик, работавший над этой формой, создал отдельный элемент управления флажком с одним флажком для каждого параметра, необходимого для решения возникшей у меня проблемы. Неужели это не требуется ?!

Большое спасибо :)

Обновлять

Кажется, что работает следующее:

$checkboxes_input = 'Four' or 
$checkboxes_input = 'Four Two' or 
$checkboxes_input = 'Two Four'

Четыре, два и Два, четыре необходимы для того, чтобы охватить порядок, в котором выбираются элементы.

Это не очень удовлетворительно, поскольку условия начинают становиться глупыми, если вам нужно учитывать, что параметры заказа выбраны (что, похоже, вы делаете), например, мне нужно отслеживать три флажка, поэтому:

$checkboxes_input = 'Four' or
$checkboxes_input = 'Four Two' or
$checkboxes_input = 'Four Five' or
$checkboxes_input = 'Two Four' or
$checkboxes_input = 'Two Five' or
$checkboxes_input = 'Five Four' or
$checkboxes_input = 'Five Two' or
$checkboxes_input = 'Four Two Five' or
$checkboxes_input = 'Four Five Two' or
$checkboxes_input = 'Two Four Five' or
$checkboxes_input = 'Two Five Four' or
$checkboxes_input = 'Five Two Four' or
$checkboxes_input = 'Five Four Two'

... ну. Итак, если вся логика, которая зависит от этих параметров, начнет запутываться, может быть, лучше, чтобы каждый флажок был отдельным контроллером в конце концов?


person Matthew E Cornish    schedule 06.04.2017    source источник


Ответы (2)


Вот способ получше:

xxf:split($checkboxes_input) = 'Four'

Это выражение разбивает разделенное пробелами значение группы флажков на пробелы, а затем проверяет, включено ли «Четыре» в результирующую последовательность.

У этого решения нет недостатка решения contains(), которое не сработает, если у вас есть значение элемента, содержащееся в другом значении элемента. Сказать:

contains('baz foobar', 'foo')

возвращает true().

person ebruchez    schedule 06.04.2017
comment
О, спасибо, я не думал, что частичные совпадения приводят к ложным срабатываниям. К счастью, это не похоже на медицинские термины, используемые в наших формах, но я воспользуюсь этим методом :) - person Matthew E Cornish; 10.04.2017
comment
D'oh думал, что у меня есть: o) - person Matthew E Cornish; 12.04.2017

Понятно:

contains()

... так что в моем случае:

contains($checkboxes_input, 'Four')

... так что, пока установлен флажок со значением Четыре, это будет верно для условия видимости.

person Matthew E Cornish    schedule 06.04.2017
comment
Или, лучше, ИМХО: xxf:split($checkboxes_input) = 'Four'. - person avernet; 06.04.2017
comment
Я не видел вашего комментария, так как писал отдельный ответ. Но да, это лучший (и правильный) способ. - person ebruchez; 07.04.2017