Yii Framework Forum: filtros no preload - checar se existe dados em tabela - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

filtros no preload - checar se existe dados em tabela Rate Topic: -----

#1 User is offline   MarcosX 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 12
  • Joined: 21-July 09

Posted 05 August 2009 - 07:37 AM

Bom dia

Meu primeiro post, comecei agora a testar o yii (ontem), e não estou conseguindo entender/fazer uma verificação e redirecionar para uma msg de erro, no caso pra render partial..

um exemplo simples, estados / cidades

pra cadastrar cidades a aplicação precisa de um estado (FK)

crio no model Estados o que busca os dados pro dropdown, até ai tudo ok, eu queria fazer que ao tentar rodar o create / update (talvez desnecessário) de cidades, checasse se existe algum registro na tabela estados, caso não tenha, eu direciono a um partial render com a mensagem de erro e o link para o crud dependente (estado) e vazio até então.

no model eu criei esse metodo que "cria" o dropdown, mas os filters no controller cidades não faço a mínima idéia, já li o manual e confesso que não compreendi muito bem..

public function getEstadosOptions()
        {
                $criteria=new CDbCriteria;
                $criteria->select='id,desc_estado';
                $criteria->order = 'desc_estado';

                $dados = self::model()->findAll($criteria);

                if(count($dados) == 0) {
                    $this->_error = true;
                }

                $ret = array(''=>' -- Selecione -- ');
                foreach($dados as $reg){
                        $ret[$reg->id] = $reg->desc_estado;
                }
                return $ret;
        }


se alguém puder ajudar, dar uma luz, o caminho das pedras eu agradeço :)
0

#2 User is offline   davi_alexandre 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 104
  • Joined: 08-July 09
  • Location:Guarulhos - São Paulo

Posted 05 August 2009 - 08:25 AM

View PostMarcosX, on 05 August 2009 - 07:37 AM, said:

public function getEstadosOptions()
        {
                $criteria=new CDbCriteria;
                $criteria->select='id,desc_estado';
                $criteria->order = 'desc_estado';

                $dados = self::model()->findAll($criteria);

                if(count($dados) == 0) {
                    $this->_error = true;
                }

                $ret = array(''=>' -- Selecione -- ');
                foreach($dados as $reg){
                        $ret[$reg->id] = $reg->desc_estado;
                }
                return $ret;
        }


se alguém puder ajudar, dar uma luz, o caminho das pedras eu agradeço :)


Cara, não precisa de tudo isso não! ;D

Basta apenas:

<?php echo CHtml::activeDropDownList($usuario, 'id_estado', CHtml::listData($estados, 'id', 'desc_estado'), array('prompt'=>'Selecione um Estado')); ?>


Nesse caso, $estados é um vetor com todos os estados no banco de dados.

Como os values do DropDown são ids que JÁ EXISTEM no banco de dados, não há necessidade de filtro, ou qualquer outra verificação para verificar se já existe esse estado no banco.

Note que esse trecho de código, deve ficar na view. Nesse caso, uma suposta página de cadastro de usuários, onde $usuario é o modelo e id_estado é chave estrangeira nesse modelo, que armazena o id do estado selecionado.
0

#3 User is offline   MarcosX 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 12
  • Joined: 21-July 09

Posted 05 August 2009 - 08:47 AM

View Postdavi_alexandre, on 05 August 2009 - 08:25 AM, said:

Cara, não precisa de tudo isso não! ;D

Basta apenas:

<?php echo CHtml::activeDropDownList($usuario, 'id_estado', CHtml::listData($estados, 'id', 'desc_estado'), array('prompt'=>'Selecione um Estado')); ?>


Nesse caso, $estados é um vetor com todos os estados no banco de dados.

Como os values do DropDown são ids que JÁ EXISTEM no banco de dados, não há necessidade de filtro, ou qualquer outra verificação para verificar se já existe esse estado no banco.

Note que esse trecho de código, deve ficar na view. Nesse caso, uma suposta página de cadastro de usuários, onde $usuario é o modelo e id_estado é chave estrangeira nesse modelo, que armazena o id do estado selecionado.


Davi obrigado pela resposta, muito legal o caso de popular o dropdown, mas a questão do filtro seria, caso não existirem dados na tabela, tabela estados vazia por exemplo, usei estados por ser mais intuitivo, mas por exemplo poderia ser laboratórios / medicamentos, é pra faze inicial de uma aplicação. caso não exista nenhum dado na tabela e sendo uma FK e dependente precisa ter algum dado no dropdown :)

mas eu to é confundindo também.. posso criar um view warning e verificar direto no action do controller e mandar renderizar algo como:

" Para cadastrar um medicamento precisa-se ter laboratórios cadastrados (e o link pro create de laboratório no caso) "

Mas valeu, já me ajudou a entender mais algumas coisas.. essa possibilidade de passar o "prompt" diretamente não tinha visto ..
0

#4 User is offline   davi_alexandre 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 104
  • Joined: 08-July 09
  • Location:Guarulhos - São Paulo

Posted 05 August 2009 - 11:54 AM

View PostMarcosX, on 05 August 2009 - 08:47 AM, said:

" Para cadastrar um medicamento precisa-se ter laboratórios cadastrados (e o link pro create de laboratório no caso) "

Mas valeu, já me ajudou a entender mais algumas coisas.. essa possibilidade de passar o "prompt" diretamente não tinha visto ..


Cara, acho que entendi o que você quer fazer, apesar do seu texto estar muito confuso ;)

Acho que uma view, só para esse warning não é necessário, além de são ser muito interessante se pensarmos na usabilidade do site.

Um opção, seria utilizar uma flash message (http://www.yiiframew...oc/cookbook/21/) para informar o usuário.

Outra opção seria um formulário mais elaborado, onde, caso não exista o item (por exemplo laboratório), o usuário possa cadastra-lo no mesmo formulário que o medicamento. Muito mais legal, principalmente no ponto de vista da usabilidade. ;D

Isso é bastante simples de se fazer. Abaixo um tutorial do cookbook, que mostra como pode ser feito:

http://www.yiiframew...oc/cookbook/19/
0

#5 User is offline   ricardograna 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 375
  • Joined: 31-March 09
  • Location:Manaus/AM - Brazil

Posted 05 August 2009 - 12:27 PM

Se eu fosse vc faria bem mais simples: mostra o dropdown dos estados e, ao lado dele, adiciona um link pro estado/create.

Se a lista estiver vazia, o usuario clica no link para ir ao CRUD de estados. Simples, sem complicar muito.
Yes, It Is!
0

#6 User is offline   MarcosX 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 12
  • Joined: 21-July 09

Posted 05 August 2009 - 01:47 PM

Davi, é verdade, tá bem confuso o meu texto... hehe

mas era isso mesmo.. vou fazer com a opção de cadastrar um laboratório sem sair do formulário de medicamento, bem melhor para o usuário com certeza..

Obrigado mais uma vez!
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users