Set option not to edit - CAKEPHP

2

I'm working on a real estate project and I have add , edit and delete , everything is normal. In real estate I have the cidade and bairro tables, which when I register are two <option> , but when I go to edit the real estate, the city and the neighborhood, do not remain in place of option , customer has to look for the city and the neighborhood again, wanted to set the city and the neighborhood in the edit .

These are options :

        echo $this->Form->input('cidade', array('label' => 'Cidade', '', 'empty' => 'Selecione', 'options' => $Cidades));
    echo $this->Form->input('bairro', array('label' => 'Bairro', 'empty' => 'Selecione o Bairro', 'options' => array() ));

This is my ImovelsController, the edit function:

public function editar($id = null) {

    if (!$id) return $this->redirect(array('action' => 'index'));
    $imovel = $this->Imovel->read(null, $id);
    if ($imovel['Imovel']['creator'] != $this->Session->read('Auth.User.Imobiliaria.id')) return $this->redirect(array('action' => 'index'));

    if (empty($this->request->data)) {


        $this->set('imovel', $imovel);  
        $id_cidade = $imovel['Imovel']['cidade'];

            include 'banco.php';
            $sql = mysql_query("SELECT * FROM cidades WHERE id = '$id_cidade' ");
            while($result = mysql_fetch_array($sql)){
                $id = $result['id'];
                $nomeCidade = $result['nome'];
            }
        $this->loadModel('Bairro');
        $bairrosRioClaro = $this->Bairro->find('list', array('fields' => array('id', 'bairro'), 'conditions' => array('cidade' => $nomeCidade)));
        //print_r($bairrosRioClaro);

        $this->set('bairrosRioClaro', $bairrosRioClaro);

        $especificacoes = array();
        $tipo = $imovel['Imovel']['tipo'];
        if ($tipo == 'residencial') {
            $especificacoes = array(
                1 => 'Casa',
                2 => 'Apartamento',
                3 => 'Condomínio',
                4 => 'Chácara',
                5 => 'Kitnet',
                6 => 'Temporada'
            );
        } elseif ($tipo == 'comercial') {
            $especificacoes = array(
                7 => 'Barracão', 
                8 => 'Salas comerciais', 
                9 => 'Ponto comercial', 
            );
        } elseif ($tipo == 'empreendimento') {
            $especificacoes = array(
                10 => 'Comercial', 
                11 => 'Residencial', 
            );
        } elseif ($tipo == 'terreno') {
            $especificacoes = array(
                12 => 'Comercal', 
                13 => 'Residencial', 
                14 => 'Comercial/Residencial', 
            );
        } elseif ($tipo == 'rural') {
            $especificacoes = array(
                15 => 'Fazenda', 
                16 => 'Sítio', 
                17 => 'Chácara', 
            );
        } else {
            $especificacoes = null;
        }
        $this->set('especificacoes', $especificacoes);
        $this->set('data', $imovel);

    } else {
        $data = $this->request->data;

        if ($data['Imovel']['opcoes']) $data['Imovel']['opcoes'] = implode(';', $data['Imovel']['opcoes']);
        $data['Imovel']['modifier'] = $this->Session->read('Auth.User.Imobiliaria.id');
        $data['Imovel']['especificacao'] = $data['Imovel']['imovel'];
        if ($data['Imovel']['bairro']) {
            $bairro = $this->Cep->find('first', array('conditions' => array('id' => $data['Imovel']['bairro'])));
            $data['Imovel']['bairroNome'] = $bairro['Cep']['bairro'];
        }
        if ($data['Imovel']['cidade']) {
            $cidade = $this->Cidade->find('first', array('conditions' => array('id' => $data['Imovel']['cidade'])));
            $data['Imovel']['cidadeNome'] = $cidade['Cidade']['nome'];
        }
        if ($this->Imovel->save($data)) return $this->redirect(array('action' => 'index'));
        $this->set('data', $data);

    }
}

He is returning real estate data:

array(
'Imovel' => array(
    'id' => '150',
    'codigo' => 'TESTEIMOVEL',
    'placa' => 'TESTEIMO',
    'tipo' => 'residencial',
    'cidade' => '9566',
    'cidadeNome' => 'Rio Claro',
    'bairro' => '578008',
    'bairroNome' => 'Jardim Donângela',
    'intencao' => '1',
    'especificacao' => '1',
    'endereco' => 'TESTEIMOVEL',
    'valor' => '1',
    'condominio' => 'TESTEIMOVEL',
    'salas' => '0',
    'dormitorios' => '0',
    'suites' => '0',
    'banheiros' => '0',
    'garagem' => '0',
    'complemento' => 'TESTEIMOVEL',
    'areaConstruida' => 'TESTEIMOVEL',
    'areaTotal' => 'TESTEIMOVEL',
    'descricao' => 'TESTEIMOVEL',
    'geolocalizacao' => 'Sob Consulta',
    'video' => null,
    'foto1' => '',
    'foto2' => '',
    'foto3' => '',
    'foto4' => '',
    'foto5' => '',
    'foto6' => '',
    'legendaFoto1' => '',
    'legendaFoto2' => '',
    'legendaFoto3' => '',
    'legendaFoto4' => '',
    'legendaFoto5' => '',
    'legendaFoto6' => '',
    'pageview' => '0',
    'opcoes' => '',
    'destaque' => '0',
    'ativo' => '1',
    'ativoPeloAdm' => '1',
    'created' => '2014-02-26 09:53:13',
    'creator' => '110',
    'modified' => '2014-02-26 09:53:13',
    'modifier' => '110'
)
)
    
asked by anonymous 26.02.2014 / 14:57

2 answers

1

Your view's code should be:

echo $this->Form->input('cidade', array('label' => 'Cidade', '', 'empty' => 'Selecione', 'type' => 'select', 'options' => $cidades, 'default' => $cidadeSelected));
echo $this->Form->input('bairro', array('label' => 'Bairro', 'empty' => 'Selecione o Bairro', 'type' => 'select', 'options' => $bairros, 'default' => $bairroSelected));

and change the code of your controller by this:

public function editar($id = null) {

    if (!$id) return $this->redirect(array('action' => 'index'));
    $imovel = $this->Imovel->read(null, $id);
    if ($imovel['Imovel']['creator'] != $this->Session->read('Auth.User.Imobiliaria.id')) return $this->redirect(array('action' => 'index'));

    if (empty($this->request->data)) {

        $this->set('imovel', $imovel);
        $id_cidade = $imovel['Imovel']['cidade'];
        $id_bairro = $imovel['Imovel']['bairro'];

        $this->set('bairroSelected', $id_bairro);
        $this->set('cidadeSelected', $id_cidade);

        // Carrega todas as cidades
        $this->loadModel('Cidade');
        $cidades = $this->Cidade->find('list', array('fields' => array('id', 'nome')));
        $this->set('cidades', $cidades);

        // Carrega todos os bairros
        $this->loadModel('Bairro');
        $bairros = $this->Bairro->find('list', array('fields' => array('id', 'bairro'), 'conditions' => array('cidade' => $imovel['Imovel']['cidadeNome'])));

        $this->set('bairros', $bairros);

        $especificacoes = array();
        $tipo = $imovel['Imovel']['tipo'];
        if ($tipo == 'residencial') {
            $especificacoes = array(
                1 => 'Casa',
                2 => 'Apartamento',
                3 => 'Condomínio',
                4 => 'Chácara',
                5 => 'Kitnet',
                6 => 'Temporada'
            );
        } elseif ($tipo == 'comercial') {
            $especificacoes = array(
                7 => 'Barracão', 
                8 => 'Salas comerciais', 
                9 => 'Ponto comercial', 
            );
        } elseif ($tipo == 'empreendimento') {
            $especificacoes = array(
                10 => 'Comercial', 
                11 => 'Residencial', 
            );
        } elseif ($tipo == 'terreno') {
            $especificacoes = array(
                12 => 'Comercal', 
                13 => 'Residencial', 
                14 => 'Comercial/Residencial', 
            );
        } elseif ($tipo == 'rural') {
            $especificacoes = array(
                15 => 'Fazenda', 
                16 => 'Sítio', 
                17 => 'Chácara', 
            );
        } else {
            $especificacoes = null;
        }
        $this->set('especificacoes', $especificacoes);
        $this->set('data', $imovel);

    } else {
        $data = $this->request->data;

        if ($data['Imovel']['opcoes']) $data['Imovel']['opcoes'] = implode(';', $data['Imovel']['opcoes']);
        $data['Imovel']['modifier'] = $this->Session->read('Auth.User.Imobiliaria.id');
        $data['Imovel']['especificacao'] = $data['Imovel']['imovel'];
        if ($data['Imovel']['bairro']) {
            $bairro = $this->Cep->find('first', array('conditions' => array('id' => $data['Imovel']['bairro'])));
            $data['Imovel']['bairroNome'] = $bairro['Cep']['bairro'];
        }
        if ($data['Imovel']['cidade']) {
            $cidade = $this->Cidade->find('first', array('conditions' => array('id' => $data['Imovel']['cidade'])));
            $data['Imovel']['cidadeNome'] = $cidade['Cidade']['nome'];
        }
        if ($this->Imovel->save($data)) return $this->redirect(array('action' => 'index'));
        $this->set('data', $data);

    }
}
    
26.02.2014 / 15:30
0

I do not know how to use CakePHP, but my solution works, I have already done more than 6 websites for real estate, and in all I used this function to select the city, neighborhood, state, etc. that the property was registered.

In jQuery:

(function($){

var cidade = '<?php echo $cidade ?>';
var bairro = '<?php echo $estado ?>';

    $('select#cidade option').each(function(){
        if($(this).val() == cidade){
            $(this).attr('selected',true);
        }
    });

    $('select#bairro option').each(function(){
        if($(this).val() == bairro){
            $(this).attr('selected',true);
        }
    });

    })(jQuery);

The code will go through all the options you have in the select, and whatever is the same as the city / neighborhood variable it will be selected.

    
21.03.2014 / 19:40