控制器:
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中添加多个步骤。
有人能指出我如何才能实现这一目标。
答案 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循环中的参数来迭代这些表单输入。
您需要注意,最终已输入的值会在添加另一个步骤时与表单一起发送,以便这些不会丢失。
希望这有助于以正确的方式前进。