【问题标题】:How to convert to use the Yii CDataProvider on view?如何转换为在视图上使用 Yii CDataProvider?
【发布时间】:2012-02-10 22:12:04
【问题描述】:

我正在努力学习 Yii,并查看了 Yii 文档,但仍然没有真正理解。我仍然不知道如何使用 Controller 和 View 上的 CDataProvider 来显示视图上所有可用的博客文章。任何人都可以根据以下内容提供建议或举例:

我的 PostController 中的 actionIndex:

public function actionIndex()
{
    $posts = Post::model()->findAll();

    $this->render('index', array('posts' => $posts));
));

视图,Index.php:

<div>
<?php foreach ($post as $post): ?>
<h2><?php echo $post['title']; ?></h2>
<?php echo CHtml::decode($post['content']); ?>
<?php endforeach; ?>
</div>

除了上面的操作,谁能告诉我如何使用 CDataProvider 来生成?

非常感谢。

【问题讨论】:

  • 我看到了这个yiiframework.com/doc/api/1.1/CListView 但是1)如何回显数据? 2) 是否可以将其显示在索引上,而不是创建另一个 _post,如 'itemView'=>'_post' 中所示?
  • 哦,我没有阅读此评论就发布了答案!你能告诉我为什么要直接回显数据吗?这显然是可能的,很快就会在我的答案中添加一些代码。
  • 答案已编辑,好的,您想要使用 clistview,但没有 itemView,这是不可能的,这不是 CListView 的工作方式。它是高度可定制的,相信我,整个外观可以彻底改变!
  • 如果你不知道,CDataProvider 是 yii 中其他数据提供者的抽象基类,即 CActiveDataProvider、CArrayDataProvider 和 CSqlDataProvider。
  • 如果我错了,请纠正我。我可以说,因为itemView,它就像让_view像一个小组件一样,你只需要将这个组件(如php include)插入索引页面以输出结果,并自定义个人_view 而不必影响索引页的任何其他部分?

标签: php yii


【解决方案1】:

我能建议的最好方法是在您的视图中使用CListView,在您的控制器中使用CActiveDataProvider。所以你的代码有点像这样:
控制者

public function actionIndex()
{
    $dataProvider = new CActiveDataProvider('Post');

    $this->render('index', array('dataProvider' => $dataProvider));
}

index.php

<?php
  $this->widget('zii.widgets.CListView', array(
  'dataProvider'=>$dataProvider,
  'itemView'=>'_post',   // refers to the partial view named '_post'
  // 'enablePagination'=>true   
   )
  );
?>

_post.php:此文件将显示每个帖子,并在您的 index.php 视图中作为小部件 CListView( 'itemView'=&gt;'_post') 的属性传递.

 <div class="post_title">
 <?php 
 // echo CHtml::encode($data->getAttributeLabel('title'));
 echo CHtml::encode($data->title);
 ?>
 </div>

 <br/><hr/>

 <div class="post_content">
 <?php 
 // echo CHtml::encode($data->getAttributeLabel('content'));
 echo CHtml::encode($data->content);
 ?>
 </div>

说明

基本上在控制器的索引操作中,我们正在创建一个新的 CActiveDataProvider,它提供 Post 模型的数据供我们使用,并且我们将此数据提供程序传递给索引视图。
在我们使用 Zii 小部件 CListView 的索引视图,它使用我们作为数据传递的 dataProvider 来生成列表。每个数据项将按照我们作为属性传递给小部件的 itemView 文件中的编码呈现。这个 itemView 文件可以访问 $data 变量中的 Post 模型对象。

推荐阅读:使用 Yii 1.1 和 PHP 5 进行敏捷 Web 应用程序开发
一本非常适合 Yii 初学者的书,在 Yii 主页列出。

编辑:

在没有 CListView 的情况下询问

index.php

<?php
 $dataArray = $dataProvider->getData();
foreach ($dataArray as $data){
echo CHtml::encode($data->title);
echo CHtml::encode($data->content);
}
?>

【讨论】:

  • 发表评论,以便澄清/讨论
  • 非常感谢您的解释。现在我对使用和不使用 Listview 以及来自 dataProvider 的数据回显结果有了更清晰的了解。
  • 如果没有clistview,如何提供分页链接?
  • @ASD 你试过CPagination 类吗?
  • @bool.dev 是的,我明白了。再澄清一点,我们可以使用这个分页链接和 jquerymobile 动态创建列表吗? (使用ajax调用)
猜你喜欢
  • 2014-07-07
  • 2014-06-26
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多