我是Zend框架的新手。现在我正在玩Zend表格。我需要将数据库值加载到组合框取决于另一个组合框值。
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);
答案 0 :(得分:1)
启用您的布局并在其中添加此代码:
<?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;
}
由于我有一个带有statesAction的ajax控制器,我可以使用以下代码查看:
<option value="">Select States</option>
<?php foreach($this->states as $state): ?>
<option value="<?php echo $state->value; ?>"><?php echo $state->name; ?></option>
<?php endforeach; ?>
这只是一个粗略的想法。我的代码中可能存在拼写错误,因为我从我的项目中获取了它。
我希望它对你有所帮助。
答案 1 :(得分:0)
您必须在此方案中使用ajax,请按照以下步骤操作
1]国家/地区下拉列表的更改已向选定国家/地区ID的服务器发送了ajax调用。 2]获取该countryID的所有子记录,然后发送回调用函数。 3]删除现有状态选择框,并使用以下内容填充新条目。
for(i=0; i < states.length; i++)
$("#state").append('<option value=' + states[i]['stateID'] + '>' + states[i]['name'] + '</option>');
}