2017-03-24 76 views
1

我有日曆,其日期已預訂並保存在數據庫中。我試圖從數據庫中取消預訂,然後在相應的日期下顯示。一切工作正常,除了事情,我想日期只是文本,而不是鏈接,當有超過5個事件到該日期。Codeigniter在5次預訂後禁用日曆日期

我知道日曆模板沒有內容單元格和內容單元格。但是我希望日期在連接超過5個事件時沒有鏈接。

我的模型:

public function bookingcalender($year=null,$month=null) 
    { 
     if(!$year) 
     { 
      $y = date('Y'); 
     } 
     else 
     { 
      $y = $year; 
     } 
     if(!$month) 
     { 
      $m = date('m'); 
     } 
     else 
     { 
      $m = $month; 
     } 
     $this->config = array(
      'show_next_prev' => TRUE, 
      'next_prev_url' => 'http://joshuaflinn.com/CI/booking/show', 
      'template' => '{table_open}<table class="availability-calendar">{/table_open}   
      {heading_row_start}<tr class="toolbar">{/heading_row_start}   
      {heading_title_cell}<th colspan="{colspan}">{heading}</th>{/heading_title_cell} 
      {heading_previous_cell}<th><a href="{previous_url}">&lt;</a></th>{/heading_previous_cell} 
      {heading_next_cell}<th><a href="{next_url}">&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_start_today}<td>{/cal_cell_start_today} 
      {cal_cell_start_other}<td class="other-month">{/cal_cell_start_other} 
      {cal_cell_content}<a href="#" data-toggle="collapse" data-target="#bookingform" data="'.$y.'-'.$m.'-{day}">{day}</a><span class="date-data">{content}</span>{/cal_cell_content} 
      {cal_cell_content_today}<div class="highlight"><a href="{content}">{day}</a></div>{/cal_cell_content_today} 
      {cal_cell_no_content}<a href="#" data-toggle="collapse" data-target="#bookingform" data="'.$y.'-'.$m.'-{day}">{day}</a>{/cal_cell_no_content} 
      {cal_cell_no_content_today}<a href="#" data-toggle="collapse" data-target="#bookingform"><div class="highlight">{day}</div></a>{/cal_cell_no_content_today} 
      {cal_cell_blank}&nbsp;{/cal_cell_blank} 
      {cal_cell_other}{day}{/cal_cel_other} 
      {cal_cell_end}</td>{/cal_cell_end} 
      {cal_cell_end_today}</td>{/cal_cell_end_today} 
      {cal_cell_end_other}</td>{/cal_cell_end_other} 
      {cal_row_end}</tr>{/cal_row_end} 
      {table_close}</table>{/table_close}' 
      ); 




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

     $conf_data = $this->get_booked_dates($year,$month); 
     return $this->calendar->generate($year,$month,$conf_data); 


    } 
    public function get_booked_dates($year,$month) 
    { 
     $query = $this->db->select('client_name,booking_date')->from('bookings')->like('booking_date',"$year-$month")->get(); 


     $cal_data = array(); 

     foreach($query->result() as $row) 
     { 
      $dt = explode("-", $row->booking_date); 
      $dt = $dt[2]; 
      $k = ($dt >= 10 ? substr($row->booking_date, 8,2) : substr($row->booking_date, 9,1)); 

      if(@$cal_data[$k] == '') 
      { 
       $cal_data[$k] = $row->client_name;     
      } 
      else 
      { 
       $cal_data[$k] .= ','.$row->client_name;     
      } 

     }  

     return $cal_data; 
    } 

回答

0

因爲Codeigniters日曆庫已被限制只能在模板中的兩個僞變量cal_cell_no_contentcal_cell_content在你想顯示什麼內容方面一起玩的選項。

快速查看門後面顯示圖書館使用isset()來確定要使用兩個僞變量中的哪一個。 它{day},對於一個有點哈克的解決方案打開了前調用str_replace函數{content}

public function bookingcalender($year=null,$month=null) 
    { 
     if(!$year) 
     { 
      $y = date('Y'); 
     } 
     else 
     { 
      $y = $year; 
     } 
     if(!$month) 
     { 
      $m = date('m'); 
     } 
     else 
     { 
      $m = $month; 
     } 
     $this->config = array(
      'show_next_prev' => TRUE, 
      'next_prev_url' => 'http://joshuaflinn.com/CI/booking/show', 
      'template' => '{table_open}<table class="availability-calendar">{/table_open}   
      {heading_row_start}<tr class="toolbar">{/heading_row_start}   
      {heading_title_cell}<th colspan="{colspan}">{heading}</th>{/heading_title_cell} 
      {heading_previous_cell}<th><a href="{previous_url}">&lt;</a></th>{/heading_previous_cell} 
      {heading_next_cell}<th><a href="{next_url}">&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_start_today}<td>{/cal_cell_start_today} 
      {cal_cell_start_other}<td class="other-month">{/cal_cell_start_other} 
      {cal_cell_content}{content}{/cal_cell_content} 
      {cal_cell_content_today}<div class="highlight">{content}</div>{/cal_cell_content_today} 
      {cal_cell_no_content}<a href="#" data-toggle="collapse" data-target="#bookingform" data="'.$y.'-'.$m.'-{day}">{day}</a>{/cal_cell_no_content} 
      {cal_cell_no_content_today}<a href="#" data-toggle="collapse" data-target="#bookingform"><div class="highlight">{day}</div></a>{/cal_cell_no_content_today} 
      {cal_cell_blank}&nbsp;{/cal_cell_blank} 
      {cal_cell_other}{day}{/cal_cel_other} 
      {cal_cell_end}</td>{/cal_cell_end} 
      {cal_cell_end_today}</td>{/cal_cell_end_today} 
      {cal_cell_end_other}</td>{/cal_cell_end_other} 
      {cal_row_end}</tr>{/cal_row_end} 
      {table_close}</table>{/table_close}' 
      ); 

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

     $conf_data = $this->get_booked_dates($year,$month); 
     return $this->calendar->generate($year,$month,$conf_data); 

    } 


    public function get_booked_dates($year,$month) 
    { 
     $query = $this->db->select('client_name,booking_date')->from('bookings')->like('booking_date',"$year-$month")->get(); 

     $cal_data = array(); 

     foreach($query->result() as $row) 
     { 
      $dt = explode("-", $row->booking_date); 
      $k = intval($dt[2]); // MAKE INTEGER OF DAY NUMBER 

      if(@$cal_data[$k] == '') 
      { 
       $cal_data[$k] = $row->client_name;     
      } 
      else 
      { 
       $cal_data[$k] .= ','.$row->client_name;     
      } 

     }  

     // LOOP THROUGH EACH DAY TO FIND THOSE WITH MORE THAN 5 EVENTS 
     foreach($cal_data as $key=>$val){ 
      // COUNT THE NUMBER OF COMMAS THAT OCCUR IN STRING 
      $count = strlen($val) - strlen(str_replace(',','',$val)); 
      if($count > 4){ // IF MORE THAN 4 COMMAS (> 5 EVENTS) THEN NO LINK... 
       $cal_data[$key] = '{day}<span class="date-data">'.$val.'</span>'; 
      } else { // LINKED DAY 
       $cal_data[$key] = '<a href="#" data-toggle="collapse" data-target="#bookingform" data="'.$year.'-'.$month.'-{day}">{day}</a><span class="date-data">'.$val.'</span>';    
      } 
     } 

     return $cal_data; 
    } 

注:我在模板已經改變兩行:{cal_cell_content}{content}{/cal_cell_content}{cal_cell_content_today}<div class="highlight">{content}</div>{/cal_cell_content_today}

現在,您只需要設置爲{content},因爲{day}在內容中指定,該內容還包含從查詢返回的html。

更新:我已經測試瞭解決方案,它似乎工作正常!

如果您需要更靈活的解決方案,並且不希望在查詢返回的內容中混合使用模板html,則必須操作或擴展日曆庫。

相關問題