Yii - how to retrieve model data into a layout page?

后端 未结 2 1820
夕颜
夕颜 2020-12-09 06:17

I wish to list some Categories name on my layout main.php page. Since the layout doesn\'t have any associated controller or model, I wish to create a static method like this

相关标签:
2条回答
  • 2020-12-09 06:56

    May be this answer can help you. First you must create a Widget so you can use it more effectively.

    First Create a new widget. Let say the name is CategoryWidget. Put this widget under components directory protected/components.

    class CategoryWidget extends CWidget {
    
        public function run() {
            $models = Category::model()->findAll();
    
            $this->render('category', array(
                'models'=>$models   
            ));
        }
    }
    

    Then create a view for this widget. The file name is category.php. Put it under protected/components/views

    category.php

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

    Then call this widget from your main layout.

    main.php

    // your code ...
    
    <?php $this->widget('CategoryWidget') ?>
    
    ...
    
    0 讨论(0)
  • 2020-12-09 07:15

    If I'm not mistaken, you can also pass any variable available in a view, on to the layout. You just do it from the view that has your variable. This is the catch: you need to declare the variable which will receive your value, in the controller, like this:

    <?php
    
    class MyController extends Controller
    {
    
        public $myvariable;
    

    After this, you will assign your model or whatever to this public variable inside your view, like this:

    $this->myvariable = $modeldata;
    

    After you have assigned your model data to controller's public attribute, you can easily display it inside your layout e.g.

    echo $this->myvariable;
    

    Yii already does this by assigning menu items to column2 sidebar menu, from view, like this:

    $this->menu=array(
        array('label'=>'List Item', 'url'=>array('index')),
        array('label'=>'Manage Item', 'url'=>array('admin')),
    );
    

    You can see it in all create/update views that gii crud creates.

    0 讨论(0)
提交回复
热议问题