2012-07-29 224 views
0

我是Zend框架的新手,我试图用Zend Form制作表单。在这种形式下,我想要国家,州和城市的级联下降。我已经从数据库中填充了国家的下拉菜单,但是我不知道如何通过获取国家/地区ID来填写州下拉菜单。在zend框架中级联下拉

在此先感谢。

回答

-2

动态地加载国家,你应该使用它,你所做的一切:

我以前用标准的php和jquery完成了这个工作

而这与Zend_Form无关。您应该有一个JSON服务(例如),它将接受CountryID并且将返回所有可用的状态。

为此,您应该在<head>部分连接jQuery库。

$this->view->headScript()->appendFile('/js/jquery-1.7.3.js'); // In your Controller 

添加您jQuery脚本到您的template将处理所有类似的事件:

$_form->inlineScript()->appendScript(' // my raw JS here'); 

$_form->inlineScript()->appendFile('js/dynamicCountry.js'); // if you want to keep it in separate file 

在这里,你是没时间跟Zend_From尽除分配正确元件ID's,classesnames

而对于你的service你可以做水手。类似。假设URL http://localhost/mysite/service/states/country/AT

/** 
* In your Service controller disable rendering for your layout and views 
*/ 
public function preDispatch() { 
     $this->_helper->layout()->disableLayout(); // if you have `layout` enabled 
     $this->_helper->viewRenderer->setNoRender(true); 
    } 

和......欢迎

public function statesAction() { 

    $request = $this->getRequest(); 

    /** 
    * Country code transmitted through the parameter 
    * @var string 
    */ 
    $country = $request->getParam('country'); 

     // you are free to do whatever you want and return JSON (for e.g.) 
} 
+0

谢谢。这工作。 – Pankaj 2012-07-30 09:02:29

+0

很高兴帮助!不用谢 ! – 2012-07-30 11:23:49

0

你必须设置一个关联数组是这样的:

$tCountries = array(
    1 => "France", 
    2 => "USA" 
); 

$element = new Zend_Form_Element_Select(); 
$element->addMultiOptions($tCountries); 

你可以在这里找到更多的信息:http://framework.zend.com/manual/en/zend.form.standardElements.html#zend.form.standardElements.select

+0

感谢回答,但我已经做到了这一点。我填充了国家的下拉列表,其中包含来自数据库中数据库的值和密钥。这不是我的问题。我的问题是,当用户选择国家,然后国家的下拉菜单应该自动填充该国家的可用状态。我以前用标准的php和jquery完成了这个。但在这里我想在Zend_Form中完成。 – Pankaj 2012-07-29 13:07:18

+0

当你收到表格时你会怎么做? – 2012-07-29 13:09:45

+0

当表格加载时,国家的下拉菜单中会有数据库中的所有国家名称以及其他状态下的下拉菜单,城市现在不会有任何值。当用户选择国家时,我希望州的下拉菜单应该填入该国的州和下拉菜单。 – Pankaj 2012-07-29 13:15:47