В настоящее время я разрабатываю систему управления контентом с Symfony и Symfony cmf. Я пытаюсь реализовать функцию сортировки для некоторых узлов, которые принадлежат пользователю.
До сих пор я выяснил, что для правильной сортировки узлы должны быть размещены на одной глубине, а элементы, найденные documentManager, отсортированы от самого низкого sort_order до самого высокого.
Что я не могу понять в настоящее время, как, черт возьми, я могу установить sort_order? Класс AbstractBlock имел два метода setPosition и getPosition, но setPosition вообще не реализовано. Это просто комментарий с TODO и возвращаемое выражение $ this.
Так кому-нибудь здесь уже удалось реализовать функцию сортировки с помощью Symfony CMF? Если так, пожалуйста, дайте мне, как я могу это сделать.
Sharpy35
По умолчанию хранилище 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 вам нужно для этого.
Других решений пока нет …