Не получив ответа, я решил это так, что я не уверен, что он самый элегантный.Когда я обменивался этой идеей с некоторыми коллегами, они понимали проблему, и мое решение задавалось вопросом, может ли быть что-то более элегантное, но признавал, что это решение решает проблему.
Я приветствую альтернативные подходы.Мы надеемся, что это поможет кому-то еще.
Я называю вышеупомянутую настройку сеанса как «асимметричную», поскольку не все дорожки имеют одинаковое количество сеансов с одинаковыми временными интервалами.
Соответствующийстолбцы в таблице сеансов перечислены в исходном вопросе.Чтобы включить это решение, было добавлено следующее поле:
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.
}
}
}
}