2011-12-08 9 views
7

Deseo enumerar el nombre de algunas Categorías en mi página main.php de diseño. Dado que la disposición no tiene ningún controlador o modelo asociado, deseo de crear un método estático de este tipo en el modelo Categoría:Yii: cómo recuperar los datos del modelo en una página de diseño?

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

y luego en el diseño principal

<?php 
$models = Category::getHeaderModels(); 
foreach($models as $model) 
{ 
    // .... 
} 
?> 

Mi pregunta es uno muy básico: ¿Cómo puedo recuperar esos nombres de categoría del modelo?

Aquí es el modelo completo:

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; 

     } 

Respuesta

19

Puede ser que esta respuesta puede ayudar. Primero debe crear un widget para que pueda usarlo de manera más efectiva.

Primero Crea un nuevo widget. Digamos que el nombre es CategoryWidget. Coloque este widget en el directorio de componentes protected/components.

class CategoryWidget extends CWidget { 

    public function run() { 
     $models = Category::model()->findAll(); 

     $this->render('category', array(
      'models'=>$models 
     )); 
    } 
} 

A continuación, cree una vista para este widget. El nombre del archivo es category.php. se pone debajo de 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; ?> 

Entonces llama este widget de su diseño principal.

main.php

// your code ... 

<?php $this->widget('CategoryWidget') ?> 

... 
6

Si no me equivoco, también puede pasar cualquier variable disponible en una vista, a la disposición. Simplemente hazlo desde la vista que tiene tu variable. Este es el problema: tiene que declarar la variable que recibirá su valor, en el controlador, como esto:

<?php 

class MyController extends Controller 
{ 

    public $myvariable; 

Después de esto, se le asignará su modelo o lo que sea a esta variable pública dentro de la vista, así:

$this->myvariable = $modeldata; 

Después de asignar los datos del modelo de atributo pública del controlador, puede mostrar fácilmente dentro de su trazado por ejemplo,

echo $this->myvariable; 

Yu ya hace esto mediante la asignación de elementos de menú para COLUMN2 menú lateral, de la vista, así:

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

Puede verla en toda crear vistas/actualización que crea GII porquería.

Cuestiones relacionadas