Я пытаюсь узнать Yii и посмотрел документацию Yii, но все равно не понимаю. Я до сих пор не знаю, как использовать CDataProvider на контроллере и в представлении, чтобы отобразить все сообщения в блоге, доступные в представлении. Кто-нибудь может посоветовать или привести пример на основе следующего:
ActionIndex в моем PostController:
public function actionIndex() { $posts = Post::model()->findAll(); $this->render('index', array('posts' => $posts)); ));
View, Index.php:
<div> <?php foreach ($post as $post): ?> <h2><?php echo $post['title']; ?></h2> <?php echo CHtml::decode($post['content']); ?> <?php endforeach; ?> </div>
Вместо того, чтобы делать выше, может ли кто-нибудь посоветовать, как использовать CDataProvider для генерации вместо этого?
Большое спасибо.
Лучшее, что я могу предложить, это использовать 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>
В основном в указательном действии контроллера мы создаем новый CActiveDataProvider, который предоставляет данные модели Post для нашего использования, и мы передаем этот dataprovider в индексный вид.
В представлении индекса мы используем виджет Zii CListView, который использует dataProvider, который мы передали в качестве данных для создания списка. Каждый элемент данных будет отображаться как закодированный в файле itemView, который мы передаем в качестве атрибута виджета. Этот файл itemView будет иметь доступ к объекту модели Post в переменной $ data.
Предлагаемое чтение: разработка Agile Web Application с 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); } ?>