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}"><<</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}">>></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} {/cal_cell_blank}
{cal_cell_end}</td>{/cal_cell_end}
{cal_row_end}</tr>{/cal_row_end}
{table_close}</table>{/table_close}
';
}
我正在尝试将 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}"><<</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}">>></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} {/cal_cell_blank}
{cal_cell_end}</td>{/cal_cell_end}
{cal_row_end}</tr>{/cal_row_end}
{table_close}</table>{/table_close}
';
}