我有一张表格,其中包括为餐馆增加营业时间。
operation_hours(weekday,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
我想加上其中的多个......其余的工作就像这个上午10点到下午3点,然后是晚上7点到晚上11点。
我需要设置一天。
这是动态添加此内容的最佳方式。
我试过这样的事情// 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的最佳方法是什么?
答案 0 :(得分:1)
另一种方法是对控制器方法使用ajax调用,该方法返回所需的表单输入,并将其插入现有表单之后。如果仅使用表单的这一部分为视图创建元素,则可以在add()
和edit()
视图以及ajax视图中重用该元素。然后你也可以使用FormHelper来生成它。
更新以下是一个如何运作的示例。
在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()
视图中,调用相同的元素(实际上,您需要传入数据以告诉它{{1}中已保存了哪些值} view):
edit()
然后添加一个请求链接,该链接将调用您的<fieldset>
<legend>Times</legend>
<div id="times">
<?php echo $this->element('time_form'); ?>
</div>
</fieldset>
方法,并将结果放入add_time()
。您可以使用JsHelper:
http://book.cakephp.org/view/1593/Methods
检查#times
和request()
方法。这只是它如何工作的概述。您需要确定要传入的值以确定表单元素键等。
希望这会有所帮助。