【问题标题】:Colspan breaks tableColspan 打破桌子
【发布时间】:2016-09-13 05:14:39
【问题描述】:

原创

我有一个页面,其中显示了某一天的所有公司会议室和预订。它看起来像这样:

如您所见,某些行创建了一个额外的<td>

下面是生成表格的代码:

<table celladding="0" cellspacing="0" class="table table-bordered col-xs-12">
    <thead>
        <tr style="background-color:#FFF">
            <?php
            $width = (100 / (count($boardrooms->toArray()) + 1));
            $width = 100 / 7;
            ?>
            <th style="border-right:none; width:<?= $width; ?>%; border-bottom: none;">Boardroom</th>
            <?php
            foreach($boardrooms as $boardroom) { ?>
                <th rowspan="2" style="width:<?= $width; ?>%"><?php echo $boardroom ?></th>
            <?php } ?>
        </tr>
        <tr>
            <th>Time</th>
        </tr>
    </thead>
    <?php
    $writerow = false;
    for($hour = 8; $hour < 17; $hour++) {
        for($minute = 0; $minute < 4; $minute++) {
            echo '<tr><td>' . $hour . ':' . str_pad(($minute*15),2,"0") . '</td>';
            foreach($boardrooms as $boardroom) {
                foreach($boardroomBookings as $booking) {
                    if(date('H:i',strtotime($hour . ':' . str_pad(($minute*15),2,"0"))) >= date('H:i',strtotime($booking->start_time)) &&
                        date('H:i',strtotime($hour . ':' . str_pad(($minute*15),2,"0"))) < date('H:i',strtotime($booking->end_time)) &&
                        $boardroom == $booking->boardroom->name && (empty($boardroomWritten[$booking->id]) || !$boardroomWritten[$booking->id])) {
                        $boardroomWritten[$booking->id] = true;
                        $writerow = true;
                        $rowspan = (strtotime($booking->end_time) - strtotime($booking->start_time))/900;
                        echo '<td style="background-color:#8cc63f; border-bottom:none" rowspan="' . $rowspan . '">' . $this->Html->link($booking->name, array('action' => 'view', $booking->id)) . '</td>';
                        break;
                    } else {
                        $writerow = false;
                    }
                }
                if(!$writerow) {
                    echo '<td></td>';
                }
            }
            echo '</tr>';
        }
    }
    ?>
</table>

如何防止行在有预订的行上显示多余的空单元格?

编辑

这是带有黑色边框的同一张表格:

以及没有预订的情况:

预订后应该是什么样子:

【问题讨论】:

  • 您的示例预订的结束时间是什么时候?
  • 结束时间为13:00
  • 那你应该再多一个 td,而不是少一个,对吧?
  • 没有。看看绿色单元格的右侧?总共应该有 2 列,但绿色单元格所在的位置有 3 列。
  • 我看到一个 代表时间,一个 代表每一列。总共三个。

标签: php foreach html-table


【解决方案1】:

如果您没有预订,则需要插入 td 对,除非您在 colspan 内:

    <?php
for($hour = 8; $hour < 17; $hour++) {
    for($minute = 0; $minute < 4; $minute++) {
        $bookTime = date('H:i ',strtotime($hour . ':' . str_pad(($minute*15),2,"0"))) ;
        echo '<tr><td>' . $bookTime . '</td>';
        foreach($boardrooms as $boardroom) {
            $hasBooking = false;
            foreach($boardroomBookings as $booking) {
                $sTime = strtotime($booking->start_time) ;
                $eTime = strtotime($booking->end_time) ;
                $startTime = date('H:i',$sTime);
                $endTime = date('H:i', $eTime) ; 
                if($bookTime >=  $startTime  && $bookTime < $endTime && $boardroom == $booking->boardroom->name) {
                    $hasBooking = true;
                    if(empty($boardroomWritten[$booking->id]) || !$boardroomWritten[$booking->id]) {
                        $boardroomWritten[$booking->id] = true;
                        $rowspan = ($eTime - $sTime)/900  ;
                        echo '<td style="background-color:#8cc63f; border:1px black solid" rowspan="' . $rowspan . '">' . "somelink" . '</td>';
                        break;
                    }                        
                }
            }
            if (!$hasBooking) {
                echo "<td></td>" ;
            }
        }
        echo '</tr>';
    }
}

【讨论】:

  • 完美运行。谢谢。
猜你喜欢
  • 1970-01-01
  • 2015-09-03
  • 2013-07-14
  • 2022-12-05
  • 2014-02-24
  • 1970-01-01
  • 2012-06-11
  • 2020-07-12
  • 2016-01-22
相关资源
最近更新 更多