CodeIgniter Calendaring Class删除周末

时间:2012-04-23 14:08:04

标签: codeigniter calendar

我在很多项目中都使用过CodeIgniter,我决定使用Calendaring Class而不是Jquery Calendar来显示每月预订。我已经设置好并显示数据FINE。

事实上,我不需要周末,在我的网页上占用了宝贵的空间。我在网上进行了研究,有些人解释说你可以在$ prefs数组中使用该模板。

我认为它与模板分析器类有关,但我无法理解它。

如果任何可以给我链接,帮助或示例,将不胜感激。

1 个答案:

答案 0 :(得分:1)

我希望这就是你想要的。

请将MY_Calendar.php复制到您的库目录,并在控制器中粘贴此代码:

//controller
$prefs['start_day'] = 'monday';         
$this->load->library('calendar',$prefs);
echo $this->calendar->generate_weekdays();

MY_Calendar.php文件:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Calendar extends CI_Calendar
{
    public function __construct($config = array())
    {
        parent::__construct($config);
    }

    public function generate_weekdays($year = '', $month = '', $data = array())
    {
        // Set and validate the supplied month/year
        if ($year == '')
            $year  = date("Y", $this->local_time);

        if ($month == '')
            $month = date("m", $this->local_time);

        if (strlen($year) == 1)
            $year = '200'.$year;

        if (strlen($year) == 2)
            $year = '20'.$year;

        if (strlen($month) == 1)
            $month = '0'.$month;

        $adjusted_date = $this->adjust_date($month, $year);

        $month  = $adjusted_date['month'];
        $year   = $adjusted_date['year'];

        // Determine the total days in the month
        $total_days = $this->get_total_days($month, $year);

        // Set the starting day of the week
        $start_days = array('sunday' => 0, 'monday' => 1, 'tuesday' => 2, 'wednesday' => 3, 'thursday' => 4, 'friday' => 5, 'saturday' => 6);
        $start_day = ( ! isset($start_days[$this->start_day])) ? 0 : $start_days[$this->start_day];

        // Set the starting day number
        $local_date = mktime(12, 0, 0, $month, 1, $year);
        $date = getdate($local_date);
        $day  = $start_day + 1 - $date["wday"];

        while ($day > 1)
        {
            $day -= 7;
        }

        // Set the current month/year/day
        // We use this to determine the "today" date
        $cur_year   = date("Y", $this->local_time);
        $cur_month  = date("m", $this->local_time);
        $cur_day    = date("j", $this->local_time);

        $is_current_month = ($cur_year == $year AND $cur_month == $month) ? TRUE : FALSE;

        // Generate the template data array
        $this->parse_template();

        // Begin building the calendar output
        $out = $this->temp['table_open'];
        $out .= "\n";

        $out .= "\n";
        $out .= $this->temp['heading_row_start'];
        $out .= "\n";

        // "previous" month link
        if ($this->show_next_prev == TRUE)
        {
            // Add a trailing slash to the  URL if needed
            $this->next_prev_url = preg_replace("/(.+?)\/*$/", "\\1/",  $this->next_prev_url);

            $adjusted_date = $this->adjust_date($month - 1, $year);
            $out .= str_replace('{previous_url}', $this->next_prev_url.$adjusted_date['year'].'/'.$adjusted_date['month'], $this->temp['heading_previous_cell']);
            $out .= "\n";
        }

        // Heading containing the month/year
        $colspan = ($this->show_next_prev == TRUE) ? 5 : 7;

        $this->temp['heading_title_cell'] = str_replace('{colspan}', $colspan, $this->temp['heading_title_cell']);
        $this->temp['heading_title_cell'] = str_replace('{heading}', $this->get_month_name($month)."&nbsp;".$year, $this->temp['heading_title_cell']);

        $out .= $this->temp['heading_title_cell'];
        $out .= "\n";

        // "next" month link
        if ($this->show_next_prev == TRUE)
        {
            $adjusted_date = $this->adjust_date($month + 1, $year);
            $out .= str_replace('{next_url}', $this->next_prev_url.$adjusted_date['year'].'/'.$adjusted_date['month'], $this->temp['heading_next_cell']);
        }

        $out .= "\n";
        $out .= $this->temp['heading_row_end'];
        $out .= "\n";

        // Write the cells containing the days of the week
        $out .= "\n";
        $out .= $this->temp['week_row_start'];
        $out .= "\n";

        $day_names = $this->get_day_names();

        for ($i = 0; $i < 5; $i ++)
        {
            $out .= str_replace('{week_day}', $day_names[($start_day + $i) %7], $this->temp['week_day_cell']);
        }

        $out .= "\n";
        $out .= $this->temp['week_row_end'];
        $out .= "\n";

        // Build the main body of the calendar
        while ($day <= $total_days)
        {
            $out .= "\n";
            $out .= $this->temp['cal_row_start'];
            $out .= "\n";

            for ($i = 0; $i < 7; $i++)
            {
                if($i!=5 && $i!=6)
                {
                    $out .= ($is_current_month == TRUE AND $day == $cur_day) ? $this->temp['cal_cell_start_today'] : $this->temp['cal_cell_start'];

                    if ($day > 0 AND $day <= $total_days)
                    {
                        if (isset($data[$day]))
                        {
                            // Cells with content
                            $temp = ($is_current_month == TRUE AND $day == $cur_day) ? $this->temp['cal_cell_content_today'] : $this->temp['cal_cell_content'];
                            $out .= str_replace('{day}', $day, str_replace('{content}', $data[$day], $temp));
                        }
                        else
                        {
                            // Cells with no content
                            $temp = ($is_current_month == TRUE AND $day == $cur_day) ? $this->temp['cal_cell_no_content_today'] : $this->temp['cal_cell_no_content'];
                            $out .= str_replace('{day}', $day, $temp);
                        }
                    }
                    else
                    {
                        // Blank cells
                        $out .= $this->temp['cal_cell_blank'];
                    }

                    $out .= ($is_current_month == TRUE AND $day == $cur_day) ? $this->temp['cal_cell_end_today'] : $this->temp['cal_cell_end']; 
                }

                $day++;
            }

            $out .= "\n";
            $out .= $this->temp['cal_row_end'];
            $out .= "\n";
        }

        $out .= "\n";
        $out .= $this->temp['table_close'];

        return $out;
    }
}


/* End of file  MY_Calendar.php */

由于