I'm using cakephp
in a real estate project, when I add a real estate the client selects the city, so I need to be listed the list of neighborhoods in this city ....
View / add:
echo $this->Form->input('cidade', array('label' => 'Cidade', 'empty' => 'Selecione uma Cidade', 'options' => $Cidades));
echo $this->Form->input('bairro', array('label' => 'Bairro', 'empty' => 'Selecione o Bairro', 'options' => array()));
Ajax calling the pagesController (where I get the neighborhoods of the city):
$('#ImovelCidade').change(function(e) {
$('#ImovelBairro').html($('<option />').val('').text('Carregando...'));
$.getJSON(
"<?php echo Router::url(array('controller' => 'pages', 'action' => 'pegarBairros')) ?>",
{ "cidade" : $(this).val() },
function (data) {
$('#ImovelBairro').html($('<option />').val('').text('Selecione'));
$.each(data, function (chave, valor) {
$('#ImovelBairro').append($('<option />').val(chave).text(valor));
} );
}
);
PagesController:
public function pegarBairros ($cidade = null) {
$this->layout = 'json';
$result = array();
if (in_array($_REQUEST['cidade'], array_keys($this->cidade))) {
$this->loadModel('Bairro');
$bairros = $this->Bairro->find('list','fields' => array('id','bairro'), 'conditions' => array('cidade' => $this->cidade[$_REQUEST['cidade']]));
foreach ($bairros as $id => $bairro) {
if (!empty($bairro)){
$result[$id] = $bairro;
$arr = $result;
json_encode($arr);
}
}
} else $result[] = 'error';
$this->set('data', $arr);
}
addController:
public function add () {
if ( !empty($this->request->data) ){
$data = $this->request->data;
if ($data['Imovel']['opcoes']) $data['Imovel']['opcoes'] = implode(';', $data['Imovel']['opcoes']);
$data['Imovel']['ativo'] = $data['Imovel']['ativoPeloAdm'] = 1;
$data['Imovel']['creator'] = $data['Imovel']['modifier'] = $this->Session->read('Auth.User.Imobiliaria.id');
if ($data['Imovel']['bairro']) {
$this->loadModel('Bairro');
$bairro = $this->Bairro->find('first', array('conditions' => array('id' => $data['Imovel']['bairro']), 'order' => array('bairro ASC')));
$data['Imovel']['bairroNome'] = $bairro['Bairro']['bairro'];
}
if ($data['Imovel']['cidade']) {
$cidade = $this->Cidade->find('first', array('conditions' => array('id' => $data['Imovel']['cidade'])));
$data['Imovel']['cidadeNome'] = $cidade['Cidade']['nome'];
}
$data['Imovel']['especificacao'] = $data['Imovel']['imovel'];
if ($this->Imovel->save($data)) $this->redirect(array('action' => 'index'));
}
}