添加数据库行按钮Cakephp

时间:2011-05-05 11:50:29

标签: forms cakephp controller cakephp-1.3

控制器:

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 =步骤; 我可以将数据添加到模型中。

我想知道我可以在表单中添加一个按钮 Button允许用户将多个Step.data添加到Step模型中。 有些像+1按钮。

基本上我想在每个Qnote中添加多个步骤。

有人能指出我如何才能实现这一目标。

1 个答案:

答案 0 :(得分:0)

这是我用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;
});

在这种情况下,您将使用类step克隆div,该类保存模型Step的输入。然后,替换name-attribute以通过变量count的新值替换零。 count++可让您根据需要添加任意数量的步骤。

这是一个仅限jQuery的解决方案,可能需要为您的环境进行额外的工作。

第二个选项:将AJAX与元素一起使用

您还可以在StepsController中编写一个函数,该函数呈现一个包含表单的元素并负责计数器。

第三个选项:使用网址参数决定您想要的选项

如果您有一个像/qnote/add/3这样的网址,您可以使用3作为for循环中的参数来迭代这些表单输入。 您需要注意,最终已输入的值会在添加另一个步骤时与表单一起发送,以便这些不会丢失。

希望这有助于以正确的方式前进。