Несколько моделей без таблицы отношений на одной странице в YII

Я новичок в YII. Я хочу спросить, у меня есть две модели с разными таблицами и никакого отношения. пример. Модельный пользователь и модельный продукт. поэтому в пользовательском контроллере мой код

public function actionIndex() {
$model= new Product;
$dataProvider=new CActiveDataProvider('User');
    $this->render('index',array(
        'dataProvider'=>$dataProvider,
    ));
$this->renderPartial('application.views.Product.view',array('model'=>$model));
}

Но запись не могу показать, только атрибутировать.

поэтому я могу показать запись пользователя и запись продукта на одной странице. В КИ я написал

$data['user']= $this->user->record();
$data['product']=$this->product->record();
$this->load->view('index',$data)

Итак, мой вопрос. как мне написать, чтобы отображать несколько моделей с несколькими таблицами и без связи друг с другом на одной странице в yii?


person Prabu Karana    schedule 21.11.2013    source источник


Ответы (2)


вы должны использовать renderPartial() внутри визуализированного представления, поскольку это задокументировано, рендер():

Отрисовывает представление с макетом.

Этот метод сначала вызывает renderPartial для визуализации представления (называемого представлением содержимого). Затем он отображает представление макета, которое может встраивать представление содержимого в соответствующем месте. В представлении макета к результату рендеринга представления содержимого можно получить доступ через переменную $content. В конце он вызывает processOutput для вставки сценариев и динамического содержимого, если они доступны.

public function actionIndex() {
$model= new Product;
$dataProvider=new CActiveDataProvider('User');

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

}

тогда на виду,

$this->renderPartial('application.views.Product.view',array('model'=>$model));
person Developerium    schedule 21.11.2013

(IDK this-> renderPartial работает, и я пытаюсь использовать ваш код, но появляется только одна запись, на самом деле у меня есть еще 1000 записей)

Я решил эту проблему с помощью двух разных методов рендеринга нескольких моделей с несколькими таблицами без связи.

Первый метод, который я использовал, — виджет.

создать виджет в папке компонентов

class ProductWidget extends CWidget {
public function run() {
$models =      Product::model()->findAll(array('condition'=>'product_token="A"'));
$this->render('category', array(
'models'=>$models   
    ));
}
}

А затем создайте вид для этого виджета в Components/View

<?php if($models != null): ?>
<ul>
<?php foreach($models as $model): ?>
<li><?php echo $model->product_token; ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>

И последнее в папке Views (layouts/column) я пишу это

<?php $this->widget('ProductWidget'); ?>

И для второго метода (функция actionIndex в пользовательском контроллере)

public function actionIndex() {
$models = Product::model()->findAll(array('condition'=>'Product_token="A"'))
$dataProvider=new CActiveDataProvider('User');
$this->render('index',array(
        'dataProvider'=>$dataProvider,
         'models' => $models,
));

И последний в поле зрения. (Просмотры/пользователи/индекс)

<?php foreach($models as $model):
echo $model->product_token;
endforeach;
?>

Я думаю, что второй метод лучше, вы можете добавить нумерацию страниц или что-то в этом роде.

person Prabu Karana    schedule 22.11.2013