Symfony CMF phpcr_nodes sort_order

В настоящее время я разрабатываю систему управления контентом с Symfony и Symfony cmf. Я пытаюсь реализовать функцию сортировки для некоторых узлов, которые принадлежат пользователю.

До сих пор я выяснил, что для правильной сортировки узлы должны быть размещены на одной глубине, а элементы, найденные documentManager, отсортированы от самого низкого sort_order до самого высокого.

Что я не могу понять в настоящее время, как, черт возьми, я могу установить sort_order? Класс AbstractBlock имел два метода setPosition и getPosition, но setPosition вообще не реализовано. Это просто комментарий с TODO и возвращаемое выражение $ this.

Так кому-нибудь здесь уже удалось реализовать функцию сортировки с помощью Symfony CMF? Если так, пожалуйста, дайте мне, как я могу это сделать.

Sharpy35

1

Решение

По умолчанию хранилище CMF, которое вы, очевидно, используете, — Doctrine PHPCR-ODM. Он, в свою очередь, построен на PHPCR, который является древовидной структурой базы данных. Дочерние узлы определенного узла заказываются по индивидуальному заказу. По умолчанию узлы добавляются в конец списка дочерних элементов.

При работе с PHPCR / PHPCR-ODM вам не нужно напрямую взаимодействовать с базой данных, это сделает Jackalope-doctrine-dbal. Если вы хотите знать, что происходит, лучше прочитайте документация по PHPCR API чем пытаться читать информацию из базы данных 😉

Есть 3 вещи, которые вы можете сделать

  • В PHPCR-ODM: если у вас есть дочерняя коллекция, сопоставленная с полем, вы можете изменить порядок элементов в этой коллекции. Например:

    $ collection = $ myDocument-> getChildren ();
    $ Галерею-> ясно ();
    foreach ($ mySortedItems as $ key => $ item) {
    $ collection [$ key] = $ item;
    }
    
  • В PHPCR: используйте Узел :: orderBefore способ изменить порядок детей. Вы можете использовать DocumentManager::getNodeForDocument метод, чтобы получить узел PHPCR вам нужно для этого.

  • При использовании запросов: в запросах есть условие сортировки. Однако вы вправе не использовать запросы, когда можете их избежать, поскольку использование иерархии узлов намного более производительно и удобно, чем запросы.
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]