Yii 1.1: Widget Personalizado

3 followers

Nesse wiki vou tentar exemplificar de forma mais clara e objetiva o uso de widget com o CDataProvider.

Controller

/*
* Display 10 itens do Model
*/
$dataProvider = new CActiveDataProvider('Model', 
    array(
        'criteria' => array(
            'select' => 'campo1, campo2, campoN',
            'condition' => 'campo1 = :campo1 AND campo2 = :campo2',
            'params' => array(':campo1' => 'valor1', ':campo2' => 'valor2'),
            'order' => 'campo1 ASC',
            'limit' => 10,
        ),
    )
);
$dataProvider->setPagination(false);
 
$this->render('index', array(
'dataProvider' => $dataProvider,
));

Nesse controller eu fiz um simples select com 2 condições, ordenando de forma crescente e trazendo 10 registros. Isso seria equivalente a:

SELECT 
    campo1, campo2, campoN 
FROM 
    tabela 
WHERE 
    campo1 = 'valor1' 
    campo2 = 'valor2' 
ORDER 
    campo1 ASC
BY LIMIT 10

Em $dataProvider = new CActiveDataProvider('Model',... o termo Model é o nome correspondente ao seu model.

É muito importante observar que $dataProvider->setPagination(false); é obrigatório para que ele respeite o limit da consulta, ou seja, sem ele o limit não funciona.

View index

...
 
<?php       
$this->widget('zii.widgets.CListView', array(
    'dataProvider' => $dataProvider, //DataProvider criado no Controller
    'itemView' => '/pastaDaView/_arquivoDaView', //path e arquvivo de renderização parcial
    'itemsTagName' => 'ul', //Cria uma tag <ul> na view
    'itemsCssClass' => 'minhaClasseCss', //adiciona um class na tag <ul> criada acima.
    'summaryText' => '', //Tira a exibição do texto de total de registros enconrados
));
...
?>

No Lugar desejado da sua view, basta chamar seu widget, seja dentro de um div, span, tabela etc.

View parcial

No exemplo vou chama-la de arquivoDaView.php

<li>
   <?php echo CHtml::link(CHtml::encode($data->campo2), array('view', 'param1'=>$data->campo1)); ?>
</li>

Aqui estrou criando as tags

e nelas criando link para uma view qualquer passando como parâmetro param1 = valor1 e o texto a ser exibido será o valor contido em $data->campo2.

Trocando em miudos, eu teria essa linha gerada no HTML:

<li><a href="/meusite/index.php?r=site/view&amp;param1=valor1">Nome 1</a></li>

Então, para cada item achado na sua consulta ele retornaria um

Be the first person to leave a comment

Please to leave your comment.

Write new article