-1

目前,我一直在使用 zend 框架为订单页面编写编辑功能

情况如下:

一个订单包含多个项目

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...

请注意:表存储在数据库中

我需要有一个页面,用户可以在其中编辑标题、已发送、日期发送和 trackingNumber 字段。

如何使用 zend 表单填充这些字段以进行编辑。因为我想要一页,所以他们可以编辑所有这些订单列表项。而不是用户必须单击后退和前进来单独编辑每个订单列表项。

解决这种情况的最佳方法是什么?

提前非常感谢!

4

2 回答 2

1

不久前我遇到了类似的问题,我想出了一个解决方案,我只是在表格行的末尾附加了一个更新链接,并填充了一个用于更新的表单,同时仍然显示当前信息。

以下代码示例是在我知道我在用 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>&nbsp;&nbsp;</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(),只有一个action用于演示:

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() 助手,而且我确信它可以内联完成,我只是没有花时间弄清楚如何去做。

祝你好运。

于 2012-05-10T10:34:19.123 回答
1

我建议使用ZF 数据网格

于 2012-05-09T16:53:26.293 回答