【问题标题】:Sort by nested field value in FTL liferay按 FTL liferay 中的嵌套字段值排序
【发布时间】:2017-12-31 10:29:14
【问题描述】:

我在liferay中创建的结构如下图:

{
    "availableLanguageIds": [
        "en_US"
    ],
    "defaultLanguageId": "en_US",
    "fields": [
        {
            "label": {
                "en_US": "Image"
            },
            "predefinedValue": {
                "en_US": ""
            },
            "style": {
                "en_US": ""
            },
            "tip": {
                "en_US": "Upload the image to be displayed in the Small Banner"
            },
            "dataType": "image",
            "fieldNamespace": "ddm",
            "indexType": "keyword",
            "localizable": true,
            "name": "smallImage",
            "readOnly": false,
            "repeatable": true,
            "required": true,
            "showLabel": true,
            "type": "ddm-image",
            "nestedFields": [
                {
                    "label": {
                        "en_US": "Priority of Image"
                    },
                    "predefinedValue": {
                        "en_US": "0"
                    },
                    "style": {
                        "en_US": ""
                    },
                    "tip": {
                        "en_US": "Priority of the uploaded Image. Lower the number, higher the priority."
                    },
                    "dataType": "integer",
                    "fieldNamespace": "ddm",
                    "indexType": "keyword",
                    "localizable": true,
                    "name": "imagePriority",
                    "readOnly": false,
                    "repeatable": false,
                    "required": true,
                    "showLabel": true,
                    "type": "ddm-integer"
                }
            ]
        }
    ]
}

现在在模板中,我想使用图像的优先级字段对其进行排序。我的模板如下图:

<div id="example2" class="slider-pro">
    <div class="sp-slides">
        <#if smallImage.getSiblings()?has_content>
            <#list smallImage.getSiblings()?sort_by(["properties","imagePriority"]) as cur_smallImage>
                <#if cur_smallImage.getData()?? && cur_smallImage.getData() != "">
                    <div class="sp-slide">
                        <img class="sp-image" alt="${cur_smallImage.getAttribute("alt")}" src="${cur_smallImage.getData()}" data-src="${cur_smallImage.getData()}" data-retina="${cur_smallImage.getData()}" />
                    </div>
                </#if>
            </#list>
        </#if>
    </div>
</div>

我也尝试按 ?sort_by("cur_smallImage.imagePriority") 进行排序,但它没有工作。我想按指定的优先级顺序显示图像。
请帮忙。

【问题讨论】:

  • 可以打印cur_smallImage的图片优先级吗?如果不是,那么问题与?sort_by 无关。 (顺便说一句,foo.barBar() 可以写成foo.bar。这样更容易阅读模板。)
  • 优先级正在打印,但我想按指定的优先级对它们进行排序
  • 它是如何打印的? (示例中没有。)如果我看到它是如何打印的,那么肯定更容易知道如何按它排序,或者为什么不能按它排序。
  • 我上传了两张图片,一张图片的优先级保持为1,另一张为0。所以现在我想按照指定的优先级升序对图片进行排序。我将其打印为 ${cur_smallImage.imagePriority.data}
  • 那么应该是&lt;#list smallImage.siblings?sort_by(["imagePriority", "data"]) as cur_smallImage&gt;

标签: freemarker liferay-7 webcontent


【解决方案1】:

如果您要用于排序的子变量在更深层次上(即,如果它是子变量的子变量等),那么您可以使用序列作为参数,指定名称导致所需子变量的子变量。例如:

<#assign members = [
    {"name": {"first": "Joe", "last": "Smith"}, "age": 40},
    {"name": {"first": "Fred", "last": "Crooger"}, "age": 35},
    {"name": {"first": "Amanda", "last": "Fox"}, "age": 25}]>

按名称排序。最后:

<#list members?sort_by(['name', 'last']) as m>
- ${m.name.last}, ${m.name.first}: ${m.age} years old
</#list>

取自: https://freemarker.apache.org/docs/ref_builtins_sequence.html#ref_builtin_sort_by

【讨论】:

    猜你喜欢
    • 2018-09-13
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2018-10-22
    • 2019-10-25
    • 2015-10-24
    • 2018-02-12
    相关资源
    最近更新 更多