繁体   English   中英

PHP日历Foreach循环不按预期工作

[英]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条记录是我的测试记录,它显示了应该分配给它们的日期)

http://imgur.com/a/hBTu4

我的问题代码块如下:

    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">&times;</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">&times;</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>&nbsp;</p>',2);
        }

    //End Event Div
    $calendar.= '</div>'; 

希望这有助于其他人!

最好的,威尔

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM