2010-09-30 103 views
0

我有一个表格,其中包括为餐厅添加operting时间。Cakephp动态添加时间下拉菜单

operation_hours(星期,OPEN_TIME,CLOSE_TIME,restaurant_id)

i的形式

<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做一些事情?

回答

1

另一种方法是对控制器方法使用ajax调用,该方法返回所需的表单输入,并将其插入到现有的表单输入之后。如果仅使用表单的这一部分为视图创建元素,则可以在add()edit()视图以及ajax视图中重用该元素。然后你也可以使用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 
} 

你将不得不为一个简单的控制方法阿贾克斯电话:

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()方法。这只是它如何工作的大纲。你需要弄清楚通过哪些值来确定你的表单元素键等。

希望这有助于。

+0

是的。说得通。你能告诉我一个例子,可以在Ajax的帮助下调用帮助程序,或者给我一个例子。我不太了解它。 – 2010-09-30 15:58:38

+0

希望上面的代码将帮助你找出如何处理它。请务必查看JsHelper和FormHelper以填写详细信息。 – bjudson 2010-10-02 19:21:11

+0

非常感谢:D – 2010-10-02 20:02:55