0

私はコードイグナイターを学んでいて、質問があります。コードはhttp://www.devshed.com/c/a/PHP/Paginating-Database-Records-with-the-Code-Igniter-PHP-Framework/からのものです。

以下は、モデルとコントローラです。$row を定義していませんが、それでも機能します。(原文に誤字があったので修正しました。)

Q1. $row はどこから来たのですか? Q2. get('users', 5, $rows); について説明していただけますか? ユーザーは SQL のテーブルである必要があり、制限は 5 ですが、なぜ $rows が必要なのですか?

モデルでは、

// get 5 rows at a time
function getUsers($row)
{
$query=$this->db->get('users',5,$row);
if($query->num_rows()>0)
{
// return result set as an associative array
return $query->result_array();
}
}

コントローラーで、

$data['users']=$this->Users_model->getUsers($row);

以下は完全なコードです。

Users_model.php

<?php
class Users_model extends Model
{
function Users()
{
    // call the Model constructor
    parent::Model();
    // load database class and connect to MySQL
    // $this->load->database();
}
function getAllUsers()
{
    $query=$this->db->get('users');
    if($query->num_rows()>0)
    {
        // return result set as an associative array
        return $query->result_array();
    }
}
function getUsersWhere($field,$param)
{
    $this->db->where($field,$param);
    $query=$this->db->get('users');
    // return result set as an associative array
    return $query->result_array();
}
// get 5 rows at a time
function getUsers($row)
{
    $query=$this->db->get('users',5,$row);
    if($query->num_rows()>0)
    {
        // return result set as an associative array
        return $query->result_array();
    }
}
// get total number of users
function getNumUsers()
{
    return $this->db->count_all('users');
}
}

以下はコントローラー用のusers.phpです。

<?php 
class Users extends Controller{
function Users(){
// load controller parent
parent::Controller();
// load 'Users' model
$this->load->model('Users_model');
}
function display($row=0){
// load pagination library
$this->load->library('pagination');
// set pagination parameters
$config['base_url']='http://127.0.0.1/ci_day4/index.php/users/display/';
$config['total_rows']=$this->Users_model->getNumUsers();
$config['per_page']='5';
$this->pagination->initialize($config);
// store data for being displayed on view file
$data['users']=$this->Users_model->getUsers($row);
$data['title']='Displaying user data';
$data['header']='User List';
$data['links']=$this->pagination->create_links();
// load 'testview' view
$this->load->view('users_view',$data);
}
}
4

1 に答える 1

1

$row は、コントローラの表示メソッドでデフォルト値が 0 のパラメータです。

2 番目と 3 番目のパラメーターは、制限とオフセットです (こちらを参照してください: http://codeigniter.com/user_guide/database/active_record.html )。したがって、2 番目のパラメーター (制限) は返される行数 (最大) を定義し、3 番目のパラメーター (オフセット) は結果セットのどの行から開始するかを定義します。たとえば、10 行あり、制限を 5 に設定した場合、オフセット 0 は最初の 5 行を返し、オフセット 5 は次の 5 (2 ページ目) 行を返します。

display メソッドへのパラメーターはアドレスから取得されます。これは /display/ の後のセグメントです (ここを参照してください: http://codeigniter.com/user_guide/general/controllers.html#passinguri )。

ああ、このフレームワークを教えてくれてありがとう。いいもののように思えます。誰かが私にそのようなことを尋ねてきました。今なら分かります ;)。

于 2009-09-24T06:42:57.907 に答える