2014-10-01 57 views
1

我是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

你有jquery ajax的知识吗? – 2014-10-01 05:44:27

+0

yaah我知道ajax,但我喜欢用zend Technic来填充数据..有没有内置的选项可以做到这一点? – 2014-10-01 06:54:51

+1

最近我在我上一次的zend项目中做了同样的事情。我已经使用了jquery ajax。 – 2014-10-01 07:24:16

回答

0

你必须使用AJAX对于此方案,请按照此步骤,

1] Onchange of country dropdown通过选择的countryID向服务器发送了ajax调用。 2]获取该国家ID的所有子记录,然后发送回调用函数。 3]删除现有状态选择框并使用以下内容填充新条目。

for(i=0; i < states.length; i++) 
 
    $("#state").append('<option value=' + states[i]['stateID'] + '>' + states[i]['name'] + '</option>'); 
 
}

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请求定义了单独的控制器,您可以这样做你喜欢这里s是一些示例代码:

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控制器与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; ?> 

这只是一个粗略的想法。我的代码中存在拼写错误的可能性,因为我从我的项目中获得了这个错误。

我希望它可以帮助你。

相关问题