hiddeninput form example activedropdownlist php yii

php - form - yii helpers html:: activedropdownlist()



Yii: ¿cómo recuperar los datos del modelo en una página de diseño? (2)

Deseo enumerar el nombre de algunas Categorías en mi página main.php de diseño. Como el diseño no tiene ningún controlador o modelo asociado, deseo crear un método estático como este en el modelo de Categoría:

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 muy básica: ¿cómo puedo recuperar esos nombres de categoría del modelo?

Aquí está 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; }


Si no me equivoco, también puede pasar cualquier variable disponible en una vista al diseño. Simplemente hazlo desde la vista que tiene tu variable. Este es el truco: necesita declarar la variable que recibirá su valor, en el controlador, así:

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

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

$this->myvariable = $modeldata;

Después de haber asignado los datos de su modelo al atributo público del controlador, puede visualizarlos fácilmente dentro de su diseño, por ejemplo

echo $this->myvariable;

Yii ya hace esto asignando elementos de menú al menú de la barra lateral de la columna2, desde la vista, así:

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

Puedes verlo en todas las vistas de creación / actualización creadas por gii crud.


Puede ser esta respuesta puede ayudarte. 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 debajo de componentes protected/components .

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

Luego crea una vista para este widget. El nombre del archivo es category.php. Ponlo 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; ?>

A continuación, llame a este widget desde su diseño principal.

main.php

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