我的应用程序允许组织创建具有多个轨道的会话的事件。这些轨道不必是100%对称的(请参见下面的示例图像)。
我需要这样做,以便单个会话可能会重叠多个会话时间,并具有互斥性-选择关系。
在此示例中,如果注册人当前(从1-5pm开始)选择Workshop会话,则该表单将阻止从1-2:30pm选择会话。
我已经简单地做到了这一点,只需在下午1点开始的那3个会话中使用单选按钮的名称,都使用相同的名称即可。
理想情况下,它还应阻止从3-4:30pm选择会话。
我不能使用相同的解决方案(在下午3点开始的会议使用相同的名称),因为那样会阻止注册人在下午1点和下午3点参加另一个会议(不选择从下午1-5点进行研讨会)。
我的会话表的相关字段如下:
sessionID int
trackID int
eventID int
sessionName varchar
confDay int
start datetime
end datetime
order int
如何在没有大量代码的情况下达到预期的结果?
呈现此表单的代码可以在jsfiddle.net上看到。
答案 0 :(得分:0)
由于没有得到答案,我最终以不确定的方式解决了这个问题。当我向一些同事兜售想法时,他们理解了问题,我的解决方案想知道是否还有其他更优雅的方法,但我承认该解决方案可以解决问题。
我欢迎其他方法。希望对其他人有帮助。
我将上面的会话设置称为“非对称”,因为音轨在相同的时间上并没有全部具有相同的会话数。
会话表中的相关列在原始问题中列出。为了启用此解决方案,添加了以下字段:
isLinked int
注意1::isLinked为0或未删除会话的sessionID,该会话ID应该通过单选按钮显示在会话列表中。
注意2:为“重叠”的已删除和未删除会话设置了isLinked。
我有一个循环,在Conference_days中循环,然后跟踪,然后进行会话(每天最多5个)。通过事件设置界面,用户可以软删除不相关的会话。
在该用户界面中,用户还指定会话是否将与其他会话重叠,如果这样,则使用户也可以为同一轨道中已删除的会话设置该字段。
然后通过以下伪代码简化用于会话选择的UI,以生成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.
}
}
}
}