CakePHP从选择框更改中更新多个表单字段

时间:2013-01-17 19:56:02

标签: cakephp

我正在使用CakePHP 2.2。我正在调整一种动态更新我从中得到的选择框的方法:http://www.willis-owen.co.uk/2011/11/dynamic-select-box-with-cakephp-2-0/#comment-10773无问题。当用户从另一个选择框中选择“区域”时,它会更新“酒店”选择框内容。

在同一表单上,当用户从选择框中选择“酒店”时,我想自动使用“酒店”模型中的地址详细信息填充多个“团队”字段。

然后,用户可以在用户点击“团队”添加视图上的提交之前修改地址...所有这些。

在Team \ add.ctp视图中,我有以下代码:

    echo "<div id='address'>";
    echo $this->Form->input('address_1');
    echo $this->Form->input('address_2');
    echo $this->Form->input('address_3');
    echo $this->Form->input('city');
    echo $this->Form->input('postcode');
    echo $this->Form->input('country');
    echo "</div>";

...

    $this->Js->get('#TeamHotelId')->event('change',
        $this->Js->request(array(
            'controller'=>'hotels',
            'action'=>'getAddress'
            ), array(
            'update'=> '#address',
            'async' => true,
            'method' => 'post',
            'dataExpression' => true,
            'data'=> $this->Js->serializeForm(array(
                'isForm' => true,
                'inline' => true))
                        )
        )
    );

在我的HotelsController.php中,我有:

public function getAddress() {
    $hotel_id = $this->request->data['Team']['hotel_id'];
    CakeLog::write('debug', print_r($hotel_id, true));
    $address = $this->Hotel->find('first', array(
            'recursive' => -1,
            'fields' => array('hotel.address_1', 'hotel.address_2', 'hotel.address_3', 'hotel.city', 'hotel.postcode', 'hotel.country'),
            'conditions' => array('Hotel.id' => $hotel_id)
            ));
    CakeLog::write('debug', print_r($address, true));
    $this->set('hotels', $address);
    $this->set(compact('address'));
    $this->layout = 'ajax';
}   

酒店\ get_address.ctp:

    <?php 
        echo $this->Form->input('Team.address_1', array('value'=> $address['Hotel']['address_1']));
        echo $this->Form->input('Team.address_2', array('value'=> $address['Hotel']['address_2']));
        echo $this->Form->input('Team.address_3', array('value'=> $address['Hotel']['address_3']));
        echo $this->Form->input('Team.city', array('value'=> $address['Hotel']['city']));
        echo $this->Form->input('Team.postcode', array('value'=> $address['Hotel']['postcode']));
        echo $this->Form->input('Team.country', array('value'=> $address['Hotel']['country'])); ?>

现在可以使用,代码已经更新。

1 个答案:

答案 0 :(得分:0)

你不能以你想要的方式做到这一点。但是,有一种方法可以根据需要更新,方法是使用ajax从下拉列表中传递id,并根据该ID填充所有其他字段。请确保在'update'=>#id中,您应该将包含您要显示的所有字段的div的div ID放在您希望内容显示在ajax请求上的页面上。

注意:请按照您提供的理查德链接,即www.willis-owen.co.uk,它肯定会帮助您尝试。