Просмотреть районе зависимости от Города - CAKEPHP
Я использую cakephp
в проект по недвижимости, когда я добавить недвижимости, клиент выбирает город, то должны быть указан список районов города....
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 вызова pagesController(где я поймал всех районов города):
$('#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'));
}
}
2 answers
, Парень, у меня есть более простое решение. Придется немного изменить свой код.
Вдоль codigo поместил некоторые комментарии не могу помочь.
Давай:
Представлении:
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'); // retirei o array
Теперь javascript
$(document).ready(function() {
$('#ImovelBairro').hide()
$("#ImovelCidade").change(function(){
$.ajax({
type: 'POST',
data: { select: $('#ImovelCidade').val()},
url: '/pages/pegarBairros', // CRIAREMOS ESSE ACTION MAIS ABAIXO; ESSE ENDEREÇO IRÁ VARIAR, AJUSTE CONFORME SUA ACTION
success: function(data) {
//preenche o select de bairros com os dados que retornam do ajax.
$("#ImovelBairro").html(data).show();
}
});
});
});
Теперь мы action pegarBairros
, где она появляется id
города и поймает районе соответствующую
function pegarBairros() {
if($this->request->is('ajax')) {
$this->layout = 'ajax';
$this->set('bairros',$this->Bairro->find('list','fields' => array('id','bairro'), 'conditions' => array('cidade' => $this->request->data['select']]));)))
// $this->request->data['select'] é a cidade que vem do Ajax
);
}
}
Наконец, мы создаем view
action pegarBairros
, содержащего options:
<option value="">Selecione</option>
<?php foreach($bairros as $bairro): ?>
<option value="<?php echo $bairro['Bairro']['id']; ?>"> <?php echo $filial['Bairro']['bairro']; ?></option>
<?php endforeach ?>
Если у вас есть сомнения или не работает по какой-то причине, только в комментарии...
@Furlan,
Вы делаете в Php в чистом виде ?...если это в Wordpress у меня есть хорошая идея для вас простой учебник легко и объяснений, это форма поиска очень хорошо со мной было правильно, я оставлю ссылку на беглый взгляд.