CakePhP динамически добавить выпадающие меню на время
-
26-09-2019 - |
Вопрос
У меня есть форма, которая включает в себя добавление времени Operting для ресторана.
apport_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 утра до 3 вечера, затем 7 млн. До 12: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?
Решение
Другой подход будет использовать вызов AJAX к методу контроллера, который возвращает входы формы, которые вы хотите, и вставьте ее после существующих. Если вы создаете элемент для ваших представлений только с этой частью формы, вы можете повторно использовать этот элемент в вашем add()
и edit()
Виды, а также для вида Ajax. Тогда вы также можете использовать FormHelper для его создания.
ОБНОВИТЬ Вот пример того, как это будет работать.
В вашем App_Controller включите RequestHandler в ваших компонентах:
var $components = array('RequestHandler');
А также положить это в ваш метод Forefilter в App_Controller:
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()
методы. Это всего лишь общий контур того, как это будет работать. Вам необходимо понять, какие значения проходят, чтобы определить ключи элемента формы и т. Д.
Надеюсь это поможет.