Выбор сессии конференции через эксклюзивность формы через радио-кнопку или jquery - PullRequest
0 голосов
/ 13 апреля 2019

Мое приложение позволяет организациям создавать события, которые имеют сессии в нескольких дорожках.Эти треки не обязательно должны быть на 100% симметричны (см. Пример изображения ниже).

Мне нужно сделать так, чтобы один сеанс, который мог бы перекрывать несколько сеансов, имел бы взаимное отношение выбора эксклюзивности.

form example

В этом примере, если регистрант выбирает сеанс семинара (с 1 до 17 часов), в настоящее время форма запрещает выбор сеансов с 1-2:30.

Я добился этого, просто имея имя переключателя для тех трех сессий, которые все начинаются в 13:00 и имеют одинаковое имя.

В идеале, это также должно предотвратить выборсеансы с 3-4:30.

Я не могу использовать одно и то же решение (если сеансы, начинающиеся в 15:00, имеют одно и то же имя), потому что тогда это не позволит владельцам регистрации посетить сеанс в 13:00, а другое - в 15:00 (без выбора семинара из 1-17:00).

Соответствующие поля моей сеансовой таблицы следующие:

sessionID int
trackID int
eventID int
sessionName varchar
confDay int
start datetime
end   datetime
order int

Как мне достичь желаемого результата без огромного количества кода?

код для отображения этой формы можно увидеть по адресу jsfiddle.net .

1 Ответ

0 голосов
/ 02 мая 2019

Не получив ответа, я решил это так, что я не уверен, что он самый элегантный.Когда я обменивался этой идеей с некоторыми коллегами, они понимали проблему, и мое решение задавалось вопросом, может ли быть что-то более элегантное, но признавал, что это решение решает проблему.

Я приветствую альтернативные подходы.Мы надеемся, что это поможет кому-то еще.

Я называю вышеупомянутую настройку сеанса как «асимметричную», поскольку не все дорожки имеют одинаковое количество сеансов с одинаковыми временными интервалами.

Соответствующийстолбцы в таблице сеансов перечислены в исходном вопросе.Чтобы включить это решение, было добавлено следующее поле:

isLinked int

Примечание1: isLinked - это либо 0, либо sessionID не удаленного сеанса, который должен отображаться всписок сеансов с переключателем.

Примечание 2: isLinked установлен для удаленных и не удаленных сеансов, которые «перекрываются».

У меня есть цикл, который циклически повторяетсядни конференции, затем треки, затем сессии (по порядку, до 5 в день).Пользовательский интерфейс настройки событий позволяет пользователю мягко удалять сеансы, которые не имеют отношения.

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

Пользовательский интерфейс для выбора сеанса затем облегчается следующим псевдокодом для генерации html и javascript для эмуляции желаемого поведения:

foreach($conference_days as $day){

    foreach($tracks as $track){

        for($so=1;$so<=5;$so++){
        // $so = session_order

            grab the session for the current $day, track ID, and $so

            if(not soft-deleted && !isLinked) {  // isLinked == 0
                display as normal with all details + radio button

            } elseif(not soft-deleted && isLinked) {
                display as normal with all details + radio button
                also add javascript that when above radio button is selected
                    a variable* number of to-be-created, hidden, radio buttons 
                    (below) are also selected; 
                    *count the isLinked sessions with same ID that are soft-deleted

            } else {
                display nothing, but...
                output a radio button with style.visiblity=hidden named in a 
                    predictable way based on $day, $track, and $so
                add javascript that to monitor changes to the radio selection in 
                this row so it auto-deselects the visible radio button above.
            }
        }
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...