Symfony CMF phpcr_节点排序_顺序

Symfony CMF phpcr_节点排序_顺序,php,symfony,symfony-cmf,Php,Symfony,Symfony Cmf,我目前正在使用symfony和symfony cmf开发一个内容管理系统。我正在尝试为属于某个用户的某些节点实现排序功能 到目前为止,我发现节点必须放置在相同的深度才能正确排序,documentManager找到的元素从最低的排序顺序到最高的排序顺序 我现在搞不清楚的是,我该怎么设置排序顺序?AbstractBlock类有两个方法setPosition和getPosition,但根本没有实现setPosition。这只是一个带有TODO和return$this语句的注释 那么,这里是否有人已经使

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

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

我现在搞不清楚的是,我该怎么设置排序顺序?AbstractBlock类有两个方法setPosition和getPosition,但根本没有实现setPosition。这只是一个带有TODO和return$this语句的注释

那么,这里是否有人已经使用Symfony CMF实现了排序功能?如果是的话,请告诉我怎么做


Sharpy35

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

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

你可以做三件事

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

    $collection = $myDocument->getChildren(); $collection->clear(); foreach ($mySortedItems as $key => $item) { $collection[$key] = $item; } $collection=$myDocument->getChildren(); $collection->clear(); foreach($mySortedItems作为$key=>$item){ $collection[$key]=$item; }
  • 在PHPCR中:使用该方法对子项进行重新排序。您可以使用
    DocumentManager::getNodeForDocument
    方法来获取此操作所需的PHPCR节点

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

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

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

你可以做三件事

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

    $collection = $myDocument->getChildren(); $collection->clear(); foreach ($mySortedItems as $key => $item) { $collection[$key] = $item; } $collection=$myDocument->getChildren(); $collection->clear(); foreach($mySortedItems作为$key=>$item){ $collection[$key]=$item; }
  • 在PHPCR中:使用该方法对子项进行重新排序。您可以使用
    DocumentManager::getNodeForDocument
    方法来获取此操作所需的PHPCR节点

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