-1

現在、zendフレームワークを使用して注文ページの編集機能を書いています

状況は次のとおりです。

1 つの注文は複数のアイテムで構成されます

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

注意: テーブルはデータベースに保存されます

ユーザーが title、Sent、dateSent、trackingNumber フィールドを編集できるページが必要です。

zend フォームを使用してこれらのフィールドを編集用に入力するにはどうすればよいですか。私は 1 つのページを持ちたいので、これらすべてのオーダーリスト アイテムを編集できます。むしろ、ユーザーは前後にクリックして各注文リスト項目を個別に編集する必要があります。

この状況への最善のアプローチは何ですか?

よろしくお願いします!

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()、デモンストレーション用のアクションは 1 つだけです。

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() ヘルパーを通じて呼び出される同じビュー スクリプトを使用します。
その結果、追加、更新、および削除アクションが、ユーザーが 1 つのページとして認識するものから実行されるページになります (複数の削除のチェック ボックスと更新のリンク、更新のたびに現在のデータが表示されます)。
視覚的な手がかりとしてフォームを左右に動かしていますが、すべてのアクションが各ページで利用できるため、実際には問題ではありません。

更新ビュー:

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

これは、action() ヘルパーを使用せずに、partial() ビュー ヘルパーで実行できると確信しており、インラインで実行できると確信しています。

幸運を。

于 2012-05-10T10:34:19.123 に答える
1

ZF Data Gridを使用することをお勧めします。

于 2012-05-09T16:53:26.293 に答える