Frage

Ich habe eine Form, die operting Zeit für ein Restaurant beinhaltet das Hinzufügen.

operation_hours (Wochentag, open_time, close_time, restaurant_id)

Ich verwende diese in der Form

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

, die erzeugt

http://pastebin.com/TDDesCRn

Ich will dieses Add mehr .. Incase die restlichen Arbeiten wie diese von 10.00 Uhr bis 15.00 Uhr dann von 19.00 bis 11.00 Uhr.

ich werde für einen einzigen Tag zu Sets benötigt.

, die die beste Art und Weise ist es, diese dynamisch hinzuzufügen.

Ich habe versucht, einige etwas wie dieses

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

});

Ich möchte wissen, was der beste Weg, es zu tun mit CakePHP und jQuery?

War es hilfreich?

Lösung

Ein weiterer Ansatz wäre einen Ajax-Aufruf zu einer Controller-Methode zu verwenden, dass kehrt die Formulareingaben Sie wollen, und setzen Sie sich nach den bestehenden. Wenn Sie ein Element für Ihre Ansichten mit nur diesem Teil des Formulars erstellen, können Sie dieses Element in Ihren add() und edit() Ansichten sowie für die Ajax-Ansicht wiederverwenden. Dann können Sie auch die Formhelper verwenden, um es zu erzeugen.

UPDATE Hier ist ein Beispiel dafür, wie es funktionieren würde.

In Ihrem app_controller umfasst Request in Ihren Komponenten:

var $components = array('RequestHandler');

Und setzen diese auch in Ihrer before Methode im app_controller:

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

Sie würden dann eine einfache Controller-Methode für den Ajax-Aufruf haben:

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

time.ctp auch sehr einfach sein könnte, und beziehen sich nur auf ein Element:

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

Das Element namens „time_form.ctp“ (in diesem Beispiel), die nur den Teil der Form hat Sie (zum Beispiel der erste Codeblock von der Frage) wollen. Dann in Ihren add() und edit() Ansichten im Restaurant Controller, das gleiche Element bezeichnen (tatsächlich müssen Sie Daten zu übergeben darin zu sagen, welche Werte werden bereits in der edit() Ansicht gespeichert):

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

sind dann eine Anfrage Link, der Ihre add_time() Methode aufrufen wird und die Ergebnisse in #times platzieren. Sie konnten die JsHelper für diese verwenden:

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

Überprüfen Sie die request() und link() Methoden. Dies ist nur eine allgemeine Übersicht, wie es funktionieren würde. Sie müssen in die Werte, um herauszufinden, passieren Sie Ihre Formularelement Schlüssel, um zu bestimmen, etc.

Hope, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top