Codeigniter Календарь Вопрос - PullRequest
0 голосов
/ 20 июля 2011

У меня вопрос по поводу класса календаря.Я могу заполнять дни в календаре данными из базы данных без проблем, если в URL-адресе указаны год и месяц, но при первой загрузке страницы с календарем в URL-адресе нет года и месяца, поэтому яЯ не уверен, как выяснить год и месяц.

Как заполнить события в календаре при загрузке страницы, если в URL нет года и месяца?

Контроллер

    /**
    * memberCalendar - displays the member calendar page
    */
    function memberCalendar()
    {
        $prefs = array (
               'start_day'      => 'sunday',
               'month_type'     => 'long',
               'day_type'       => 'short',
               'show_next_prev' => TRUE,
               'next_prev_url'  => site_url('member/memberCalendar')
             );

        $year = $this->uri->segment(3);
        $month = $this->uri->segment(4);

        $this->load->library('calendar', $prefs);
        $this->load->model('member_model');

        $events = $this->member_model->get_member_events($year, $month);

        $calendarEvents = array();

        foreach($events as $event) {

            $day = substr($event->event_date, 8, 2);    // get the day

            // if the first digit is a 0, such as in 03, remove the 0 so it becomes 3
            if(substr($day, 0, 1) == 0) {
                $day = substr($day, 1, 1);
            }

            $calendarEvents[$day] = 'http://example.com/news/article/'.$event->event_title;
        }

        $content_data['calendar'] = $this->calendar->generate($this->uri->segment(3), $this->uri->segment(4), $calendarEvents);
        $content_data['firstName'] = $this->session->userdata('firstName');
        $data['sess'] = $this->session;
        $data['content'] = $this->load->view('member/memberCalendar', $content_data, true);
        $this->load->view('template/admin', $data);
    }

Модель

/*
    * function which gets the member calendar events
    */
    function get_member_events($year, $month)
    {
        $query = $this->db->select('event_date, event_title, event_content')->from('member_calendar')->like('event_date', "$year-$month", 'after')->get();

        // if there is more than one row
        if($query->num_rows > 0)
        {
            return $query->result();
        } else {
            return false;
        }
    }

Ответы [ 2 ]

2 голосов
/ 20 июля 2011

Я думаю, вам лучше использовать параметры и аргументы по умолчанию:

public function memberCalendar( $year = FALSE, $month = FALSE )
{
    if( $year === FALSE ) $year = date( 'Y' );
    if( $month === FALSE ) $month = date( 'm' );

    // continue as normal until calendar->generate
    $content_data['calendar'] = 
                   $this->calendar->generate($year, $month, $calendarEvents);

    // continue as normal
}
0 голосов
/ 20 июля 2011

Просто сделайте что-то вроде

if ($this->uri->total_segments() > 2)
{
        $year  = $this->uri->segment(3);
        $month = $this->uri->segment(4);
}
else
{
        $year = date('Y');
        $month = date('m'); 
}

для загрузки текущего года и месяца по умолчанию при просмотре календаря

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...