【问题标题】:ordering items in doctrine在教义中订购物品
【发布时间】:2011-05-16 15:32:15
【问题描述】:

我一直在使用学说查看 symfony 中的 nestedSet 行为,以便在我的 CMS 的管理模块中显示 nestedSet 层次结构。

我遇到过:http://redotheoffice.com/?tag=doctrine-drag-drop-admin-generator-symfony-nestedset,乍一看看起来很棒,我现在已经实现了。

我的问题在于尝试对根节点进行排序,因为它们是按 root_id 组织的,而此实现不这样做。

我找到了以下内容:http://blog.rajatpandit.com/2010/03/27/ordering-list-of-items-doctrine-symfony-1-4/ 但我已经创建了一个自定义模板来呈现拖放嵌套集,所以我正在尝试使用它。

//generator.yml
        object_actions:
      new:
      _edit:    ~
      _delete:  ~
      moveUp:
      moveDown:

我已将代码复制到我的actions.class.php 中,并且我的模型类形成了上面的链接。

当尝试移动节点 updown 时,它会在以下位置引发错误:$this->current_report->getId(), in executeUp() 和 executeDown()

Fatal error: Call to a member function getId() on a non-object

如果我尝试使用$this->current_report = new Tree() 创建current_report 对象,我会收到另一个错误:

Fatal error: Call to a member function setPosition() on a non-object这是我的Tree.class.php文件,方法是swapWith()

Position 是我用来排序的字段,而不是 root_id。

如果有人能帮我解决这个问题,我将不胜感激。

谢谢

【问题讨论】:

    标签: symfony1 doctrine symfony-1.4


    【解决方案1】:

    您不能使用 Doctrine Nested Sets 重新排序根节点。

    如果你需要这样做,你可以和我做的一样,创建一个假的根节点级别。这个想法是级别 0 将是您的“假根”节点级别,而您的“真正根”节点从级别 1 开始。

    通过这种方式,您可以对假根节点进行重新排序,如果操作正确,用户不会注意到它。

    这里演示了我对这种技术的实现:http://cart.samedraw.com/cartadmin/categoryIndex

    github 上提供的源代码:https://github.com/jongallant/sfCartPlugin

    【讨论】:

    • 我只是想按位置对它们进行排序,因为我目前有 3 个根节点,并且通过它们的id 定位在前端的嵌套集中。所以我希望能够以不同的顺序显示它们,而不是删除节点并以另一个顺序重新添加它们。如果这有意义?
    • 我能想到的唯一方法是拥有自己的机制来跟踪根节点的顺序。如果仅依赖 Doctrine Nested Sets,那么您是对的,您只能删除/重新创建根节点以重新排序它们。这就是为什么我要解释你需要创建一个假根级别,并将你的根节点存储在第一级。
    • 好的,我已经看过你的插件了。似乎做我正在寻找的东西。可能需要稍微修改一下,因为目前在前端,因为“假节点”会弄乱我的导航菜单
    • 是的,您需要确保您的所有代码都考虑到了 0 级节点。无法对根节点重新排序是嵌套集的一个非常烦人的限制。
    • 它似乎创建了“类别”根节点,然后所有其他节点似乎都是它的子节点。所以很有可能必须改变我的导航以考虑到这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2015-06-15
    • 1970-01-01
    相关资源
    最近更新 更多