Php Zend更改div上的选择选项会更新下面div上的另一个表单

Php Zend更改div上的选择选项会更新下面div上的另一个表单,php,zend-framework,Php,Zend Framework,我有一个选择下拉菜单上的一个DIV,希望用户作出选择,当这发生在下面一个不同的形式出现在DIV下面的基础上,他们选择的选择。希望无需进行post(页面刷新)即可完成此操作 这是我的/views/scripts/postjob/index.phtml <div id="post_job"> <?php echo $this->form->setAction($this->url()); ?> </div> <div id="display

我有一个选择下拉菜单上的一个DIV,希望用户作出选择,当这发生在下面一个不同的形式出现在DIV下面的基础上,他们选择的选择。希望无需进行post(页面刷新)即可完成此操作

这是我的/views/scripts/postjob/index.phtml

<div id="post_job">
<?php echo $this->form->setAction($this->url()); ?>
</div>
<div id="display">

</div>
现在这是我的/forms/DivForm

class Application_Form_DivForm extends Zend_Form
{
public function init()
{

    $this->setName("Business Card");
    $this->setMethod('post');   

    $this->addElement('select','type',
        array(
        'label'        => 'Post Job (select)',
        'onchange'      => 'showForm(this.value)',
        'value0'        => 'Select',
        'multiOptions' => array(
        'value1'    => 'Business Cards',
        'value2'   => 'Calendars',
        'value3'  => 'Brochures',
    ),
)
);


}

}

我相信有不止一种方法可以做到这一点,但要找到一些简单的方法。也许只是将一个变量从index.phtml传回控制器,然后我可以执行一个if语句并选择要在视图中包含的表单

这在PHP中实际上非常简单,在ZF操作中更容易做到(我还没有做JS)。我经常用PHP做这类事情(希望您不介意刷新)

要在控制器动作中实现这一点魔力,只需一个简单的开关:

public function IndexAction()
    {
        $form = new Application_Form_DivForm();
        $form->setAction('/postjob/index');
        $this->view->form=$form;

        //put in the if->isPost() and if->isValid() as needed.
        switch ($form->getValue('type')) {
            case ('Business Cards'):
                $this->view->form2 = new Application_Form_BusinessCardForm();
                break;
            case ('Calendars'):
                $this->view->form2 = new Application_Form_CalendarForm();
                break;
             case ('Brochures'):
                $this->view->form2 = new Application_Form_BrochureForm();
                break;
            default:
                $this->view->form2 = '';
                break;
        }
    }
您的观点可能是:

<div id="post_job">
    <?php echo $this->form ?>
</div>
<div id="display">
    <?php if (!empty($this->form2)): ?>
    <?php echo $this->form2 ?>
    <?php endif ?>
</div>


像这样的东西可能会起到作用,我希望它会有所帮助。

能够通过使用AJAX将数据发回到另一个控制器操作,然后将数据返回到AJAX来解决这个问题。当这些子表单都是动态创建的时候,您仍然需要弄清楚如何提交它们。

您必须将JS添加到代码中。这是我不久前写的一篇文章,应该可以帮助你开始。试着从那一个开始工作,如果你在这一过程中有任何关于bug的问题,我将非常乐意提供帮助。我刚刚尝试过这一个,但问题是我正在尝试加载完全不同的表单,每个表单都有完全不同的字段。假设我有100个不同的表单,每个表单有100个不同的字段,使用这种方法太麻烦了。我知道如何使用AJAX脚本和常规PHP实现这一点。我只是想知道Zend是否有某种类型的方法可以帮助将jquery中选择的变量返回给controller.Thx。对于回答,刚刚编辑的问题。我需要在不发帖子的情况下完成这项工作。那真的无法达到快速加载的目的。我正在研究如何使用Zend实现这一点,但似乎以前没有人这样做过。当然,没有帖子,你无法在PHP中实现这一点。您必须使用javascript来避免刷新。但理论是一样的。您可以在extras文件夹中查看完整版本附带的ZendX组件。ZF也是为配合Dojo而开发的,Dojo也有完整的版本。我正在用AJAX处理这个问题,所以它会向controller发帖,但不会刷新。到目前为止,我能够从select返回到controller的值。如果执行if语句,则不会显示以下表单。
<div id="post_job">
    <?php echo $this->form ?>
</div>
<div id="display">
    <?php if (!empty($this->form2)): ?>
    <?php echo $this->form2 ?>
    <?php endif ?>
</div>