Yii – как получить данные модели на страницу макета?

Я хочу указать список категорий на моей странице макета main.php. Поскольку в макете нет какого-либо связанного контроллера или модели, я хочу создать статический метод, подобный этому в модели категории:

public static function getHeaderModels() { // get all models here return $models; } 

а затем в основном макете

  • Замена функций mysql_ * с помощью PDO и подготовленных операторов
  • PHP x86 Как получить размер файла> 2 ГБ без внешней программы?
  • Выйти из HTML на PHP или использовать эхо? Что лучше?
  • Каков канонический способ определения командной строки и HTTP-исполнения скрипта PHP?
  • php json_encode () show null вместо текста
  • php date compare
  •  <?php $models = Category::getHeaderModels(); foreach($models as $model) { // .... } ?> 

    Мой вопрос очень простой: как я могу получить эти имена категорий из модели?

    Вот полная модель:

     class Category extends CActiveRecord { public static function model($className=__CLASS__) { return parent::model($className); } public function tableName() { return 'category'; } public function rules() { return array( array('parent_id', 'numerical', 'integerOnly' => true), array('name', 'length', 'max' => 255), array('id, parent_id, name', 'safe', 'on' => 'search'), ); } public function relations() { return array( 'users' => array(self::MANY_MANY, 'User', 'categories(category_id, user_id)'), ); } public function scopes() { return array( 'toplevel'=>array( 'condition' => 'parent_id IS NULL' ), ); } public function attributeLabels() { $id = Yii::t('trans', 'ID'); $parentId = Yii::t('trans', 'Parent'); $name = Yii::t('trans', 'Name'); return array( 'id' => $id, 'parent_id' => $parentId, 'name' => $name, ); } public function search() { $criteria = new CDbCriteria; $criteria->compare('id', $this->id); $criteria->compare('parent_id', $this->parent_id); $criteria->compare('name', $this->name, true); return new CActiveDataProvider(get_class($this), array( 'criteria' => $criteria, )); } public static function getHeaderModels() { //what sintax should I use to retrieve the models here ?  return $models; } 

  • Загрузка нескольких файлов в Codeigniter
  • HTML Element Array, name = "something " или name = "something"?
  • Можете ли вы «скомпилировать» PHP-код?
  • Устаревший: функция split () устарела. Как переписать это заявление?
  • Ошибка передачи переменных в PHP-скрипт при загрузке изображений
  • Как определить тип поля для индексации SOLR?
  • 2 Solutions collect form web for “Yii – как получить данные модели на страницу макета?”

    Может быть, этот ответ может вам помочь. Сначала вы должны создать виджет, чтобы вы могли использовать его более эффективно.

    Сначала создайте новый виджет. Скажем, это имя CategoryWidget . Поместите этот виджет под каталог компонентов, protected/components .

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

    Затем создайте представление для этого виджета. Имя файла – category.php. Поместите его под 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; ?> 

    Затем вызовите этот виджет из основного макета.

    main.php

     // your code ... <?php $this->widget('CategoryWidget') ?> ... 

    Если я не ошибаюсь, вы также можете передать любую переменную, доступную в представлении, на макет. Вы просто делаете это из представления, которое имеет вашу переменную. Это улов: вам нужно объявить переменную, которая получит ваше значение в контроллере, например:

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

    После этого вы присвойте свою модель или что-то еще этой общедоступной переменной внутри вашего вида, например:

     $this->myvariable = $modeldata; 

    После того, как вы присвоили свои данные модели публичному атрибуту контроллера, вы можете легко отобразить его внутри своего макета, например

     echo $this->myvariable; 

    Yii уже делает это, назначая пункты меню в меню боковой панели column2, из вида, например:

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

    Вы можете увидеть его во всех представлениях create / update, которые создает gii crud.

    PHP is the Best Programming Language in the world.