按附加字段“日期”排序的条目

Posted

技术标签:

【中文标题】按附加字段“日期”排序的条目【英文标题】:sort of entries by the additional field "Date" 【发布时间】:2021-11-29 15:27:34 【问题描述】:

如何按“date2”排序?也就是说,在附加字段“日期”上?

<#assign
    orstf = objectUtil('com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil')
    qry = assetEntryLocalService.dynamicQuery()
/>
<#if startDate??>
    <#assign
        V = qry.add(orstf.ge('publishDate', startDate?date("dd.MM.yyyy") ))
    />
</#if>
<#if endDate??>
    <#assign
        V = qry.add(orstf.le('publishDate', endDate?date("dd.MM.yyyy")))
    />
</#if>
<#assign
    entriesRaw = assetEntryLocalService.dynamicQuery(qry)
    entries = []
/>

<#-- ?sort_by(['name', 'last']) -->

<#list entriesRaw as entry>
    <#assign 
        eCatIds = entry.getCategoryIds() 
        renderer = entry.getAssetRenderer()
        journalArticle = renderer.getArticle()
        date2 = journalArticle.getExpandoBridge().getAttribute("date")
        bContains = 0
    />
    <#list eCatIds as eCatId>
        <#if (catIds?seq_contains(eCatId)) &&
            (date2?date >= startDate?date("dd.MM.yyyy")) &&
            (date2?date <= endDate?date("dd.MM.yyyy")) >
                <#assign bContains = 1 />
        </#if>
    </#list>
    <#if bContains == 1>
        <#--
        <#assign entry.set />
        -->
        <#assign entries = entries + [entry] />
    </#if>

</#list>

我认为它可能会成功,将其写到资产的某个字段中。而在这种情况下。但是这样也不好,每次都拉数据库

【问题讨论】:

【参考方案1】:

特别是在 FreeMarker 的 Netsuite 分支中,您不会这样做(假设您不能添加用 Java 编写的帮助程序),因为该分支甚至不支持 ?map,它可以用于按计算归档,如date2 在这里。 (尽管如此,?sort_by 从 2.3.31 开始仅支持按单个字段排序,因此您必须做一些技巧,将两个字段连接为一个。即使 ?sort_by 稍后会在 FreeMarker 中得到改进,遗憾的是,这肯定不会进入 Netsuite 分支。)

无论如何,FreeMarker 中的假设是排序和其他此类查询操作(如连接等)是数据访问层的职责,而不是模板的职责。在这种情况下,肯定是 assetEntryLocalService.dynamicQuery 应该支持报告所需的任何排序。

【讨论】:

以上是关于按附加字段“日期”排序的条目的主要内容,如果未能解决你的问题,请参考以下文章

Handsontable 按日期排序下拉项目

如何按日期时间和整数对光标进行排序

将日期/时间戳附加到现有文件

如何按 > 日期对一系列日期求和并将它们附加到熊猫新数据框中的新列?

将 Spring REST 端点配置为在序列化响应对象中的日期字段时忽略附加时区

Rank() 基于列条目,而数据按日期排序