Question

J'ai une forme qui inclut l'ajout de temps de operting un restaurant.

operation_hours (jour de la semaine, open_time, CLOSE_TIME, restaurant_id)

J'utilise 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 multiple de ce .. les œuvres de encas repos comme celui-ci à quinze heures puis dix heures 19 heures-23 heures.

i devra jeux pour un seul jour.

qui est la meilleure façon d'ajouter cette dynamique.

i a essayé quelque chose comme ceci

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

Était-ce utile?

La solution

Une autre approche serait d'utiliser un appel ajax à une méthode du contrôleur qui retourne la forme que vous voulez entrées, et l'insérer après ceux qui existent déjà. Si vous créez un élément de votre point de vue avec juste cette partie du formulaire, vous pouvez réutiliser cet élément dans votre point de vue de add() et edit(), ainsi que pour la vue ajax. Ensuite, vous pouvez également utiliser le FormHelper pour générer.

UPDATE Voici un exemple de la façon dont cela fonctionnerait.

Dans votre app_controller, inclure 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 commande pour l'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 point de vue de add() et edit() dans le contrôleur de restaurant, appelez le même élément (en fait, vous aurez besoin de transmettre des données en 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>

comprend ensuite un lien de demande qui appellera votre méthode de add_time() et placer les résultats dans #times. Vous pouvez utiliser le JsHelper pour cela:

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

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

Hope this helps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top