2011-12-07 3 views
1

나는 PHP의 Yii 프레임 워크를 사용하고 있습니다. 내 시나리오는 여러 프로젝트가 있으며 모든 프로젝트에 게시물이 있습니다. 프로젝트의 경우 Clistview를 사용했으며이 컨트롤의 'itemView'에서 '_ post'라는 다른 페이지가 지정되었습니다. '_post'페이지에서 ClistView는 게시물 세부 정보를 표시하도록 지정됩니다.yii 부모 자식 Clistview 페이징 문제

하지만 문제는 게시물 세부 정보 Clistview에서 발생하고 하나의 게시물 세부 사항의 페이지 번호를 다음 페이지 번호로 변경하면 모든 게시물 세부 사항 clistview 페이지 번호가 변경됩니다.

또한 게시 세부 정보 'id'를 지정했지만 헛되지는 않았습니다. 프로젝트에 대

: 포스트 세부 사항에 대한

<?php 
$this->pageTitle=Yii::app()->name . ' - Project Post Details'; 
echo '<div class="listViewBorder">'; 
$this->widget('zii.widgets.CListView', 
       array(
        'dataProvider'=>$dataProvider, 
        'id'=>'projectListView', 
        'itemView'=>'_post', // refers to the partial view 
        'enablePagination'=>true, 
      )); 
echo '</div><br />' 
?> 

: 당신이 더 나은 해결책을 찾을 때까지

<?php 
echo '<h2>Project: '. CHTML::encode($data->title).' </h2>'; 
echo '<div class="listViewBorder">'; 
$this->widget('zii.widgets.CListView', 
       array(
        'dataProvider'=>$this->CallProjectPosts($data->id), 
        'id'=>'postListView'.$data->id, 
        'itemView'=>'_postDetail', 
        'enablePagination'=>true, 
      )); 
echo '</div>' 
?> 
+0

두보기의 코드를 모두 표시하십시오. – Jon

+3

질문을 편집하지 말고 주석에 게시하십시오 ... – matino

+0

+1, 좋은 질문입니다. 내부 clistviews에 대한 사용자 지정 호출기를 만들거나 yiilistview.js를 무시하고 다시 정의해야 할 수도 있습니다. 내부 clistview에 대한 데이터 공급자, 확실하지 않습니다. –

답변

1

이 내가 마침내 작동 됐는지, 그것은 작동합니다.
나는 project_id가 귀하의 게시물 테이블에있는 외래 키라고 가정합니다.
프로젝트 모델에서 필요한 HAS_MANY 관계를 생성 (gii)하면 CallProjectPosts 메서드를 호출하지 않고 프로젝트의 게시물에 쉽게 액세스 할 수 있습니다. 경우 보 겠지만

<?php 
$this->pageTitle=Yii::app()->name . ' - Project Post Details'; 
echo '<div class="listViewBorder">'; 
$this->widget('zii.widgets.CListView', 
      array(
       'dataProvider'=>$dataProvider, 
       'id'=>'projectListView', 
       'itemView'=>'_post', // refers to the partial view 
       'enablePagination'=>true, 
       'ajaxUpdate'=>false 
     ) 
); 
echo '</div><br />' 
?> 

, 내가 프로젝트 목록보기 비활성화 ajaxUpdate 있습니다 프로젝트 목록

<?php 
echo '<h2>Project: '. CHTML::encode($data->title).' </h2>'; 
echo '<div class="listViewBorder">'; 

$relatedPosts=new CArrayDataProvider($data->posts, // this is where the HAS_MANY relation comes into play 
     array(
      'pagination'=>array(
       'pageSize'=>1, // whatever your size was 
      ) 
     ) 
); 
$this->widget('zii.widgets.CListView', 
      array(
       'dataProvider'=>$relatedPosts, 
       'id'=>'postListView'.$data->id, 
       'itemView'=>'_postDetail', 
       'enablePagination'=>true, 
      )); 
echo '</div>' 
?> 

:

그래서 포스트보기 (_post.php)를 수정 이 기능을 사용하면 솔루션이 작동하지 않으므로 아약스를 통해 프로젝트 목록을 표시/업데이트하는 것이 필요하다면 현재 작동하지 않습니다. 현재 프로젝트 게시물 만 아약스를 통해 업데이트됩니다.
희망이 도움이됩니다.

+0

MVC 모델을 따르려고했습니다. 기본적으로 "CallProjectPosts"메소드는 PostController에 명시되어 있는데,이 메소드는 몇 가지 기준에 따라 모델 메소드 "getProjectPosts ($ id)"를 추가로 호출합니다. 그리고 물론 프로젝트 ClistView는 프로젝트 레벨에서 페이징을 위해 아약스를 사용합니다. 현재 상황은 yii 프레임 워크에서 지금까지 처리되지 않는다고 생각합니다. 솔루션을 얻을 수 없다면 마지막으로 기능 구조를 바꿀 것입니다. –

+0

충분하다. 그러나 프로젝트 모델과 포스트 모델이 관련되어 있다면, 프로젝트는 그 관계를 가지며 ** 추가 기준 **을 지정하여 그 관계를 사용할 수있다. 나는 이것에 익숙하지 않기 때문에, 그 관계를 사용하는 것이 mvc를 위반하는지 아닌지는 잘 모르겠습니다. 기본적으로 사후 모델을 호출 할 필요가 없습니다. 릴레이션을 사용할 때 내부적으로 발생합니다. 아약스에 관해서는 프로젝트보기에서만 프로젝트를 표시하고 있다면 아약스가없는 다음 페이지를 얻는 것이 좋습니다. 게시물 만 아약스를 통해 전달됩니다. 스택 오버플로의 질문/대답에 대한 의견과 비슷합니다. –

+0

.. 질문은 아약스없이로드되지만 의견은 있습니다. 그냥 내 생각을 공유 :). –