div 内的 Codeigniter 日历和不断变化的月份

Codeigniter Calendar within a div and changing month

我正在尝试将 CodeIgniter 日历用作类似于 Facebook 的社交网络的一部分的事件日历。在日历 class 的 CodeIgniter 手册中,它让您从控制器中调用 echo $this->calendar->generate() 方法。但是我希望它出现在页面选项卡上的 div 标记中。这样在视图中使用echo可以吗?

其次,next_prev_url 使用 url 加载下个月或上个月。但是我已经使用 url 来获取有关用户的信息,例如他们的 ID。当我现在尝试使用日历时,它将 user_id 作为月份或年份参数,给我一个 186 年四月或类似日期的视图。如何在不使用 URL 的情况下加载下个月或上个月?

第一个问题:没关系,这是你的风格。要将逻辑与视图进一步分离,您可以将日历分配给变量。

$data['calendar'] = $this->calendar->generate();
$this->load->view('myview', $data);

其次:我不确切知道为什么你在日历中获得用户 ID(可能是某处一些未闭合的引号),但不需要另一个 jquery 插件。我很久以前写过类似的东西。

//my-calendar-button is inside calendar template
jQuery(document).on('click', 'a.my-calendar-button', function(e){  
e.preventDefault();
    var link=this.href; //set link to controller in calendar template
$.ajax({
    url: link,
    type: "GET",
    dataType: "html",
    success: function (data) {
        var result = $('<div />').append(data).find('.my-calendar').html();

        $('.my-calendar').hide().html(result).fadeIn();
    },
    error: function (xhr, status) {
        alert("Sorry, there was a problem!");
    },
    complete: function (xhr, status) {
        $('.my-calendar').fadeIn();
    }
});

如果需要,还有控制器代码:

 public function getCalendar($year,$month,$eventType)
{
    $events=$this->event_model->get_month_events($year,(int)$month,$eventType);
    $prefs = array (
        'template' => $this->getCalendarTemplate(),
        'start_day'    => 'monday',
        'show_next_prev'  => TRUE,
        'month_type'   => 'long',
        'day_type'     => 'abr',
        'next_prev_url'   => '/ajax/calendar/' //it adds year and month automatically
    );

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

    $data['calendar']= $this->calendar->generate($year,$month,$events);
    return $this->load->view('/ajax/calendar',$data);
}

public function getCalendarTemplate()
{
    return $template = '

{table_open}<table>{/table_open}

{heading_row_start}<tr>{/heading_row_start}

{heading_previous_cell}<th><a class="my-calendar-button" href="{previous_url}">&lt;&lt;</a></th>{/heading_previous_cell}
{heading_title_cell}<th colspan="{colspan}">{heading}</th>{/heading_title_cell}
{heading_next_cell}<th><a class="my-calendar-button" href="{next_url}">&gt;&gt;</a></th>{/heading_next_cell}

{heading_row_end}</tr>{/heading_row_end}

{week_row_start}<tr>{/week_row_start}
{week_day_cell}<td>{week_day}</td>{/week_day_cell}
{week_row_end}</tr>{/week_row_end}

{cal_row_start}<tr>{/cal_row_start}
{cal_cell_start}<td>{/cal_cell_start}

{cal_cell_content}<a href="{content}">{day}</a>{/cal_cell_content}
{cal_cell_content_today}<a href="{content}">{day}</a>{/cal_cell_content_today}

{cal_cell_no_content}{day}{/cal_cell_no_content}
{cal_cell_no_content_today}{day}{/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}
';

}