yii父子Clistview分页问题

时间:2011-12-07 14:28:38

标签: php yii

我正在使用PHP的Yii框架。我的方案是我有多个项目,所有项目都有帖子。对于我使用Clistview的项目,在此控件的“itemView”中,另一个页面被指定为名为“_post”。在'_post'页面中,再次指定ClistView用于显示帖子详细信息。

但问题是在帖子详细信息中发生分页时项目的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>'
?>

1 个答案:

答案 0 :(得分:1)

这就是我最终实现它的方式,它会一直有效,直到你找到更好的解决方案 我假设project_id是你的帖子表中的外键。
这将在您的项目模型中生成(使用gii)必要的HAS_MANY关系,这反过来使我们可以轻松访问项目的帖子,而无需调用CallProjectPosts方法。

所以修改你的帖子视图(_post.php):

<?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>'
?>

对于项目列表:

<?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,如果已启用,则解决方案将无效,因此如果您的要求是通过ajax显示/更新项目列表,那么这将不起作用,目前只有项目帖子通过ajax更新 希望这会有所帮助。