Cakephp agregar dinámicamente Menús desplegables para Time
-
26-09-2019 - |
Pregunta
Tengo un formulario que incluye la adición de tiempo de la operaci? Para un restaurante.
operation_hours (día de la semana, open_time, CLOSE_TIME, restaurant_id)
i utilizar esto en la forma
<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>
que genera
http://pastebin.com/TDDesCRn
i Quiere añadir múltiples de esta .. encajonar las obras de descanso como este 10 a.m.-3 p.m. a continuación, 19:00-23:00.
i necesitará conjuntos para un solo día.
que es la mejor manera de añadir esta dinámica.
he intentado algo como esto
// 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++;
});
});
Quiero saber cuál es la mejor manera de hacerlo con CakePHP y jQuery?
Solución
Otro enfoque sería el uso de una llamada AJAX a un método controlador que vuelve las entradas de formulario que desea y insertarlo después de los ya existentes. Si crea un elemento para sus puntos de vista con sólo esta parte del formulario, puede volver a utilizar ese elemento en sus puntos de vista y add()
edit()
, así como para la vista ajax. A continuación, también puede utilizar el FormHelper para generarlo.
Actualizar Este es un ejemplo de cómo funcionaría.
En su app_controller, incluir RequestHandler en sus componentes:
var $components = array('RequestHandler');
Y también poner esto en su método de beforeFilter en el app_controller:
if($this->RequestHandler->isAjax()){
Configure::write('debug', 0); // forget debug messages
$this->layout = 'ajax'; //and use ajax layout
}
A continuación, tendría un método simple controlador para la llamada ajax:
function add_time() {
$this->render('time');
}
time.ctp
también podría ser muy simple, y sólo se refieren a un elemento:
echo $this->element('time_form');
El elemento llamado "time_form.ctp" (en este ejemplo) que tiene sólo la parte de la forma que desee (por ejemplo, el primer bloque de código de la cuestión). Luego, en sus puntos de vista y add()
edit()
en el controlador restaurante, llamar a un mismo elemento (en realidad tendrá que pasar los datos en contarla el que los valores ya han sido guardados en la vista edit()
):
<fieldset>
<legend>Times</legend>
<div id="times">
<?php echo $this->element('time_form'); ?>
</div>
</fieldset>
A continuación, incluir un enlace pedido que llame a su método de add_time()
y colocar los resultados en #times
. Se podría utilizar el JsHelper para esto:
http://book.cakephp.org/view/1593/Methods
Comprobar los métodos request()
y link()
. Esto es sólo un esquema general de cómo funcionaría. Tendrá que averiguar qué valores para pasar a determinar sus llaves elemento de formulario, etc.
Espero que esto ayude.