2011-12-13 29 views
0

沿下列搭配:CodeIgniter from Scratch: The Calendar Library笨日曆庫教程更新

從早期版本的代碼:

class Mycal extends CI_Controller 
{ 

    function display($month, $year) { 

     $conf = array(
      'start_day' => 'Monday', 
      'show_next_prev' => true, 
      'next_prev_url' => base_url() . 'mycal/display' 
     ); 

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

     print $this->calendar->generate($month, $year); 

    } 
} 

產生這些錯誤:

遇到

一個PHP錯誤

嚴重性:警告

消息:缺少參數1 MYCAL ::顯示器()

文件名:控制器/ mycal.php

行號:4所述的PHP錯誤遇到

嚴重性:警告

消息:缺少參數2 MYCAL ::顯示器()

文件名:控制器/ mycal.php

行號:遇到4所述的PHP錯誤

嚴重性:注意

消息:未定義變量:年

文件名:控制器/ mycal.php

行號:16甲PHP遇到錯誤

嚴重性:通知

消息:未定義的變量:月

文件名:控制器/ mycal.php

行號:16

我更新爲以下:

class Mycal extends CI_Controller { 

    function display($year = null, $month = null) { 

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

     $conf = array(
      'start_day' => 'Monday', 
      'show_next_prev' => true, 
      'next_prev_url' => base_url() . 'mycal/display/' 
     ); 

     $this->load->library('calendar', $conf); 
     print $this->calendar->generate($year, $month); 
    } 

} 

它的工作原理如所期望,但它是否遵循CI的最佳實踐?

回答

1

display函數被調用時,$year$month將被設置爲URI段(或null)。這裏不需要撥打$this->uri->segment

另外echoprintaccording to this)稍快。

function display($year = null, $month = null) { 
    $conf = array(
     'start_day' => 'Monday', 
     'show_next_prev' => true, 
     'next_prev_url' => base_url() . 'mycal/display/' 
    ); 

    $this->load->library('calendar', $conf); 
    echo $this->calendar->generate($year, $month); 
} 
+0

那麼,爲什麼教程代碼失敗,沒有$ year = null,$ month = null? – Wasabi 2011-12-13 18:50:03

1

爲了解決Rocket的問題,你需要設置年份和月份,如果他們沒有通過url。

通過做$year = null, $month = null作爲參數,這意味着如果沒有參數傳遞,$ year將等於null,$ month將等於null,但如果參數在url中傳遞,$ year將等於第一個參數,$月將等於下一個參數。

function display($year = null, $month = null) { 

    $year = ($year == null) ? date('Y') : $year; 
    $month = ($month == null) ? date('n') : $month; 

    $conf = array(
     'start_day' => 'Monday', 
     'show_next_prev' => true, 
     'next_prev_url' => base_url() . 'mycal/display/' 
    ); 

    $this->load->library('calendar', $conf); 
    echo $this->calendar->generate($year, $month); 
}