div上的Zend Changing Select Options会在下面的div上更新不同的表单

时间:2012-08-27 18:29:11

标签: php zend-framework

我在一个DIV上有一个选择下拉菜单,并希望用户进行选择,当发生这种情况时,根据他们选择的选项,下面的DIV会显示另一个表单。希望无需发帖(页面刷新)即可完成此操作。

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

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

</div>

这是控制器

class PostJobController extends Zend_Controller_Action
{

public function init()
{
    /* Initialize action controller here */
}

public function indexAction()
{
    $form = new Application_Form_DivForm();

    $business = new Application_Form_BusinessCardForm();
    $calendar = new Application_Form_CalendarForm();
    $brochure = new Application_Form_BrochureForm();
    $this->view->form=$form;       

}


}

现在这是我的/ 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语句并选择要包含在视图中的形式。

2 个答案:

答案 0 :(得分:0)

这在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>

这样的事情可能会成功,我希望它有所帮助。

答案 1 :(得分:0)

能够使用AJAX解决此问题,以回发到另一个控制器操作,然后将数据返回给AJAX。仍需要弄清楚如何在动态创建所有这些子表单时提交它们。