如何正确地向上和向下移动CakePHP树项目?

时间:2015-03-05 09:47:35

标签: cakephp tree cakephp-2.0

我一直在向上和向下移动树上的物品,物品没有被移动到正确的位置。

请查看这些图片:

https://docs.google.com/a/wgs.co.id/file/d/0B88jB6a4wxkTdTNtTGl1YjhXdTQ/edit?usp=drivesdk enter image description here

https://docs.google.com/a/wgs.co.id/file/d/0B88jB6a4wxkTcW5pSFJyUnVhejA/edit?usp=drivesdk enter image description here

移动项目的代码基于http://book.cakephp.org/2.0/en/core-libraries/behaviors/tree.html#TreeBehavior::moveDown

这是我的代码:

控制器

function admin_moveup($id = null, $delta = null) {
    $this->ProductNeed->id = $id;
    if (!$this->ProductNeed->exists()) {
       throw new NotFoundException(__('Invalid id'));
    }

    if ($delta > 0) {
        $this->ProductNeed->moveUp($this->ProductNeed->id, abs($delta));
    } else {
        $this->Session->setFlash(
          'Silahkan tentukan posisi nomor order terlebih dahulu'
        );
    }

    return $this->redirect(array('admin' => true, 'controller' => $this->params['controller'], 'action' => 'index'));
}

function admin_movedown($id = null, $delta = null) {
    $this->ProductNeed->id = $id;
    if (!$this->ProductNeed->exists()) {
       throw new NotFoundException(__('Invalid id'));
    }

    if ($delta > 0) {
        $this->ProductNeed->moveDown($this->ProductNeed->id, abs($delta));
    } else {
        $this->Session->setFlash(
          'Silahkan tentukan posisi nomor order terlebih dahulu'
        );
    }

    return $this->redirect(array('admin' => true, 'controller' => $this->params['controller'], 'action' => 'index'));
}

查看

<table class="table table-bordered table-striped">
    <thead>
        <tr>
            <th>No</th>
            <th>Name</th>
            <th>Order</th>
            <th>Action</th>
        </tr>
    </thead>
    <tbody>
        <?php
        if(!empty($data['rows'])) {
            $i = 0;
            foreach($data['rows'] as $key => $value) {
                $i++;
        ?>
        <tr id="row-<?php echo $i; ?>">
          <td><?php echo $i; ?></td>

                <td><?= $value ?></td>
                <td>
                  <?php
                  echo $this->Html->link(
                    'Up',
                    '/admin/'.$this->params['controller'].'/moveup/'.$key.'/'.$i
                  );
                  ?> 
                  <?php
                  echo $this->Html->link(
                    'Down',
                    '/admin/'.$this->params['controller'].'/movedown/'.$key.'/'.$i
                  );
                  ?>
                </td>
                <td>
                    <ul class="action">
                        <li><a href="<?= Router::url('/admin/'.$this->params['controller'].'/edit/'.$key, true) ?>"><i class="glyphicon glyphicon-edit" data-toggle="tooltip" title="Ubah"></i></a></li>
                        <li><a href="#deletemodal-<?= $i ?>" data-toggle="modal"><i class="glyphicon glyphicon-ban-circle" data-toggle="tooltip" title="Hapus"></i></a></li>
                    </ul>
                    <?= $html->modalBoxDelete($i, $key) ?>
                </td>
        </tr>
        <?php
            }
        } else {
            echo $html->noData(4);
        }
        ?>
    </tbody>
</table>

1 个答案:

答案 0 :(得分:2)

重新阅读您已关联的文档,代码采用增量值,即项目应移动的位置数。

如果您只想将项目移动一行,那么您必须使用1的增量,但是您的视图模板代码会将数组中的项目索引传递为delta值,因此对于示例中的 Kesehan Mata 行将是4,因此该项目将移至 Stamina Vitalitas 之后,即{ {1}}前面的顶级项目。

因此要么传递静态值4,要么

1

或者如果您不打算将项目移动超过'/admin/'.$this->params['controller'].'/moveup/'.$key.'/1' '/admin/'.$this->params['controller'].'/movedown/'.$key.'/1' ,只需将delta参数全部删除,然后对控制器方法中传递给1的值进行硬编码。