Eu tive esse problema e é pq o cake procura como "displayField" os campos de
nome "title" e "name".
Extraído do model.php:
if ($this->displayField == null) {
if ($this->hasField('title')) {
$this->displayField = 'title';
}
if ($this->hasField('name')) {
$this->displayField = 'name';
}
if ($this->displayField == null) {
$this->displayField = $this->primaryKey;
}
}
Se ele não achar os campos title ou name ele vai usar a PK (id) como
displayField na hora de gerar os selects
Pra alterar isso sem mexer no core do cake vc pode fazer o seguinte, no
model que você estiver usando acrescente:
var $displayField = 'nome'; //ou o nome do campo que você quer que ele
capture no generate list.
Quando você fizer isso vai notar que o SELECT vai incluir o campo qe você
colocou como displayField.
Vale lembrar que cada model pode ter um displayField diferente e que você
pode alterar o app_model.php pra fazer o displayField padrão da sua
aplicação ser diferente do padrão do cake =)
Espero ter ajudado.
On 8/12/07, Marcio Trindade <[EMAIL PROTECTED]> wrote:
>
>
> Designer,
>
> eu falei sobre o seguinte if
>
> if(empty($this->data)) {
> $this->set('cidades', $this->Usuario->Cidade->generateList());
> $this->render();
> }
>
> observe que vc verifica se o $this->data está vazio para carregar as
> cidades e mostrar a view.
>
> olhe no código abaixo que retiro este if e assim uso o getList de
> cidades apenas uma vez.
>
> function adicionar() {
> if(isSet($this->data)) {
> $this->data['Usuario']['senha'] = $this->senha-
> >encode( $this-
> >data['Usuario']['senha'] );
>
> $this->cleanUpFields();
>
> if($this->Usuario->save($this->data)) {
> $this->Session->setFlash('Usuário '. $this-
> >data['Usuario']
> ['nome'] .' adicionado com sucesso!');
> $this->redirect('/usuarios/index');
> } else {
> $this->Session->setFlash('Por favor corrija os
> seguintes erros.');
> }
> }
> $this->set('cidades', $this->Usuario->Cidade->generateList());
>
> }
>
>
> abraços
>
>
>
> On 12 ago, 17:41, hostdesigner <[EMAIL PROTECTED]> wrote:
> > Sobre o if que está a mais eu coloquei por que queria verificar se a
> > cidade realmente existe, não pode existir um usuário sem cidade e por
> > este motivo caso não haja cidade eu informo o acontecimento.
> >
> > Sobre o nome do componente em minúsculo (como está no exemplo acima)
> > eu não me lembro por que escrevi daquela forma, afinal, nem funciona
> > em minúsculo, nem havia executado o código ainda.
> >
> > Sobre o generateList() funcionou aqui, perfeitamente, só que agora que
> > me passou pela cabeça, no cake existe alguma forma de fazer aquele
> > negócio de escolher o estado e mostrar as cidades? Ou vou ter que
> > fazer um Ajax?
> >
> > Falopa!
> >
> > On 12 Ago, 16:02, Marcio Trindade <[EMAIL PROTECTED]> wrote:
> >
> > > Opa faltou adicionar o exemplo para as sugestões.
> >
> > > function adicionar() {
> > > if(isSet($this->data)) {
> > > $this->data['Usuario']['senha'] =
> $this->senha->encode( $this->data['Usuario']['senha'] );
> >
> > > $this->cleanUpFields();
> >
> > > if($this->Usuario->save($this->data)) {
> > > $this->Session->setFlash('Usuário '.
> $this->data['Usuario']
> > > ['nome'] .' adicionado com sucesso!');
> > > $this->redirect('/usuarios/index');
> > > } else {
> > > $this->Session->setFlash('Por favor corrija os
> seguintes erros.');
> > > }
> > > $this->set('cidades',
> $this->Usuario->Cidade->generateList());
> > > }
> >
> > > }
> >
> > > abraços
> >
> > > On 12 ago, 17:01, Marcio Trindade <[EMAIL PROTECTED]> wrote:
> >
> > > > Designer,
> >
> > > > para alterar o seu combo você precisa passar os parametros para o
> > > > generateList().
> >
> > > > inicialmente seria legal vc ver a estrutura do que sua aplicação
> está
> > > > cuspindo na tela.
> >
> > > > pr($this->Usuario->Cidade->findAll());
> >
> > > > ai você vai poder ver a estrutura correta e passar os paramentros
> > > > corretamente, acredito que a estrutura que você deva utilizar é:
> > > > "{n}.Cidade.id", "{n}.Cidade.nome"
> >
> > > > onde:
> >
> > > > n -> indice primeiro níuel do vetor -> $cidade[n]
> > > > Cidade -> chave do segundo nível do vetor (nome do objeto desejádo)
> ->
> > > > $cidade[n]["Cidade"]
> > > > id -> chave do tericeiro nível do vetor (nome do campo desejado) ->
> > > > $cidade[n]["Cidade"]["id"]
> >
> > > > Com isso você pode alterar sua chamada ao método para a seguinte
> > > > forma:
> >
> > > > $this->set('cidades',
> $this->Usuario->Cidade->generateList($conditions, $order, $limit,
> "{n}.Cidade.id",
> >
> > > > "{n}.Cidade.nome"));
> >
> > > > obs.: segue abaixo 2 recomendações.
> >
> > > > 1 - você está utilizando um else sem necessidade, assim duplicando
> > > > código, o que complica na hora de atualizar seu código.
> > > > 2 - Como já falado sobre padronização em outro tópico com a sua
> > > > presença utilize o nome do componente em maiúsculo afinal ele é uma
> > > > classe ($this->Senha->encode ao invés de $this->senha->encode).
> >
> > > > Abraços,
> > > > Marcio Trindade
> >
> > > > On 12 ago, 16:30, hostdesigner <[EMAIL PROTECTED]> wrote:
> >
> > > > > Eu estou usando isso para adicionar usuários
> >
> > > > > function adicionar() {
> > > > > if(empty($this->data)) {
> > > > > $this->set('cidades',
> $this->Usuario->Cidade->generateList());
> > > > > $this->render();
> > > > > } else {
> > > > > $this->cleanUpFields();
> >
> > > > > $this->data['Usuario']['senha'] =
> $this->senha->encode( $this-
> >
> > > > > >data['Usuario']['senha'] );
> >
> > > > > if($this->Usuario->save($this->data)) {
> > > > > $this->Session->setFlash('Usuário
> '. $this->data['Usuario']
> > > > > ['nome'] .' adicionado com sucesso!');
> > > > >
> $this->redirect('/usuarios/index');
> > > > > } else {
> > > > > $this->Session->setFlash('Por
> favor corrija os seguintes erros.');
> > > > > $this->set('cidades',
> $this->Usuario->Cidade->generateList());
> > > > > }
> > > > > }
> > > > > }
> >
> > > > > O problema é que o generateList() está exibindo apenas o ID do
> > > > > registro das cidades eu quero que exiba o nome da cidade como faz?
> >
> > > > > Falopa!
>
>
> >
>
--
Rafael Barbosa
Analista de Sistemas Web
Gradua Networks
--~--~---------~--~----~------------~-------~--~----~
Recebeu esta mensagem porque está inscrito em Grupo "Cake PHP Português" do
Grupos Google.
Para enviar mensagens para este grupo, envie um email para
[email protected]
Para anular a inscrição neste grupo, envie um email para [EMAIL PROTECTED]
Para mais opções, visite este grupo em
http://groups.google.com/group/cake-php-pt?hl=pt-PT
-~----------~----~----~----~------~----~------~--~---