#velocity #xwiki
#скорость #xwiki
Вопрос:
Я нашел этот код для получения статей по тегам и отображения их в виде списка со ссылками в XWiki, но я хочу, чтобы он был отсортирован по дате.
У кого-нибудь есть предложения для меня?
{{velocity}}
#set ($list = $xwiki.tag.getDocumentsWithTag('myTag'))
#foreach($reference in $list)
#set ($document = $xwiki.getDocument($reference))
#set ($label = $document.getTitle())
[[$label>>$reference]]
#end
{{/velocity}}
Заранее спасибо!
Ответ №1:
Сортировка в velocity может привести к одному из 2-х штрафов за производительность:
- На самом деле сортировка по скорости, либо с помощью алгоритма сортировки -> излишне сложная
- Загрузка всех результатов документа в память (коллекцию) и сортировка этой коллекции с помощью инструмента сортировки / сбора -> вы рискуете быстро исчерпать память, если результат окажется больше, чем вы ожидали.
Самой простой альтернативой, учитывая, что за ним стоит XWiki, было бы выполнить запрос XWQL для XWiki.TagClass
объектов, хранящихся внутри документов, и выполнить сортировку на уровне базы данных. На этом этапе в velocity вам нужно только отобразить результаты:
{{velocity}}
#foreach ($docStringRef in $services.query.xwql("from doc.object(XWiki.TagClass) tagsObj where 'conference' member of tagsObj.tags order by doc.creationDate DESC").setLimit(10).execute())
#set ($document = $xwiki.getDocument($docStringRef))
[[$document.title>>$docStringRef]]
#end
{{/velocity}}
Для дальнейшего использования / ссылки список доступных инструментов Velocity в XWiki также может быть полезен https://extensions.xwiki.org/xwiki/bin/view/Extension/Velocity Module#HVelocityTools поскольку они могут помочь с обычными операциями, включая сортировку (о которой я упоминал в пункте 2. выше)
Комментарии:
1. Вот и все! Спасибо, Эдуард!
2. Можем ли мы сделать то же самое для документов в пространстве? Итак, сортировка на уровне БД для объектов в пространстве?
3. Да, мы can:extensions.xwiki.org/xwiki/bin/view/Extension/Query Module