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'])); ?>
これが機能するようになり、コードが更新されました。