Я новичок в Zend Framework. сейчас я играю с зендом. мне нужно загрузить значения базы данных в поле со списком, зависит от другого значения поля со списком.
IE. Когда я выбираю страну, в другом поле со списком должен быть указан список стран в этой стране. также все хотят загрузить из базы данных.
Я много раз пробовал Google, чтобы найти решение, но ничего не смог найти.
// Загрузка стран
$tblCoun = new Application_Model_DbTable_TblCountry();
$options = $tblComp->fetchCountiesPair();
$tblCoun = new Zend_Form_Element_Select("cmbCountry");
$tblCoun ->setLabel("Select Country")
->setRequired(true)
->setAttrib("class", "form-control span-12");
$company->addMultiOptions($options);
$tblCoun = new Application_Model_DbTable_TblCountry();
$options = $tblComp->fetchCountiesPair();
// Здесь мне нужно загрузить состояния
$tblStat = new Zend_Form_Element_Select("cmbStates");
$tblStat->setLabel("Select State")
->setRequired(true)
->setAttrib("class", "form-control span-12");
$tblStat->addMultiOptions($options);
Включите ваш макет и добавьте в него этот код:
<?php echo $this->docType(); ?>
<html>
<head>
<?php
$this->headLink()->setStylesheet($this->baseUrl('js/jquery/jquery-ui.min.css'));
echo $this->headLink(). PHP_EOL;
$this->headScript()->setFile($this->baseUrl('js/jquery/external/jquery/jquery.js'));
echo $this->headScript();
?>
</head>
<body>
<?php echo $this->layout()->content; ?>
</body>
</html>
Теперь перейдите к вашему виду и добавьте jquery ajax-код примерно так:
$('#country').change(function() {
//For States
$.post('<?php echo $this->baseUrl('ajax/states'); ?>', {'country': $(this).val()},
function(data) {
$('#state').html(data);
});
});
Я определил отдельный контроллер для запроса AJAX, вы можете сделать это, как вам нравится, вот пример кода:
public function statesAction() {
$this->_helper->layout->disableLayout();
$country = $this->getRequest()->getParam('country');
$countryMapper = new Application_Model_CountryMapper();
$states = $countryMapper->fetchAllStates($country);
$this->view->states = $states;
}
Поскольку у меня есть ajax Controller с StatesAction, я имею представление для этого с помощью следующего кода:
<option value="">Select States</option>
<?php foreach($this->states as $state): ?>
<option value="<?php echo $state->value; ?>"><?php echo $state->name; ?></option>
<?php endforeach; ?>
Это просто грубая идея. В моем коде есть возможность опечатки, так как я взял ее из своего проекта.
Надеюсь, это поможет вам.
Вы должны использовать AJAX для этого сценария, пожалуйста, следуйте этим шагам,
1] Из раскрывающегося списка изменения страны отправляется ajax-вызов на сервер с выбранным идентификатором страны.
2] получить все дочерние записи для этого идентификатора страны и отправить их обратно в вызывающую функцию.
3] удалить существующее поле выбора состояния и заполнить новыми записями, используя следующие.
for(i=0; i < states.length; i++)
$("#state").append('<option value=' + states[i]['stateID'] + '>' + states[i]['name'] + '</option>');
}