2010-09-30 3 views
0

У меня есть форма, которая включает в себя добавление времени на обслуживание ресторана.Cakephp Динамически добавлять выпадающие меню для Time

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 

я хочу добавить несколько из этого .. упаковывают отдых работает примерно с 10:00 до 15:00, а с 19:00 до 23:00.

Мне нужно будет установить на один день.

который является лучшим способом добавить это динамически.

я попробовал некоторые вещи, как этот

// 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 для его создания.

ОБНОВЛЕНИЕ Вот пример того, как это будет работать.

В вашем app_controller, включают RequestHandler в ваших компонентов:

var $components = array('RequestHandler'); 

А также это в вашем методе beforeFilter в app_controller:

if($this->RequestHandler->isAjax()){ 
    Configure::write('debug', 0); // forget debug messages 
    $this->layout = 'ajax'; //and use ajax layout 
} 

Вы бы тогда простой метод контроллер для ajax call:

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 или указать мне пример. Я не знаю этого много. –

+0

Надеюсь, приведенный выше код поможет вам разобраться, как к нему подойти. Обязательно посмотрите JsHelper и FormHelper, чтобы заполнить детали. – bjudson

+0

спасибо большое помощник: D –