Как конвертировать для использования Yii CDataProvider на вид? - PullRequest
6 голосов
/ 10 февраля 2012

Я пытаюсь выучить Yii и посмотрел документацию по Yii, но все еще не понимаю. Я до сих пор не знаю, как использовать CDataProvider на контроллере и в представлении для отображения всех сообщений блога, доступных в представлении. Может ли кто-нибудь, пожалуйста, посоветовать или привести пример, основанный на следующем:

ActionIndex в моем PostController:

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 для генерации?

Большое спасибо.

1 Ответ

17 голосов
/ 10 февраля 2012

Лучшее, что я могу предложить, это использовать 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 : этот файл будет отображать каждое сообщение и передается как атрибут виджета CListView (, а именно 'itemView'=>'_post') в представлении index.php.

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

Объяснение * * 1023 В основном в действии index контроллера мы создаем новый CActiveDataProvider, который предоставляет данные модели Post для нашего использования, и мы передаем этот поставщик данных в представление index.
В В индексном представлении мы используем Zii виджет CListView, который использует dataProvider, который мы передали в качестве данных для генерации списка. Каждый элемент данных будет отображаться как закодированный в файле itemView, который мы передаем в качестве атрибута виджету. Этот файл itemView будет иметь доступ к объекту модели Post в переменной $ data. Рекомендуемое чтение: разработка гибких веб-приложений с использованием Yii 1.1 и PHP 5
Очень хорошая книга для начинающих Yii. Она указана на главной странице Yii. Редактировать:

По запросу без CListView

index.php

<?php
 $dataArray = $dataProvider->getData();
foreach ($dataArray as $data){
echo CHtml::encode($data->title);
echo CHtml::encode($data->content);
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...