Как расширить или изменить календарь Codeigniter для обработки многодневных событий и нескольких событий в день - PullRequest
3 голосов
/ 07 декабря 2011

Я бы не хотел изобретать колесо на этом, если оно где-то там есть, но кто-нибудь расширил или изменил календарь codigniter для обработки многодневных событий и нескольких событий в день, или это где-то есть модуль? 1001 *

Ответы [ 2 ]

3 голосов
/ 10 декабря 2011

Несколько мероприятий за один день на самом деле очень просто.Просто нужно изменить шаблон календаря, и вот пример из моего кода.

public function print_calendar($year = 0, $month = 0)
{
    $prefs = array (
        'show_next_prev'  => FALSE,
        'next_prev_url'   => site_url('events/print_calendar'),
        'day_type'        => 'long',
        'template'        => '
            {heading_row_start}{/heading_row_start}
            {heading_previous_cell}{/heading_previous_cell}
            {heading_title_cell}<h1>{heading}</h1>{/heading_title_cell}
            {heading_next_cell}{/heading_next_cell}
            {heading_row_end}{/heading_row_end}

            {table_open}<table border="0" cellpadding="0" cellspacing="0">{/table_open}

            {week_row_start}<tr>{/week_row_start}
            {week_day_cell}<th bgcolor="#999999">{week_day}</th>{/week_day_cell}
            {week_row_end}</tr>{/week_row_end}

            {cal_row_start}<tr>{/cal_row_start}
            {cal_cell_start}<td background="'.s3_path('images/print_cal_cell.jpg').'">{/cal_cell_start}

            {cal_cell_content}<span class="cal_day">{day}</span>{content}{/cal_cell_content}
            {cal_cell_content_today}<span class="cal_day">{day}</span>{/cal_cell_content_today}

            {cal_cell_no_content}<span class="cal_day">{day}</span>{/cal_cell_no_content}
            {cal_cell_no_content_today}<span class="cal_day">{day}</span>{/cal_cell_no_content_today}

            {cal_cell_blank}&nbsp;{/cal_cell_blank}

            {cal_cell_end}</td>{/cal_cell_end}
            {cal_row_end}</tr>{/cal_row_end}

            {table_close}</table>{/table_close}
        '
    );

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

    $year = ($year == 0) ? date('Y') : $year;
    $month = ($month == 0) ? date('n') : $month;
    $start = strtotime('1-'.$month.'-'.$year);

    $events = $this->events_model->get_by_date($start, strtotime('+1 month', $start));
    $this->template->set_layout('');

    if ($events)
    {
        foreach ($events as $key => $event)
        {
            $day = date('j', $event['showing_start_time']);
            $vars[$day] = $this->template->build('events/calendar/cal_item', $event, TRUE);
        }
    }

    $vars['content'] = $this->calendar->generate($year, $month, $vars);
    $this->load->view('calendar/cal_layout', $vars);
}

Надеюсь, этот код понятен и может дать вам хорошую отправную точку.Что я обычно делаю, если они охватывают несколько дней, просто включаю элемент в каждый день.

1 голос
/ 15 декабря 2011

Это можно легко изменить в файле system/libraries/Calendar.php со следующим добавлением кода.Я знаю, что редактирование любого системного файла считается табу, но это очень помогло мне в моем приложении.Обратите внимание на цикл foreach() в закомментированном разделе с надписью //If more than one event on the same day.. Этот код необходимо добавить в файл библиотеки Calendar.php.Более подробно этот ресурс можно найти по следующей ссылке:

http://codeigniter.com/forums/viewthread/196998/

Измененный код Calendar.php:

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'];

                        // If more than one event on the same day
                        if (is_array($data[$day]))
                        {
                          $several_events = '';
                          foreach ($data[$day] as $key => $value)
                          {
                            $several_events .= '<li id="'.$key.'">'.$value.'</li>';
                          }
                          $out .= str_replace('{day}', $day, str_replace('{content}', $several_events, $temp));
                        }

                        // One event per day
                        else
                        {
                          $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'];
                }

Имейте в виду, что я показал больше, чем просто отредактированный кодвыше, чтобы помочь вам найти его в пределах Calendar.php.Надеюсь, это поможет!

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