Codeigniter日历库教程更新

时间:2011-12-13 18:37:05

标签: codeigniter

跟随: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错误

  
     

严重性:警告

     

消息:Mycal :: display()缺少参数1

     

文件名:controllers / mycal.php

     

行号:4遇到PHP错误

     

严重性:警告

     

消息:Mycal :: display()缺少参数2

     

文件名:controllers / mycal.php

     

行号:4遇到PHP错误

     

严重性:注意

     

消息:未定义的变量:年

     

文件名:controllers / mycal.php

     

行号:16遇到PHP错误

     

严重性:注意

     

消息:未定义的变量:月

     

文件名:controllers / 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的最佳实践?

2 个答案:

答案 0 :(得分:1)

调用display函数时,$year$month将被设置为URI段(或null)。此处不需要$this->uri->segment来电。

同样echo略快于printaccording 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);
}

答案 1 :(得分:1)

建立Rocket的答案,如果未在网址中传递,则需要设置年份和月份。

通过执行$year = null, $month = null作为参数,这意味着如果没有传递参数,$ year将等于null,$ month将等于null,但如果参数在url中传递,$ year将等于第一个参数和$ month将等于下一个参数。

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);
}