3

こんにちは、私の質問を読んでくれてありがとう。

ユーザーがカレンダーにデータを入力できるイベント カレンダーを作成しようとしています。

同じページに 2 か月のカレンダーを表示するにはどうすればよいですか (たとえば、2012 年 12 月と 2013 年 1 月をリンクではなく並べて表示します)。

http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-the-calendar-library/からコードを取得しました

どんな助けでも大歓迎です。=)

//CONTROLLER

class Mycal extends CI_Controller {

public function index() {
    $this->display();
}

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

    if (!$year) {
        $year = date('Y');
    }
    if (!$month) {
        $month = date('m');
    }

    $this->load->model('Mycal_model');

    if($day = $this->input->post('day')){
        $this->Mycal_model->add_calendar_data(
            "$year-$month-$day",
            $this->input->post('data')
        );
    }

    $data['calendar'] = $this->Mycal_model->generate($year, $month);

    $this->load->view('mycal_view', $data); 
}

}

//モデル

class Mycal_model extends CI_Model{

function get_calendar_data($year, $month){

    $query = $this->db->select('date, data')->from('calendar')
        ->like('date', "$year-$month", 'after')->get();

    $cal_data = array();

    foreach ($query->result() as $row){
        $cal_data[substr($row->date,8,2)] = $row->data;
    }

    return $cal_data;
}

function add_calendar_data($date, $data){

    if($this->db->select('date')->from('calendar')
        ->where('date', $date)->count_all_results()) {

        $this->db->where('date', $date)->update('calendar', array(
            'date'=>$date,
            'data'=>$data
        ));

    }else{

        $this->db->insert('calendar', array(
            'date'=>$date,
            'data'=>$data
        ));
    }
}

function generate ($year, $month){

    $this->load->library('calendar', $this->conf);
    $cal_data = $this->get_calendar_data($year, $month);    
    return $this->calendar->generate($year, $month, $cal_data)      
}

function generate ($year, $month){
// to generate 2nd calendar for the next month?     
    $this->load->library('calendar', $this->conf);
    $cal_data = $this->get_calendar_data($year, $month+1);  
    return $this->calendar->generate($year, $month+1, $cal_data)        
}

//見る

<?php echo $calendar; ?>

// to generate 2nd calendar for the next month? 
<?php echo $calendar2; ?>

<script type="text/javascript">
$(document).ready(function() {
    $('.calendar .day').click(function() {
        day_num = $(this).find('.day_num').html();
        day_data = prompt('Enter Stuff', $(this).find('.content').html());

        if(day_data !=null){

            $.ajax({
                url: window.location,
                type: 'POST',
                data: {
                    day: day_num,
                    data: day_data
                },
                success: function(msg){
                    location.reload();
                }
            });

        }

    });
});
</script>
4

1 に答える 1

1

私は以前に ci カレンダーを使用したことがありませんが、ページに 2 か月を取得するのは非常に簡単です。

次のようなカレンダー用の 2 ページ レイアウトを作成する必要があります。

two_page_calendar.php を見る

<div id="month1">
<?=$month1; ?>
</div>

<div id="month2">
<?=$month2; ?>
</div>

次に、表示関数を変更して、表示をデータとして返します。例えば

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

    if (!$year) {
        $year = date('Y');
    }
    if (!$month) {
        $month = date('m');
    }

    $this->load->model('Mycal_model');

    if($day = $this->input->post('day')){
        $this->Mycal_model->add_calendar_data(
            "$year-$month-$day",
            $this->input->post('data')
        );
    }

    $data['calendar'] = $this->Mycal_model->generate($year, $month);

    $calendar_view = $this->load->view('mycal_view', $data, true);
    return $calendar_view;
}

これで、各月のビルド表示を呼び出して、結合ビューにロードできます。

public function index() {
    $month2_year = date("Y",strtotime("+1 month"));
    $month2_month = date("m",strtotime("+1 month"));
    $cal_data['month1'] = $this->build_display();
    $cal_data['month2'] = $this->build_display($month2_year, $month2_month);
    $this->load->view('two_page_calendar', $cal_data);
}

私はこれを試していませんが、動作するはずです。カレンダーのページネーションなど、いくつかの方法を変更して適切に動作させる必要があります。

モデル内でそのようなコードを複製することは絶対に避けてください。どのクラスにも同じ名前のメソッドを 2 つ持つことは絶対にできません (重複生成メソッドの削除)。年月を問わず再利用可能

于 2012-12-28T16:32:33.140 に答える