Widget Personalizado

You are viewing revision #1 of this wiki article.
This version may not be up to date with the latest version.
You may want to view the differences to the latest version.

next (#2) »

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

6 0
4 followers
Viewed: 10 814 times
Version: Unknown (update)
Category: Tutorials
Written by: Cálcio
Last updated by: Cálcio
Created on: Apr 20, 2012
Last updated: 9 years ago
Update Article

Revisions

View all history

Related Articles