cakephpの動的には、時間のためのドロップダウンメニューを追加します
-
26-09-2019 - |
質問
私は、レストランのためのoperting時間を加算含まフォームを持っています。
operation_hours(平日、open_time、close_time、restaurant_id)
私は形でこれを使用する
<div class="operation_hours">
<?php echo $this->Form->dateTime('RestaurantOperationHour.open_time', false, '12', null, array('interval' => 15, 'value' => '10:00:00')); ?>
<?php echo "<label> to </label>"; ?>
<?php echo $this->Form->dateTime('RestaurantOperationHour.close_time', false, '12', null, array('separator' => ' ', 'interval' => 15, 'value' => '23:00:00')); ?>
</div>
生成
http://pastebin.com/TDDesCRn
私は、午後3時まで。.. 23時まで午後7時をこの午前10時のように包み、残りの作品を、この複数のを追加したいです。
私は一日のためにセットにする必要があります。
これを動的に追加するための最良の方法です。
私は
このようにいくつかのことを試してみました// JavaScript Document
$(function () {
// Phone Number
var i = $('div#phoneContainer div input').size();
$('a#addPhone').click(function () {
$('<div><input name="data[Restaurantphone][' + i + '][number]" type="text" value="" id="Restaurantphone' + i + 'Number" /></div>').appendTo('div#phoneContainer');
i++;
});
// Restaurant Timing
var j = $('div#timeContainer div').size();
$('a#addTime').click(function () {
open_hours = $('div#timeContainer div select#Restauranttiming0OpenHour').html();
open_minutes = $('div#timeContainer div select#Restauranttiming0OpenMin').html();
open_meridian = $('div#timeContainer div select#Restauranttiming0OpenMeridian').html();
close_hours = $('div#timeContainer div select#Restauranttiming0CloseHour').html();
close_minutes = $('div#timeContainer div select#Restauranttiming0CloseMin').html();
close_meridian = $('div#timeContainer div select#Restauranttiming0CloseMeridian').html();
tag1 = '<select id="Restauranttiming';
tag2 = '" name="data[Restauranttiming][';
tag3 = '</select>';
open_hours = tag1 + j +'OpenHour' + tag2 + j + '][open][hour]">' + open_hours + tag3;
open_minutes = tag1 + j +'OpenMin' + tag2 + j + '][open][min]">' + open_minutes + tag3;
open_meridian = tag1 + j +'OpenMeridian' + tag2 + j + '][open][meridian]">' + open_meridian + tag3;
close_hours = tag1 + j +'CloseHour' + tag2 + j + '][close][hour]">' + close_hours + tag3;
close_minutes = tag1 + j +'CloseMin' + tag2 + j + '][close][min]">' + close_minutes + tag3;
close_meridian = tag1 + j +'CloseMeridian' + tag2 + j + '][close][meridian]">' + close_meridian + tag3;
content = '<div>\n' + open_hours + ':' + open_minutes + ' ' + open_meridian + '\n-\n' +close_hours + ':' + close_minutes + ' ' + close_meridian + '\n</div>';
$(content).appendTo('div#timeContainer');
j++;
});
});
私は、CakePHPのでそれを行うための最善の方法を知りたいとjQuery?
解決
別のアプローチは、あなたが望むフォーム入力を返すコントローラメソッドにAJAX呼び出しを使用することで、既存のものの後にそれを挿入します。フォームのちょうどこの部分を使用してビューの要素を作成する場合は、としてだけでなく、Ajaxのビューのために、あなたのadd()
とedit()
ビューでその要素を再利用することができます。そして、あなたもそれを生成するためのFormHelperのを使用することができます。
の UPDATE は、ここでそれが動作する方法の例です。
あなたのapp_controllerでは、あなたのコンポーネントでのRequestHandlerを含めます:
var $components = array('RequestHandler');
そしてまたapp_controllerであなたのbeforeFilterメソッドでこれを入れます:
if($this->RequestHandler->isAjax()){
Configure::write('debug', 0); // forget debug messages
$this->layout = 'ajax'; //and use ajax layout
}
あなたは、その後、AJAX呼び出しのための単純なコントローラメソッドを持っているでしょう
function add_time() {
$this->render('time');
}
time.ctp
も非常に簡単なものであり、単に要素を参照できます:
echo $this->element('time_form');
あなたが望むフォーム(質問から例えば最初のコードブロック)の部分だけを持っている(この例では)「time_form.ctp」と呼ばれる要素。その後、レストランコントローラでのごadd()
とedit()
ビューでは、同じ要素を呼び出します(実際には、値がすでにedit()
ビューに保存されていることを伝えるためにデータを渡す必要があります):
<fieldset>
<legend>Times</legend>
<div id="times">
<?php echo $this->element('time_form'); ?>
</div>
</fieldset>
次に、あなたのadd_time()
メソッドを呼び出し、#times
で結果を配置しますリクエストのリンクが含まれています。あなたはこのためにJsHelperを使用することができます:
http://book.cakephp.org/view/1593/Methodsする
request()
とlink()
方法を確認してください。これはちょうどそれがどのように動作するかの概要です。あなたのフォーム要素のキーを決定するために渡すためにどの値を把握する必要があります、など。
希望、このことができます。