将功能日历转换为(CakePHP)OOP版本

时间:2013-11-15 15:27:47

标签: php oop cakephp calendar

我希望得到一些帮助,可以将我的网站从功能编码转换为OOP版本。

我有什么: 我有一个功能编程的日历,用于显示我们的工作班次。它一次显示一个月,行数为周,tds为天。在这些tds的每一个中,我都添加了班次(通常为2-5)。 所有班次都存储在一个大的计划表中,其中一行是班次。 使用简单的for循环创建天数,打破星期或月末的行。 很简单..

我想做什么: 我最近再次进入OOP,我想我理解结构和所有,但我错过了一个重点开始。 我想使用CakePHP,让所有设置和工作。 我还有很多其他需要担心的事情,基本上必须从头开始而不是重写我当前的版本。 但作为一个开始,我想在某种程度上将我的日历转换为OOP版本,甚至可能在以后的Cake中使用。 我带了很多不重要的东西,所以不要担心缺少semicola等:)

所以基本上,我真的不知道怎么把它包装成班级 到目前为止,还有一个添加/编辑/删除模式,我也会在特殊事件中投入更多东西 我在哪里定义像桌子一样输出它们的实际方法? 我是否为每个月,每天,班次建立一个班级?或者只有1个日历类,日期存储在数组中?我可以编写一个视图方法来显示表格,但这真的是要走的路吗?

感谢您对此的任何帮助

<?php
require_once('connect.php');

    function drawCalendar($month, $year) {
        global $dbh;
        $date = new DateTime($year . '-' . $month . '-01');
        $daysInMonth = $date->format('t');
        /* start calendar */
        $calendar = '<table id="calendar-table" data-month="' . $month . '" data-year="' . $year . '">';
        $calendar .= '<tbody id="calendar-body">';
        $calendar .= '<tr>';
        /* blank days start of month */
        for ($i = 1; $i < $date->format('N'); $i++) {
            $calendar .= '<td class="calendar-day blank"></td>';
        }
        /* days */
        $interval = DateInterval::createfromdatestring('+1 day');
        for ($i = 1; $i <= $daysInMonth; $i++, $date->add($interval)) {
            $queryDate = $date->format('Y-m-d H:i:s');
            $qs = 'SELECT * FROM schedule AS s WHERE s.start BETWEEN :start AND DATE_ADD(:start, INTERVAL 1 DAY) ORDER BY s.start, s.end';
            $query = $dbh->prepare($qs);
            $query->execute(array(':start' => $queryDate));
            $calendar .= '<td class="calendar-day">';
            foreach ($schedule as $shift) {
                $calendar .= '<div class="shift">...</div>';
            }
            $calendar .= '</td>';
            /* end of day */
            /* weekcheck */
            if ($date->format('N') == 7) {
                $calendar .= '</tr>'; // end of week
                if ($i < $daysInMonth)
                    $calendar .= '<tr>'; // new week with at least 1 day
            }
        }
        $date->sub($interval); /* back to last of month */
        /* blank days end of month */
        for ($i = $date->format('N'); $i < 7; $i++) {
            $calendar .= '<td class="calendar-day blank"></td>';
            if ($i == 6)
                $calendar .= '</tr>'; // end of week
        }
        $calendar .= '</tbody>'; // body
        $calendar .= '</table>'; // wrapper
        return $calendar;
    }

0 个答案:

没有答案