2010-09-30 55 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