【问题标题】:CakePHP- Tree Behavior custom orderingCakePHP- 树行为自定义排序
【发布时间】:2011-10-28 17:32:33
【问题描述】:

我有一个具有树行为的 Post 模型。 在每个帖子的视图中都有一个订单文本输入字段。 提交此字段后,我得到 id => 订单值。 所以现在我必须根据每个帖子的 order 值来 moveUp 或 moveDown 以重新排序树。

示例(标题只是按照排序顺序的示例):

之前:

Post1 - 订单:20 _Post1.2 - 订单:20 _Post1.1 - 订单:10 __Post1.1.1 - 订单:10 __Post1.1.3 - 订单:30 __Post1.1.2 - 订单:20 _Post1.3 - 订购:30 Post2 - 订单:10

之后:

Post2 - 订单:10 Post1 - 订单:20 _Post1.1 - 订单:10 __Post1.1.1 - 订单:10 __Post1.1.2 - 订单:20 __Post1.1.3 - 订单:30 _Post1.2 - 订单:20 _Post1.3 - 订购:30

【问题讨论】:

    标签: cakephp tree behavior


    【解决方案1】:

    您可以使用reorder 函数。在这里查看 - http://book.cakephp.org/view/1355/reorder

    【讨论】:

    • reorder 基于数据库中的一个字段。我需要根据其他用户定义的值重新排序。
    • 嗯,知道了。听起来很复杂。如果我有任何想法,我会尝试分享:)
    • 为了能够使用重新排序,我在数据库中添加了一个新的sort 列来存储订单。所以现在我有了这个功能
    • 好笑!我以为您想为每个用户进行不同的排序。顺便说一句,我遇到了同样的问题,不得不自己重新编写重新排序功能。他们通常对每个项目运行单独的查询。你可以用一个嵌套查询来完成整个事情,这将比他们的要快。
    • 你能否展示一些示例或代码来做到这一点我已经检查了重新排序功能,它所做的一切就是对帖子进行排序并为每个帖子移动
    【解决方案2】:

    为了能够使用重新排序,我在数据库中添加了一个新的sort 列来存储订单。所以现在我有了这个功能

    function _sortPosts($newSort){
    foreach ($newSort AS $id => $value) {
    if(is_numeric($value['sort'])){$this->Post->updateAll(array('Post.sort' => $value['sort']),array('Post.id' => $id));
    } else {
    $this->Session->setFlash(__('Non-numeric value given.', true),'default', array('class' => 'error'));
    $this->redirect($this->referer());
    }
    
    }
    foreach(array_keys($this->data['Post']) as $parent){
    $this->Post->reorder(array('id' => $parent, 'field' => 'Post.sort', 'order' => 'ASC', 'verify' => true));
    }
    }
    

    但是如果有超过 20-30 个孩子,它执行起来真的很慢。 在这里,我粘贴了一个因更改一个父级和两个子级的顺序而生成的查询示例:http://pastebin.com/e076Czg5

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      • 2018-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多