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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Yii2 삭제 확인 대화 상자를 괄호로 설정합니다.가까스로 처음부터 부트스트랩이었는데, 삭제 확인 등에 사용된 그 OS 표준 대화 상자인 JSconfirm()도 더 멋있고 싶었다.그래서 Bootbox는 그것을 다시 쓴다. 프레임에서 찾아낸yii.js에 이렇게 쓰여 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.