目前我很难使用zend framework
为订单页面编写编辑功能情况如下:
一个订单包含多个商品
Eg Order Number 1
Consists of Items
OrderListId OrderId title Sent dateSent trackingNumber
1 1 Book A 0 12/12/12 44444
2 1 Book B 1 10/01/12 51223
3 1 Book C 0 01/02/12 33353
and so on...
请注意:该表存储在数据库中
我需要一个页面,用户可以在其中编辑标题,已发送,dateSent和trackingNumber字段。
如何使用zend表单填充这些字段进行编辑。由于我想要一个页面,他们可以编辑所有这些订单列表项目。而不是用户必须单击后退和前进来单独编辑每个订单列表项。
解决这种情况的最佳方法是什么?
提前非常感谢!
答案 0 :(得分:1)
我建议使用ZF Data Grid。
答案 1 :(得分:1)
我遇到了类似于此问题的问题,我想出了一个解决方案,我只是将更新链接附加到表格行的末尾,并填充表格进行更新,同时仍然显示当前信息。
< / p>
在我知道自己使用ZF做什么之前,我已经构建了以下代码示例,因此它们可能有点混乱。我最终得到的是处理我所有CRUD操作的单一视图。
**为清晰起见,删除了所有css选择器 显示视图:
<?php if (isset($this->leadtracks)): ?>
<form method="post" action="/admin/track/deletetrack">
<table>
<tr>
<th colspan="5"><?php $this->tableHeader() ?></th>
</tr>
<tr>
<th>Select</th>
<th>Shift</th>
<th>Days Off</th>
<th>Slots</th>
<th> </th>
</tr>
<tr>
<?php
//begin foreach loop using alternate syntax
foreach ($this->leadtracks as $lt):
?>
<td><input type="checkbox" name="trackid[]"
value="<?php
//trackid as value for checkbox
echo $lt->trackid
?>" style="width: 2px" /></td>
<td><?php
//find and display shift name
$lt->getShift();
?></td>
<td><?php $lt->getDays(); ?></td>
<td><?php echo $this->escape($lt['qty'])?></td>
<td><a href="<?php
//link to update action passing trackid and bidlocationid values
echo $this->url(array('module' => 'admin',
'controller' => 'track',
'action' => 'updatetrack',
'trackid' => $lt['trackid'],
'bidlocationid' => $lt['bidlocationid']))
?>">Update</a></td>
</tr>
<?php endforeach ?>
<tr>
<th colspan="5">
<input type="submit" name="submit" value="Delete Selected" />
</th>
</tr>
</table>
<?php endif; ?>
<!-- further code removed for brevity -->
</form>
updateAction(),只有一个演示动作:
public function updatetrackAction() {
//get form set new label and assign to view
$form = new Admin_Form_Track();
$form->submit->setLabel('Update Track');
$form->addTrack->setLegend('Update A Track');
$this->view->form = $form;
try {
//check is post and is valid and get values from form
if ($this->getRequest()->isPost()) {
if ($form->isValid($this->getRequest()->getPost())) {
$data = $form->getValues();
$trackId = $data['trackid'];
//save update data to database
$update = new Model();
$update->update($trackId, $data);
//generate meesage
$this->_helper->flashMessenger->addMessage(Zend_Registry::get('config')
->messages->trackupdate->successful);
$this->getHelper('Redirector')->gotoSimple('addtrack');
} else {
//if form is not vaild populate form for resubmission
$form->populate($this->getRequest()->getPost());
}
} else {
//if form is not posted populate form with data from database
$trackId = $this->_getParam('trackid', 0);
if ($trackId > 0) {
$z = new Model();
$y = $z->getTrack($trackId)->toArray();
$form->populate($y);
}
}
} catch (Zend_Exception $e) {
$this->_helper->flashMessenger->addMessage($e->getMessage()->getTrace());
$this->_redirect($this->getRequest()->getRequestUri());
}
}
addAction()和deleteAction()非常相似,并使用通过action()帮助程序调用的相同视图脚本。
结果是一个页面,其中执行添加,更新和删除操作用户感知为一个页面(多个删除的复选框和更新的链接,每次刷新显示当前数据)。虽然我确实将表单从一边移到另一边作为一种视觉线索,尽管它确实没有无所谓,因为每页都有可用的所有操作。
更新视图:
<div>
<h3><?php echo ucwords($this->escape(strtoupper($this->station) . ' - ' . $this->bidloc)); //page header ?></h3>
<?php echo $this->form //edit/add form ?>
</div>
<div>
<?php echo $this->action('displaytrack', 'track', 'admin') //display view ?>
</div>
我确信这可以使用partial()视图助手完成,而不使用action()助手,我确信它可以内联完成,我只是没有花时间弄清楚如何做到这一点。