Yii 페이징 사용법에 대한 자세한 설명

WBOY
풀어 주다: 2016-05-16 20:29:08
원래의
1095명이 탐색했습니다.

아래에는 Yii에서 일반적으로 사용되는 몇 가지 Yii 페이징 방법과 예제 코드가 있습니다. 여기에는 일반적인 페이징과 Ajax 페이징이 모두에게 도움이 되기를 바랍니다.

첫 번째 유형: 객체 형태의 데이터 페이징을 위한 CListView 페이징

컨트롤러:

코드 복사 코드는 다음과 같습니다.
public function actionAjax() {
         $criteria = 새 CDbCriteria()
//$criteria->order = '뉴스_ID DESC'
           $criteria->조건 = 'user_id = 1'

         $dataProvider = new CActiveDataProvider('뉴스', array(
'페이지 매김' => 배열(
                              'pageSize' => Yii::app()->params['pagesize'],
                                              'pageVar' => ),
'기준' => $기준,
))


           $this->render('보기', 배열(
              'dataProvider' => $dataProvider,
))
}
보기:

코드 복사 코드는 다음과 같습니다.
$this->widget('zii.widgets.CListView', 배열(
'dataProvider' => $dataProvider, //데이터
'itemView' => '_view', //표시된 템플릿
'id' => Yii::app()->컨트롤러->id,
'itemsTagName' => 'ul',
'ajaxVar' => '', //기본값은 페이지 또는 ajax입니다. 이를 제거하면 URL이 더 간결해집니다.
'htmlOptions' => array('class' => Yii::app()->controller->id),
'loadingCssClass' => '로딩', //기본값은 목록 보기 로딩
//'템플릿' => '{summary}{sorter}{items}{pager}',//표시 순서
//'ajaxUpdate' => false, //ajax 페이징 false인지 페이징에 표시된 컨테이너 ID인지
//'beforeAjaxUpdate' => 'before_ajax_update', //common.js에서 콜백 함수가 완성되었습니다
//'afterAjaxUpdate' => 'after_ajax_update',
'빈텍스트' => '
아직 데이터가 없습니다!
', //데이터가 없을 때 내용 표시
'pagerCssClass' => '페이지 매김', //페이지 매김 클래스
'페이저' => 배열(
'selectedPageCssClass' => 'active', //현재 페이지의 클래스
'hiddenPageCssClass' => 'disabled', //페이지 클래스 비활성화
                                                     '헤더' => ~
'htmlOptions' => array('class' => ''),
'firstPageLabel' => '홈',
'nextPageLabel' => '다음 페이지',
'prevPageLabel' => '이전 페이지',
'lastPageLabel' => '마지막 페이지',
),
))
?>


두 번째 유형: 배열 형태의 페이징 데이터를 위한 CLinkPager

컨트롤러:


코드 복사 코드는 다음과 같습니다.public function actionIndex() {
         $criteria = 새 CDbCriteria()
          $criteria->order = '뉴스_ID DESC'
           $criteria->조건 = 'user_id = 1'

          $count = 뉴스::모델()->count($criteria)
          $pages = 새로운 CPagination($count)

$페이지->페이지 크기 = 10;            $pages->applyLimit($criteria)
$list = 뉴스::model()->findAll($criteria)

            $this->render('index', array('list' => $list, 'pages' => $pages))
}

보기:

코드 복사 코드는 다음과 같습니다.
    <리>                                                                                       
    뉴스_제목 ?>          

    > ~
             


$this--->widget('CLinkPager', 배열(
         '페이지' => $페이지,
           'selectedPageCssClass' => '활성', //현재 페이지의 클래스
'hiddenPageCssClass' => 'disabled', //페이지 클래스 비활성화
           'header' => '', //페이지 이전에 표시되는 콘텐츠
          'maxButtonCount' => 10, //페이지 매기기 횟수 표시
'htmlOptions' => array('class' => ''),
'firstPageLabel' => '홈페이지',
'nextPageLabel' => '다음 페이지',
'prevPageLabel' => '이전 페이지',
'lastPageLabel' => '마지막 페이지',
)
);
?>




세 번째 유형: DAO는 페이징을 구현합니다.


컨트롤러 레이어:




코드 복사

코드는 다음과 같습니다.

공용 함수 actionReport() { $sql = "td_delivery

에서 송금 날짜, 합계(비율) 합계 선택 송금 날짜별로 그룹화

송금 날짜순으로 주문 desc";
$criteria=새 CDbCriteria();

$result = Yii::app()->db->createCommand($sql)->query(); $pages=new CPagination($result->rowCount); $페이지->pageSize=2 $pages->applyLimit($criteria) ; $result=Yii::app()->db->createCommand($sql." LIMIT :offset,:limit"); $result->bindValue(':offset', $pages->currentPage*$pages->pageSize) $result->bindValue(':limit', $pages->pageSize) $posts=$result->query();
$this->render('보고서',배열(
'게시물'=>$posts,
'페이지'=>$페이지,
));
}

레이어 보기:




코드 복사


코드는 다음과 같습니다.

$row["sumrate"]));?>
?>
//페이징 위젯 코드:
$this->widget('CLinkPager',array('pages'=>$pages));

모델 레이어:




코드 복사
코드는 다음과 같습니다.

/**
* @var 문자열 속성 : 일일 배송비(통계용)
* 새로 추가된 필드에 대한 선언이 필요합니다
*/
공개 $dayrate;

/*
* 통계기능 : 일일 배송비 통계
*/
공개 함수 통계()
{
$criteria = 새 CDbCriteria;
$criteria->select = '송금일, 합계(비율) AS 일률';
$criteria->group = '송금일';
return new CActiveDataProvider(get_class($this), array(
'기준'=>$기준,
'정렬'=>배열(
// 헤더에서 클릭 정렬을 위한 필드를 설정합니다.
'속성'=>배열(
'송금',
'dayrate'=>배열(
'asc'=>'일요율',
'desc'=>'일요율 DESC',
)
),
'defaultOrder'=>'송금 날짜 설명',
),
))
}


컨트롤러 레이어:
코드 복사 코드는 다음과 같습니다.
/**
* 운송장 통계 기능:
* 날짜별 통계
*/
공개 함수 actionReport()
{
$model=new Delivery('통계');
$model->unsetAttributes(); // 기본값 지우기

$this->render('보고서',array(
'모델'=>$모델,
));
}

레이어 보기:
코드 복사 코드는 다음과 같습니다.
widget('zii.widgets .gridView', 배열(
'id'=>'delivery-grid',
'dataProvider'=>$model->통계(),
'필터'=>$모델,
'열'=>배열(
'송금',
'일요율',
배열(
'class'=>'CButtonColumn',
),
),
));
?>

장점: 내장 스타일을 사용할 수 있습니다. 단점: 효율성이 약간 떨어집니다.

다섯 번째 유형: Ajax 페이징

YII에서 Ajax 페이지 매김을 구현하는 방법은 여러 가지가 있습니다. 보다 전통적인 방법은 뷰에서 JS를 작성하여 구현하는 것입니다.
현재 보이는 js의 대략적인 로직은 다음과 같습니다

코드 복사 코드는 다음과 같습니다.
$('#listview .yiiPager a').live('click ',함수 (){
          $.ajax({
​​​​​​ url:$(this).attr('href'),
                성공:기능(html){
                      $('#listview').html(html);
            }
});
          false 반환;//태그 차단
});

그런 다음 컨트롤러에서 ajax 요청을 결정한 다음 renderPartial 메서드를 사용하여 부분 목록 보기를 렌더링합니다. 그런 다음 부분 보기는 보기의 ajax 메서드에 의해 부분적으로 새로 고쳐진 div에 채워집니다. 컨트롤러의 일반적인 논리는 다음과 같습니다.
코드 복사 코드는 다음과 같습니다.
if (Yii::app()->request-> isAjaxRequest) {
$this->renderPartial('_comments',array(
'모델' =>$모델,
'comments' => $comments,//foreach는 부분 보기에서 각 데이터를 가져옵니다
'페이지' => $페이지,
));
Yii::app()->end();
}

나중에 나는 YII의 CListview가 페이징을 캡슐화하고 foreach가 목록을 표시하며 데이터 정렬을 지원한다는 것을 알았습니다. 자세한 내용은 YII API 매뉴얼에서 확인할 수 있습니다. CListview는 기본적으로 ajax로 페이지를 매깁니다.

컨트롤러 내:

코드 복사 코드는 다음과 같습니다.
$criteria = 새 CDbCriteria();
$criteria->order = ''create_time` DESC';
$dataProvider = new CActiveDataProvider('설명', array(
'페이지 매김'=>배열(
'pageSize'=>Yii::app()->params['commentsPerPage'],//검색할 데이터 수를 결정하기 위해 페이징 항목 수를 설정
),
'기준'=>$기준,
));
$this->render('댓글',array(
          '모델' => $모델,
           'dataProvider' => $dataProvider,
));

그런 다음 보기:
코드 복사 코드는 다음과 같습니다.
widget('zii.widgets .CListView' , 배열(
'dataProvider'=>$dataProvider,
'itemView'=>'_comments',
//'ajaxUpdate'=> false,//이렇게 하면 AJAX 페이지 넘김이 발생하지 않습니다
'pager' => array(//pager 구성 정보입니다. 기본값은 array('class'=>'CLinkPager')입니다. 직접 구성할 수도 있습니다
'nextPageLabel' => '다음 페이지 »',
'prevPageLabel' => '' 이전 페이지'
),
//여기에서 몇 가지 정렬 규칙을 구성할 수도 있습니다. 자세한 내용은
매뉴얼을 참조하세요. ));
?>

이는 매우 편리한 Ajax 페이징을 구현합니다.

이 기사가 Yii 프레임워크를 기반으로 PHP 프로그램을 설계하는 데 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿