【发布时间】:2011-07-27 17:05:41
【问题描述】:
在我的蛋糕应用程序中,我有一个名为 faqs 的模型、名为 faqs_controller 的控制器和名为 faqsindex.php 的视图。
我正在制作一个 CMS,以便用户可以更改常见问题解答。 db 表 'faqs' 有 5 列 id、category、question、answer 和 number。 “编号”是常见问题的出现顺序。
列出所有常见问题解答的循环大致如下:
<?php
foreach ($faqs as $faq):
<tr>
<td><?php echo $faq['Faq']['category']; ?></td>
<td><?php echo $faq['Faq']['number']; ?></td>
<td><?php echo $faq['Faq']['question']; ?></td>
<td><?php echo $faq['Faq']['answer']; ?></td>
</tr>
<?php endforeach; ?>
我想让用户可以从此屏幕更改“数字”单元格,而不是进入每一行的单独编辑屏幕并在那里更改数字。
您知道,就像 netflix 的队列是如何工作的,用户可以从列表中重新排序,您不必单击要观看的电影来更改其在队列中的顺序。
编辑我在 faqs_controller.php 中设置了这样的编辑:
function edit() {
if(!empty($this->data)) {
$this->Faq->saveAll($this->data['Faq']);
}
else {
$this->data['Faq'] = Set::combine($this->Faq->find('all'), '{n}.Faq.id', '{n}.Faq');
}
}
在索引视图中,我创建了一个如下所示的 foreach:
echo $form->create('Faq', array('action'=>'edit'));
foreach($this->viewVars['faqs'] as $key => $value) {
echo 'id:'.$value['Faq']['id'];
echo '<br/>question:'.$value['Faq']['question'];
echo $form->input('Faq.'.$key.'.number');
}
在这种情况下,foreach 会循环 8 次,因为有 8 行。如果我提交它们,我会创建 8 个新行并且无法更新现有行。
-编辑-
我在这里更改了表单回显:
echo $form->input('Faq.'.$key.'.question',array('value'=>$value['Faq']['question']));
预填充表单。我不知道如何更新正确的行。如果我提交表单,我会得到 8 个这样的 mysql 查询:
当我不想插入而是更新时,插入faqs (question) 值(“我刚刚添加的新问题?”)。
【问题讨论】:
-
创建一个表单,在您的控制器中检索与提交的表单字段关联的常见问题解答对象,更新其编号属性,并再次保存常见问题解答对象。还有其他方法吗?
-
我不太清楚自己要做什么,我正在尝试弄清楚如何进行更新。
标签: cakephp