Кнопка добавления строки базы данных Cakephp - PullRequest
0 голосов
/ 05 мая 2011

Контроллер:

function add(){
    if (!empty($this->data)) {
        $qnote = $this->Qnote->save($this->data);
        if (!empty($qnote)) {
            $this->data['Step']['qnote_id'] = $this->Qnote->id;
            $this->Qnote->Step->save($this->data);
        }
        $this->Session->setFlash('Your note has been saved.');
        $this->redirect(array('action' => 'index'));
    }
}

Форма.

<?php
$userID = Authsome::get('id');
echo $form->create('Qnote', array('action'=>'add'));
echo $form->input('Qnote.id', array('type' => 'hidden'));
echo $form->input('Qnote.user_id', array('value' => $userID, 'type' => 'hidden'));
echo $form->input('Qnote.subject');
echo $form->input('Qnote.body', array('rows' => '3'));
echo $form->input('Step.id', array('type' => 'hidden'));
echo $form->input('Step.user_id', array('value' => $userID, 'type' => 'hidden'));
echo $form->input('Step.body', array('rows' => '3'));
echo $form->end('Save Notes');
?>

Эта форма добавляет данные в 2 модели. Модель 1 = Qnote; Модель 2 = Шаг; Я могу добавить данные в модели.

Мне было интересно, я мог бы добавить кнопку в форму Кнопка позволит пользователям добавлять несколько Step.data в модель шага. Некоторым нравится кнопка +1.

В основном я хочу добавить несколько шагов в Qnote.

Может ли кто-нибудь указать мне правильное направление, как я могу достичь этого.

1 Ответ

0 голосов
/ 05 мая 2011

Это то, что я хотел бы сделать с jQuery.По сути, все, что вам нужно сделать, это использовать jQuery для динамического добавления дополнительных входных данных в соглашениях CakePHP: Step.0.user_id, например.Что вам нужно сделать сейчас на +1: вам нужно посчитать ноль, чтобы вы получили Step.1.user_id и т. Д.

Первый вариант: используйте для этого jQuery-Script

var count = 1;
$('#add_step').click(function() {
    var new_form = $('.Step').eq(0).clone();

    $('input, textarea, select, radio', new_form).filter('[name^="data"]').each(function() {
        var name = $(this).attr('name');
        var new_name = name.replace(/\[\d*\]/, '['+count+']');
        $(this).attr('name', new_name).attr('value', '');
    });
    $('#YourForm').after(new_form);
    count+;
    return false;
});

В этом случае вы клонируете div с классом step, который содержит ваши входные данные для модели Step.Затем вы заменяете атрибут name, чтобы заменить нули на новое значение переменной count.count++ позволяет добавлять столько шагов, сколько вы хотите.

Это решение только для jQuery и может потребовать дополнительной работы для вашей среды.

Второй вариант: использовать AJAX сэлемент

Вы также можете написать в вашем StepsController функцию, которая отображает элемент, который содержит вашу форму и заботится о счетчике.

Третий вариант: ИспользоватьURL-параметр, чтобы определить, сколько опций вы хотите

Если у вас есть URL-адрес, такой как /qnote/add/3, вы можете использовать 3 в качестве параметра в цикле for для итерации этих входных данных формы.Вы должны позаботиться о том, чтобы в конечном итоге уже введенные значения отправлялись вместе с формой при добавлении еще одного шага, чтобы они не потерялись.

Надеюсь, это поможет встать на правильный путь.

...