【问题标题】:Symfony CMF phpcr_nodes sort_orderSymfony CMF phpcr_nodes sort_order
【发布时间】:2015-09-20 10:55:00
【问题描述】:

我目前正在使用 symfony 和 symfony cmf 开发一个内容管理系统。我正在尝试为属于用户的某些节点实现排序功能。

到目前为止,我发现节点必须放置在相同的深度才能正确排序,并且 documentManager 找到的元素从最低的 sort_order 排序到最高的排序。

我目前无法弄清楚的是,我到底是如何设置 sort_order 的? AbstractBlock 类有两个方法 setPosition 和 getPosition,但根本没有实现 setPosition。它只是一个带有 TODO 和 return $this 语句的注释。

那么这里有人已经设法使用 Symfony CMF 实现排序功能了吗?如果是这样,请告诉我我该怎么做。

Sharpy35

【问题讨论】:

    标签: php symfony symfony-cmf


    【解决方案1】:

    您显然使用的 CMF 的默认存储是 Doctrine PHPCR-ODM。它依次建立在 PHPCR 上,这是一个树状结构的数据库。特定节点的子节点是自定义排序的。默认情况下,节点附加在子列表的末尾。

    使用 PHPCR / PHPCR-ODM 时,您不需要直接与数据库交互,jackalope-doctrine-dbal 会为您完成。如果您想知道发生了什么,最好阅读documentation on the PHPCR API,而不是尝试从数据库中读取信息;-)

    你可以做三件事

    • 在 PHPCR-ODM 中:如果您有一个子集合映射到一个字段,您可以重新排序该集合中的元素。例如:

      $collection = $myDocument->getChildren(); $collection->clear(); foreach ($mySortedItems as $key => $item) { $collection[$key] = $item; }
    • 在 PHPPCR 中:使用 Node::orderBefore 方法对子项重新排序。你可以使用DocumentManager::getNodeForDocument方法获取你需要的PPCR节点。

    • 使用查询时:查询中有一个 sort by 子句。但是,在可以避免的情况下不使用查询是正确的,因为使用节点层次结构比查询更高效、更方便。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-02
      • 1970-01-01
      相关资源
      最近更新 更多