yiiページングチュートリアル

6713 ワード

次の会社用のフレームワークはyiiです.ここ数日、関連するチュートリアルを見て、今日はページングチュートリアルを書いて、最後にtpのページングもyiiに統合しました.個人的にはyiiのページングにはtp用の使い勝手がないと思っていますから.
トップページでは、modelsディレクトリにAuthを作成します.phpのモデルファイル、中に書き込みます
class Auth extends CActiveRecord {

    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public function tableName() {
        return '{{auth}}';
    }


}

次にcontrollersディレクトリにIndexControllerを作成する.phpの制御ファイル、中に書き込みます
class IndexController extends Controller {

    public function actionList() {

        $criteria = new CDbCriteria();
        $criteria->order = 'a_id desc';
        $count = Auth::model()->count($criteria);
        $page = new CPagination($count);
        $page->pageSize = 10;
        $page->applyLimit($criteria);
        $auth = Auth::model()->findAll($criteria);
        $this->renderPartial('auth', array('page' => $page, 'list' => $auth));

    }

    public function actionList1() {

        $p = isset($_GET['page']) ? $_GET['page'] : 0;

        $criteria = new CDbCriteria();
        $criteria->select = "a_id,a_nickname";
        $criteria->condition='';
        $criteria->limit = 10;
        $criteria->offset =  $p == 0 ? 0 : (($p-1)*10);
        $criteria->order = 'a_id desc';
        $auth = Auth::model()->findAll($criteria);

        $count = Auth::model()->count($criteria);
        $page = new CPagination($count);
        $page->pageSize = 10;
        $page->applyLimit($criteria);
        $this->renderPartial('auth', array('page' => $page, 'list' => $auth));
    }

}

ここでactionListとactionList 1は$criteriaの2つの書き方である
最後にviewsディレクトリにindexディレクトリを追加し、indexディレクトリにauthを追加する.phpファイル、中に書き込み

    $value){ ?>
widget('CLinkPager',array( 'firstPageLabel'=>' ', 'lastPageLabel'=>' ', 'prevPageLabel'=>' ', 'nextPageLabel'=>' ', 'pages'=>$page, 'maxButtonCount'=>13, ) ); ?>

上はyiiが持参した書き方で、ここでtpのページングクラスを導入して、簡単な変更をして、手順は以下の通りです.
まず、tpのAjaxPage.class.phpとPage.class.phpはyiiのプロジェクトディレクトリの下のprotected/componentsの下に移動し、ファイル名の分布をAjaxPageに変更する.phpとPage.php、それぞれ2つのファイルに入って、中のCの方法を取り除いて、つまりこの1つです
$this->varPage = C('VAR_PAGE') ? C('VAR_PAGE') : 'p' ;

  

$this->varPage = 'p' ;

変更が完了すると、yiiは起動時に自動的にロードされるため、この2つのファイルを導入する必要はありません.具体的にはprotected/config.php/main.phpの構成における
// autoloading model and component classes
    'import'=>array(
        'application.models.*',
        'application.components.*',
    ),

次にprotected/config.php/ディレクトリにcommonを新規作成します.phpファイル、このファイルはいくつかのプロジェクトの公共関数を置いて、tpに詳しい友达はtpにも公共関数ファイルがあることを知っているはずで、とても使いやすくて、ここで参考にして、yiiもあるでしょう、今のところまだ発見していません.ファイルへの書き込み
//         
function getListByPage($model, $select = '*', $condition = '', $limit = 10, $order = '', $p = '', $ajax = 0) {

    //      
    $_GET['p'] = isset($_GET['p']) ? intval($_GET['p']) : 1;
    $limit = intval($limit) > 0 ? intval($limit) : 10;

    if ($p) {
        $_GET['p'] = intval($p) ? intval($p) : 1;
    }

    $criteria = new CDbCriteria();

    $count = $model->count($criteria);
    if ($ajax) {
        $Page = new AjaxPage($count, $limit);
    } else {
        $Page = new Page($count, $limit);
    }

    $result['page'] = trim($Page->show());

    $criteria->select = $select;
    $criteria->condition = $condition;
    $criteria->limit = $Page->listRows;
    $criteria->offset =  $Page->firstRow;
    $criteria->order = $order;
    $list = $model->findAll($criteria);

    $result['list'] = $list;
    return $result;
}

このファイルはもうすぐ導入されます.そうしないとロードできません.プロジェクトのエントリファイルindexでいいです.phpに独自に導入され、コードは以下の通りです.
require_once(dirname($config) . '/common.php');

最後にindexController.phpでページ化された場所でこのメソッドを呼び出す
public function actionPage() {
        $model = Auth::model();
        $info = getListByPage($model);
        $this->renderPartial('page', array('info' => $info));
}

このメソッドをカプセル化し、後でページングを呼び出すときに、いくつかのパラメータを渡すだけで、簡単で迅速です.pageでphpページで呼び出す

    $value){ ?>

同時にfindAllを利用してページングのクエリー効果を実現することもでき、コードは以下の通りである.
function getListByPage($model, $select = '*', $condition = '', $limit = 10, $order = '', $p = '', $ajax = 0) {

    if (!$model) {
        return array();;
    }

    //      
    $_GET['p'] = isset($_GET['p']) ? intval($_GET['p']) : 1;
    $limit = intval($limit) > 0 ? intval($limit) : 10;

    if ($p) {
        $_GET['p'] = intval($p) ? intval($p) : 1;
    }

    $count = $model->count();
    if ($ajax) {
        $Page = new AjaxPage($count, $limit);
    } else {
        $Page = new Page($count, $limit);
    }

    $result['page'] = trim($Page->show());
    $result['list'] = $model->findAll(array(
        'select'        => $select,
        'condition'     => $condition,
        'order'         => $order,
        'limit'         => $Page->listRows,
        'offset'         => $Page->firstRow,
    ));

    return $result;
}

ci、tpの2つのフレームワークを経験した後、yiiの進度がずっと速いことを見ます.あるフレームワークを把握することは、mvcの使用規則を把握することにほかならないと思います.model層でデータベースメソッドを呼び出してデータを取得し、controller層でmodel層データを呼び出して論理処理を行い、view層に伝えます.同時にフレームワークのテンプレート操作、フォーム操作、ページング操作、ファイルアップロード操作、cookieとsession操作、url呼び出しを理解します.常用操作を理解してから、ソースコードを見て、フレームワークの違いと共通性を比較してまとめ、自分の技術を昇華させ、後で常用開発は言うまでもなく、大きな給料をもらうのもそうです.