[英]PHP Calendar Foreach Loop Not Working as expected
感谢您抽出宝贵时间来审核我的问题。 我应该说,我不是一个专家的PHP开发人员,但我知道这很危险!
我目前正在设置一个PHP日历,如果你愿意,可以在特定日期显示“事件”。
我修改了以下代码: http : //www.codesend.com/view/84dba4acad5998d6fd4119c0c758dc52/
目前,我能够让foreach循环完成这些日子并在数据出现的每一天显示bootstrap模式框按钮。 使用print_r和pre标签进行调试时,我可以看到每天都正确显示这些值,但由于某种原因,它会在所有日期内重复我的数据,而不是将每天的数据放在正确的日期。
我试过在当前的foreach循环中做一个额外的foreach循环,这似乎不起作用,或者我没有正确地做到这一点。
在屏幕截图中,您将在2天内看到“No”和“Pending”的位置。 但是,当我点击查看请求时,它只显示Kelly的待处理记录。 (注意,最顶部的3条记录是我的测试记录,它显示了应该分配给它们的日期)
我的问题代码块如下:
foreach($events[$event_day] as $event => $value) {
$calendar.= '<div class="event">';
//Debugging
$calendar.= '<pre>'. $value['status'] .'</pre>';
$status = trim($value['status']);
//if ($inc < 1){
$calendar.= '<button type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#myModal">
View Requests
</button>';
//}
$calendar.='<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel" style="text-align:center;">Agent Requests for - </h4>
</div>
<div class="modal-body"><div class="row"><div class="col-md-4" style="border-right:1px solid gainsboro;min-height:250px;text-align:center;"><span class="label label-success" style="font-size:14px;">Approved</span><hr/>';
if ($status == 'Yes') {
$calendar.= '<li>'.$value['title'] .' ' .$value['title2'].'</li>';
}
$calendar.='</div><div class="col-md-4" style="border-right:1px solid gainsboro;min-height:250px;text-align:center;"><span class="label label-danger" style="font-size:14px;">Denied</span><hr/>';
if ($status == 'No') {
$calendar.= '<li>'.$value['title'] .' ' .$value['title2'].'</li>';
}
$calendar.='</div><div class="col-md-4" style="text-align:center;"><span class="label label-warning" style="font-size:14px;">Pending</span><hr/>';
if ($status == 'Pending') {
$calendar.= '<li>'.$value['title'] .' ' .$value['title2'].'</li>';
}
$calendar.='</div></div></div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>';
//End Event Div
$calendar.= '</div>';
}
提前感谢您抽出宝贵时间来看看这个!
你只看到第一个的原因是因为你的模态选择器使用了一个id属性#myModal
,它应该是唯一的,所以它会停止查找它找到第一个。 由于您在foreach循环中输出模态内容,因此所有div都具有相同的ID。
有很多方法可以解决这个问题,但我建议使用唯一的ID选择器。 您还没有提供任何示例数据,但我会猜测并假设您在事件数据对象上有一个eventId
或类似的东西。 如果你没有唯一的id,那么你可能会使用事件名称或其他东西,但你应该在那里放一个ID - 特别是如果你从你设计的数据库中提取。
这是一些缩写的伪代码:
foreach($events[$event_day] as $event => $value) {
// ...
// get some sort of uniquely identifying data attribute from the event
$eventId = trim($value['eventId']);
// ...
// uniquely select the modal content div with a distinct id
$calendar.= '
<button
data-target="#myModal-' . $eventId . '"
type="button"
class="btn btn-primary btn-sm"
data-toggle="modal"
>
View Requests
</button>';
// ...
// use this unique id when generating your modal content
$calendar.='
<div
id="myModal-' . $eventId . '"
class="modal fade"
tabindex="-1"
role="dialog"
aria-labelledby="myModalLabel"
>';
// ...
}
谢谢杰夫! 我注意到,在我把所有东西都擦掉后不久,我就一步一步地重建了它。 另外,我的操作顺序略有偏差。
修复:
1.)设置模态ID(否则它不知道要查看哪一天!谢谢杰夫。)
2.)重新排序不应重复的模态元素在foreach循环之外。
这是更正后的代码:
$calendar.= '<div class="event">';
if(isset($events[$event_day])) {
//Display Button if Data Present on Day
$calendar.= '<button type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#myModal-'.$list_day.'">View Requests</button>';
//Build Modal & Table Headers
$calendar.='<div class="modal fade" id="myModal-'.$list_day.'" tabindex="-1" role="dialog" aria-labelledby="myModalLabel-'.$list_day.'">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel-'.$list_day.'" style="text-align:center;">Agent Requests for - '.$event_day.'</h4>
</div>
<div class="modal-body">
<div class="row">
<table class="table table-striped">
<thead>
<tr>
<th style="text-align:center;"><i class="fa fa-cog" aria-hidden="true"></i></th>
<th>Agent Name</th>
<th>Status</th>
<th>Hours</th>
</tr>
</thead>
<tbody>';
foreach($events[$event_day] as $event) {
//Start Table Row
$calendar.='<tr>';
//Edit Button
$calendar.='<td style="text-align:center;"><a title="Edit Record" class="btn btn-default" href="edit-time.php?id='.$event['number'].'"><em class="fa fa-pencil"></em></a>';
//Status Indicator
$calendar.= '<td>'.$event['title'] .' ' .$event['title2'].'</td><td>';
if ($event['status'] == 'Yes'){
$calendar.= '<span class="label label-success" style="font-size:14px;">Approved</span>';
}
if ($event['status'] == 'No'){
$calendar.= '<span class="label label-danger" style="font-size:14px;">Denied</span>';
}
if ($event['status'] == 'Pending'){
$calendar.= '<span class="label label-warning" style="font-size:14px;">Pending</span>';
}
//Hours
$calendar.= '<td>'.$event['hours'].'</td>';
//End Table Row
$calendar.='</tr>';
}
//End Table Body & End Modal
$calendar.='</tr></tbody></table></div></div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>';
}
else {
//No Data
$calendar.= str_repeat('<p> </p>',2);
}
//End Event Div
$calendar.= '</div>';
希望这有助于其他人!
最好的,威尔
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.