Busca por usuário no banco através de campo text

Sou iniciante no Yii Framework,e estava precisando de ter um campo de busca para listar os dados do usuário digitado no campo de busca,só que não sei como fazer isso,por isso gostaria de uma solução para este meu problema.desde já agradeço a vcs.

Boa Tarde Alewebcode,

Você chegou a gerar o CRUD tanto pelo gii ou pelo yiic da sua tabela de usuário?

abraços

Boa Tarde.

Eu já gerei o crud já, eu estava precisando desse campo de pesquisa agora.Obrigado pela atenção.

Certo, então é para ter uma página (admin) que nela mostra os registros… caso o que você precise seja mais especifico detalhe mais a respeito, quem sabe eu possa te ajudar, comecei faz pouco tempo… = )

Abraço !

Eu tenho um grid que lista todos os usuarios do meu banco,certo!.Acima desse grid preciso de um campo de busca,para que a pessoa digite o nome do usuário e se o usuario existir aparecer os dados do mesmo no grid.Mas não sei como fazer isso,o que conseguir foi o grid que já vem listado e colocar o campo somente.

Obrigado.Abraço.

Cara, na view se você acrescentar


"'filter'=>$model,

no grid irá aparecer campos para filtros porém não do jeito que você quer, os campos irão aparecer na própria tabela

fica mais ou menos assim.




<?php $this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'empresa-grid',

	'dataProvider'=>$model->search(),

	'filter'=>$model,

	'columns'=>array(



Agora se isso não resolve o seu problema, olhando o código da Grid,

eu acredito que você tenha que trabalhar em cima desta linha




'dataProvider'=>$model->search(),



Não sei, posso estar errado mas, eu começaria a estudar o que significa ‘dataProvider’ e como trabalhar com ele…

Espero ter ajudado, Abraço

Cara, talvez esse link te ajude…

flwww!

Teria como vc me mostrar um exemplo melhor de filter que já vem no grid porque ainda não ficou claro.obrigado

Claro, um exemplo:




<?php $this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'user-grid',

	'dataProvider'=>$model->search(),

	'filter'=>$model,

	'columns'=>array(

		'id',

		'username',

		'email',

		array(

			'class'=>'CButtonColumn',

		),

	),

)); ?>



você disse que já tem o grid né ?

se você já tiver ele posta o código dele por favor…

<h3>Usuarios</h3>

<table border="0">

&lt;?php echo CHtml::beginForm(); ?&gt;





&lt;tr&gt;


    &lt;td align=&quot;right&quot;&gt;


         &lt;?php echo CHtml::activeLabel(&#036;usuario,'Nome'); ?&gt;


    &lt;/td&gt;


    &lt;td width=&quot;500&quot;&gt;


         &lt;?php echo CHtml::activeTextField(&#036;usuario,'Nome_USU') ?&gt;





        &lt;?php echo CHtml::submitButton('Buscar'); ?&gt;





        &lt;?php echo CHtml::endForm();?&gt;


   &lt;/td&gt;





&lt;/tr&gt;


&lt;tr&gt;


            &lt;th width=&quot;80&quot;&gt;&lt;?php echo Usuario::model()-&gt;getAttributeLabel('Codigo'); ?&gt;&lt;/th&gt;


            &lt;th width=&quot;50&quot;&gt;&lt;?php echo Usuario::model()-&gt;getAttributeLabel('Nome'); ?&gt;&lt;/th&gt;


            &lt;th width=&quot;80&quot;&gt;&lt;?php echo Usuario::model()-&gt;getAttributeLabel('Login'); ?&gt;&lt;/th&gt;


            &lt;th width=&quot;80&quot;&gt;&lt;?php echo Usuario::model()-&gt;getAttributeLabel('Ativo'); ?&gt;&lt;/th&gt;


           


            &lt;th width=&quot;50&quot;&gt;&lt;?php echo CHtml::encode('Ações'); ?&gt;&lt;/th&gt;


&lt;/tr&gt;


&lt;?php foreach (&#036;models as &#036;model) : &#036;c = (isset(&#036;c) &amp;&amp; &#036;c == 1) ? 0 : 1; ?&gt;


&lt;tr class=&quot;&lt;?php echo &#036;c % 2 == 0 ? 'even' : 'odd'; ?&gt;&quot;&gt;


            &lt;td&gt;&lt;?php echo CHtml::encode(&#036;model-&gt;Id_USU); ?&gt;&lt;/td&gt;


            &lt;td&gt;&lt;?php echo CHtml::encode(&#036;model-&gt;Nome_USU); ?&gt;&lt;/td&gt;


            &lt;td&gt;&lt;?php echo CHtml::encode(&#036;model-&gt;Login_USU); ?&gt;&lt;/td&gt;


            &lt;td&gt;&lt;?php echo CHtml::encode(&#036;model-&gt;ativoText); ?&gt;&lt;/td&gt;


            


            &lt;td&gt;


        &lt;?php    echo CHtml::link('&lt;img src=&quot;'.Yii::app()-&gt;baseUrl . '/images/editar2.png &quot;/&gt;', array('alterar', 'id' =&gt; &#036;model-&gt;Id_USU)); ?&gt;


        &lt;?php    echo CHtml::link('&lt;img src=&quot;'.Yii::app()-&gt;baseUrl . '/images/excluir2.png &quot;/&gt;', '#', array(


           





                'confirm' =&gt; 'Deseja apagar esse registro?',


                'submit' =&gt; array('apagar', 'id' =&gt; &#036;model-&gt;Id_USU)


            ));


        ?&gt;


    &lt;/td&gt;


&lt;/tr&gt;


&lt;?php endforeach; ?&gt;


&lt;tr&gt;


    &lt;td class=&quot;submenu&quot;&gt;


    &lt;?php echo CHtml::link('Novo', array('criar')); ?&gt;


    &lt;/td&gt;





&lt;/tr&gt;

</table>

<div class=“pager”><?php $this->widget(‘CLinkPager’, array(‘pages’ => $pages)); ?></div>

como faço a busca agora?

Ninguem pode me ajudar a resolver esse problema?

alewebcode,

Posta o arquivo index.php da pasta usuarios que você tem, por que é somente colocar 1 linha na grid que os filters(inputs de busca) já devem funcionar.

Segue o arquivo index do usuario.Obrigado.

<h3>Usuarios</h3>

<?php

/*

$this->widget(‘zii.widgets.grid.CGridView’, array(

'id'=&gt;'usuario-grid',


'dataProvider'=&gt;&#036;usuario-&gt;search(),


'filter'=&gt;&#036;usuario,


'columns'=&gt;array(


            'Nome_USU',





            array(


                    


                    


                      'value' =&gt; '(&#036;data-&gt;user-&gt;username)',





            ),


    ),

));

*/

?>

<table border="0">

&lt;tr&gt;


            &lt;th width=&quot;80&quot;&gt;&lt;?php echo Usuario::model()-&gt;getAttributeLabel('Codigo'); ?&gt;&lt;/th&gt;


            &lt;th width=&quot;50&quot;&gt;&lt;?php echo Usuario::model()-&gt;getAttributeLabel('Nome'); ?&gt;&lt;/th&gt;


            &lt;th width=&quot;80&quot;&gt;&lt;?php echo Usuario::model()-&gt;getAttributeLabel('Login'); ?&gt;&lt;/th&gt;


            &lt;th width=&quot;80&quot;&gt;&lt;?php echo Usuario::model()-&gt;getAttributeLabel('Ativo'); ?&gt;&lt;/th&gt;


           


            &lt;th width=&quot;50&quot;&gt;&lt;?php echo CHtml::encode('Ações'); ?&gt;&lt;/th&gt;


&lt;/tr&gt;


&lt;?php foreach (&#036;models as &#036;model) : &#036;c = (isset(&#036;c) &amp;&amp; &#036;c == 1) ? 0 : 1; ?&gt;


&lt;tr class=&quot;&lt;?php echo &#036;c % 2 == 0 ? 'even' : 'odd'; ?&gt;&quot;&gt;


            &lt;td&gt;&lt;?php echo CHtml::encode(&#036;model-&gt;Id_USU); ?&gt;&lt;/td&gt;


            &lt;td&gt;&lt;?php echo CHtml::encode(&#036;model-&gt;Nome_USU); ?&gt;&lt;/td&gt;


            &lt;td&gt;&lt;?php echo CHtml::encode(&#036;model-&gt;Login_USU); ?&gt;&lt;/td&gt;


            &lt;td&gt;&lt;?php echo CHtml::encode(&#036;model-&gt;ativoText); ?&gt;&lt;/td&gt;


            


            &lt;td&gt;


        &lt;?php    echo CHtml::link('&lt;img src=&quot;'.Yii::app()-&gt;baseUrl . '/images/editar2.png &quot;/&gt;', array('alterar', 'id' =&gt; &#036;model-&gt;Id_USU)); ?&gt;


        &lt;?php    echo CHtml::link('&lt;img src=&quot;'.Yii::app()-&gt;baseUrl . '/images/excluir2.png &quot;/&gt;', '#', array(


           





                'confirm' =&gt; 'Deseja apagar esse registro?',


                'submit' =&gt; array('apagar', 'id' =&gt; &#036;model-&gt;Id_USU)


            ));


        ?&gt;


    &lt;/td&gt;


&lt;/tr&gt;


&lt;?php endforeach; ?&gt;


&lt;tr&gt;


    &lt;td class=&quot;submenu&quot;&gt;


    &lt;?php echo CHtml::link('Novo', array('criar')); ?&gt;


    &lt;/td&gt;





&lt;/tr&gt;

</table>

<div class=“pager”><?php $this->widget(‘CLinkPager’, array(‘pages’ => $pages)); ?></div>

AleWeb,

Sua Grid ta comentada? Descomenta ela, e posta o que ocorre!




<?php

$this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'usuario-grid',

	'dataProvider'=>$usuario->search(),

	'filter'=>$usuario,

	'columns'=>array(

		'Nome_USU', array(

			'value' => '($data->user->username)'

		),

	),

));

?>



Quando Descomento aparece um campo grande de input,até tentei fazer a busca nesse campo mas nada acontece.

examine o código gerado pelo crud que vc vai ver como é feito

Já sabia que ia ocorrer isto, por que essa consulta e feita de um relacionamento.

Tem o firebug instalado? Veja na hora que é feita a consulta, o que está indo na requisição na aba do Console, veja quais a variaveis que está indo no POST.

Você vai precisar configurar a função search() do model Usuario.php

Voce precisa adicionar um compare, mais ou menos assim:


$criteria->compare('Nome_USU', $this->user->username, true);

Adiciona antes do:


return new CActiveDataProvider(get_class($this), array(...

Estou colocando meu model Usuario para vcs olharem e ver o que precisa ser corrigido.


<?php


class Usuario extends CActiveRecord

{

	 const ATIVO_SIM = 'S';

         const ATIVO_NAO = 'N';

	  public static function getAtivoKeys() {


        return array(

            self::ATIVO_SIM,

            self::ATIVO_NAO,

        );

    }


    public static function getAtivoOptions() {

                               //self é a propria classe

        return array_combine(self::getAtivoKeys(), array(

            'Sim',

            'Não'

        ));

    }


    public function getAtivoText() {

        $options = self::getAtivoOptions();

                                //$this é o proprio objeto

        return isset($options[$this->Ativo_USU]) ? $options[$this->Ativo_USU] : "desconhecido ({$this->Ativo_USU})";

    }

	public static function model($className=__CLASS__)

	{

		return parent::model($className);

	}


	/**

	 * @return string the associated database table name

	 */

	public function tableName()

	{

		return 'usuarios';

	}


	/**

	 * @return array validation rules for model attributes.

	 */public function index(){

             $criteria = new CDbCriteria;


             $criteria->compare('Nome_USU', $this->Nome_USU,true);





        if(isset($_REQUEST['Usuario'])){


            $nome = $_POST['Usuario']['Nome_USU'];

            $nome = trim($nome);


        


            $dataProvider = new CActiveDataProvider('Usuario','zii.widgets.grid.CGridView',array(

            'dataProvider'=>$dataProvider ->index(),


             'criteria'=>array(

             'condition'=>"Nome_USU like '%$nome%'",

             'order'=>'Nome_USU'),


             'pagination' => array(

                'pageSize' => 20,

            ),

           ));


        }

        

      

    }




	public function rules()

	{

		// NOTE: you should only define rules for those attributes that

		// will receive user inputs.

		return array(

			array('Id_GRUPO', 'required'),

			array('Id_MUN, Id_PRF, USU_CON, especial, Id_GRUPO', 'numerical', 'integerOnly'=>true),

			array('Nome_USU', 'length', 'max'=>40),

			array('Login_USU, Ramal_USU', 'length', 'max'=>10),

			array('Senha_USU, chave', 'length', 'max'=>255),

			array('LoginId_USU', 'length', 'max'=>32),

			array('Telefone_USU', 'length', 'max'=>15),

			array('E_mail_USU', 'length', 'max'=>50),

			array('Funcao_USU', 'length', 'max'=>30),

			array('Ativo_USU', 'length', 'max'=>1),

			// The following rule is used by search().

			// Please remove those attributes that should not be searched.

			array('Id_USU, Nome_USU, Login_USU, Senha_USU, Id_MUN, LoginId_USU, Telefone_USU, Ramal_USU, E_mail_USU, Funcao_USU, Ativo_USU, Id_PRF, USU_CON, especial, Id_GRUPO, chave', 'safe', 'on'=>'search'),

		);

	}


	/**

	 * @return array relational rules.

	 */

	public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		// class name for the relations automatically generated below.

		return array(

		);

	}

        

	/**

	 * @return array customized attribute labels (name=>label)

	 */

	public function attributeLabels()

	{

		return array(

			'Id_USU' => 'Id Usu',

			'Nome_USU' => 'Nome Usu',

			'Login_USU' => 'Login Usu',

			'Senha_USU' => 'Senha Usu',

			'Id_MUN' => 'Id Mun',

			'LoginId_USU' => 'Login Id Usu',

			'Telefone_USU' => 'Telefone Usu',

			'Ramal_USU' => 'Ramal Usu',

			'E_mail_USU' => 'E Mail Usu',

			'Funcao_USU' => 'Funcao Usu',

			'Ativo_USU' => 'Ativo Usu',

			'Id_PRF' => 'Id Prf',

			'USU_CON' => 'Usu Con',

			'especial' => 'Especial',

			'Id_GRUPO' => 'Id Grupo',

			'chave' => 'Chave',

		);

	}


	public function getListaUsers(){

            return CHtml::listData(Usuario::model()->findAll(), 'Id_USU','Nome_USU');

        }

	public function search()

	{

		// Warning: Please modify the following code to remove attributes that

		// should not be searched.


		$criteria=new CDbCriteria;


		$criteria->compare('Id_USU',$this->Id_USU,true);

		$criteria->compare('Nome_USU',$this->Nome_USU,true);

		$criteria->compare('Login_USU',$this->Login_USU,true);

		$criteria->compare('Senha_USU',$this->Senha_USU,true);

		$criteria->compare('Id_MUN',$this->Id_MUN);

		$criteria->compare('LoginId_USU',$this->LoginId_USU,true);

		$criteria->compare('Telefone_USU',$this->Telefone_USU,true);

		$criteria->compare('Ramal_USU',$this->Ramal_USU,true);

		$criteria->compare('E_mail_USU',$this->E_mail_USU,true);

		$criteria->compare('Funcao_USU',$this->Funcao_USU,true);

		$criteria->compare('Ativo_USU',$this->Ativo_USU,true);

		$criteria->compare('Id_PRF',$this->Id_PRF);

		$criteria->compare('USU_CON',$this->USU_CON);

		$criteria->compare('especial',$this->especial);

		$criteria->compare('Id_GRUPO',$this->Id_GRUPO);

		$criteria->compare('chave',$this->chave,true);


		return new CActiveDataProvider(get_class($this), array(

			'criteria'=>$criteria,

		));

	}

}