Yii 에서 CGridView 관련 표 검색 정렬 방법 인 스 턴 스 상세 설명

6191 단어 YiiCGridView방법.
이 글 은 예 를 들 어 Yii 에서 CGridView 관련 표 검색 정렬 방법 을 설명 한다.모두 에 게 참고 하도록 공유 하 다.구체 적 인 실현 방법 은 다음 과 같다.
Yii CGridView 관련 표 에서 검색 순 서 를 정 하 는 방법 이 좀 복잡 합 니 다.오늘 은 외국인 이 쓴 게임 을 봤 습 니 다.다음은 여러분 과 공유 하 는 것 을 정리 해 보 겠 습 니 다.여러분 의 Yii 프레임 워 크 학습 에 도움 이 될 것 이 라 고 믿 습 니 다.
우선,블 로그 demo 의 protected models Comment.php 를 확인 하고 Comment 모델 에 search 방법 이 있 는 지 확인 하 세 요.없 으 면 gii 로 생 성 하 세 요.제 가 다운로드 한 블 로그 demo 에는 없습니다.
그리고 코드 를 쓸 시간 이 되 었 습 니 다.CommentController 부터 actionList 를 추가 합 니 다.
public function actionList()
{
    $model=new Comment('search');
    $model->unsetAttributes();
    if(isset($_GET['Comment']))
        $model->attributes=$_GET['Comment'];
 
    $this->render('list',array(
        'model'=>$model,
    ));
}
보아하니 별 것 아 닌 것 같 습 니 다.당신 이 gii 로 만 든 crud 코드 와 같 습 니 다.이제 view 를 만 들 겠 습 니 다./protected/views/comment/디 렉 터 리 에 list.php 를 만 들 고 다음 코드 를 붙 여 넣 겠 습 니 다.
breadcrumbs=array(
    'Comments',
);
?>
 
<h1>Manage Comments</h1>
 
<?php $this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns' => array(
                'content',
                'post.title',
                'status',
                'author'
        ),
));
?>
Comment List
이것 은 기본 적 인 CGridView 로 댓 글 의'content','status'and'author',그리고 글 의 제목 만 표시 합 니 다.이 list 에 글 의 제목 을 추가 하려 면 post.title 만 추가 하면 됩 니 다.
'columns'=>array(
    'content',
    'post.title',
    'status',
    'author',
),
지금 아래 페이지 를 방문 하면 글 의 제목 이 확실히 나타 나 는 것 을 발견 할 수 있 습 니 다.

질문:
이 페이지 를 자세히 보면 글 제목 을 검색 할 수 없고 글 제목 에 따라 정렬 할 수 없다 는 것 을 알 게 될 것 입 니 다.이것 은 CGridView 가 주어진 column name 에서',즉 post.title 의 점 을 발 견 했 기 때 문 입 니 다.점 이 있 으 면 검색 상 자 를 만 들 지 않 습 니 다.
해결 방안:
이 문 제 를 해결 하려 면 우 리 는 힘 을 좀 써 야 한다.우선 우 리 는 Commen 모델 에 getter 와 setter 를 추가 해 야 한다.예 를 들 어 이렇게 써 야 한다.
private $_postTitle = null;
public function getPostTitle()
{
    if ($this->_postTitle === null && $this->post !== null)
    {
        $this->_postTitle = $this->post->title;
    }
    return $this->_postTitle;
}
public function setPostTitle($value)
{
    $this->_postTitle = $value;
}
다음은 이 속성 을 rules 함수 에 추가 합 니 다:
public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        array('content, author, email', 'required'),
        array('author, email, url', 'length', 'max'=>128),
        array('email','email'),
        array('url','url')
 
        array('content, postTitle, status, author', 'safe', 'on'=>'search'),
    );
}
이것 도 부족 합 니 다.가장 바 꿔 야 할 것 은 우리 의 search 함수 입 니 다.우선 criteria 를 추가 해 야 합 니 다.
$criteria=new CDbCriteria;
$criteria->with = "post"; // post
 
$criteria->compare('t.content',$this->content,true);
$criteria->compare('t.status',$this->status);
$criteria->compare('t.author',$this->author,true);
$criteria->compare('post.title', $this->postTitle,true);
그리고 정렬 을 추가 합 니 다:
$sort = new CSort();
$sort->attributes = array(
    'defaultOrder'=>'t.create_time DESC',
    'content'=>array(
        'asc'=>'t.content',
        'desc'=>'t.content desc',
    ),
    'status'=>array(
        'asc'=>'t.status',
        'desc'=>'t.status desc',
    ),
    'author'=>array(
        'asc'=>'t.author',
        'desc'=>'t.author desc',
    ),
    'postTitle'=>array(
        'asc'=>'post.title',
        'desc'=>'post.title desc',
    ),
);
너 는 내 가 완전한'tablename'.'columnname'문법 을 사용 하고 있다 는 것 을 알 았 을 지도 모른다.내 가 이렇게 하 는 이 유 는 my sql 에서'column is ambigious error'를 던 지지 않도록 하기 위해 서 이다.
이 모든 것 이 정상적으로 작 동 하도록 하기 위해 서,우 리 는 CSort 실례 와 CDbCriteria 실례 를 CActive DataProvider 에 전달 해 야 합 니 다.
return new CActiveDataProvider('Comment', array(
    'criteria'=>$criteria,
    'sort'=>$sort
));

return new CActiveDataProvider('Comment', array(
    'criteria'=>$criteria,
    'sort'=>$sort
));

지금 우리 가 해 야 할 일 은 CGridView 에 표시 할 속성 을 표시 할 수 있 도록 view 를 수정 하 는 것 입 니 다.
'columns'=>array(
    'content',
    'postTitle',
    'status',
    'author',
),
새로 고침 하면 될 것 같 습 니 다.효 과 는 다음 그림 과 같 습 니 다.

본 고 는 Yii 프레임 워 크 를 기반 으로 한 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기