2010-09-30 21 views
0

J'ai un formulaire qui inclut l'ajout de temps d'ouverture pour un restaurant.Cakephp Ajouter dynamiquement des menus déroulants pour le temps

operation_hours (semaine, open_time, CLOSE_TIME, restaurant_id)

i utiliser ce sous la forme

<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> 

qui génère

http://pastebin.com/TDDesCRn 

Je veux ajouter plusieurs de ce .. Incase la le repos fonctionne comme ça de 10h à 15h puis de 19h à 23h.

J'ai besoin d'ensembles pour un seul jour.

qui est le meilleur moyen d'ajouter ceci dynamiquement.

J'ai essayé quelque chose comme ça

// 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++; 
    }); 

}); 

Je veux savoir que la meilleure façon de le faire avec CakePHP et jQuery?

Répondre

1

Une autre approche consiste à utiliser un appel ajax à une méthode de contrôleur qui retourne les entrées de formulaire que vous voulez, et insérez-le après les appels existants. Si vous créez un élément pour vos vues uniquement avec cette partie du formulaire, vous pouvez réutiliser cet élément dans vos vues add() et edit(), ainsi que pour la vue ajax. Ensuite, vous pouvez également utiliser le FormHelper pour le générer.

MISE À JOUR Voici un exemple de fonctionnement.

Dans votre app_controller, comprennent RequestHandler dans vos composants:

var $components = array('RequestHandler'); 

Et aussi mettre ceci dans votre méthode beforeFilter dans le app_controller:

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

Vous auriez alors une méthode simple de contrôleur pour la appel ajax:

function add_time() { 
    $this->render('time'); 
} 

time.ctp pourrait aussi être très simple, et juste se référer à un élément:

echo $this->element('time_form'); 

L'élément appelé « time_form.ctp » (dans cet exemple) qui vient de la partie de la forme que vous voulez (par exemple le premier bloc de code de la question). Ensuite, dans votre add() et edit() vues dans le contrôleur de restaurant, appelez le même élément (en fait, vous aurez besoin de transmettre des données pour lui dire quelles valeurs ont déjà été enregistrées dans la vue edit()):

<fieldset> 
<legend>Times</legend> 
    <div id="times"> 
     <?php echo $this->element('time_form'); ?> 
    </div> 
</fieldset> 

Ensuite incluez un lien de requête qui appellera votre méthode add_time() et placera les résultats dans #times.Vous pouvez utiliser le JsHelper pour cela:

http://book.cakephp.org/view/1593/Methods

Vérifiez les méthodes request() et link(). Ceci est juste un aperçu général de la façon dont cela fonctionnerait. Vous devrez déterminer les valeurs à transmettre pour déterminer vos clés d'élément de formulaire, etc.

Espérons que cela vous aide.

+0

ouais. logique. pouvez-vous me montrer un exemple pour appeler l'aide avec l'aide d'Ajax ou me montrer un exemple. Je ne le connais pas beaucoup. –

+0

Espérons que le code ci-dessus vous aidera à comprendre comment l'approcher. Soyez sûr de regarder JsHelper et FormHelper pour remplir les détails. – bjudson

+0

merci beaucoup mate: D –

Questions connexes