如何在Freemarker中对对象中的项目进行排序

时间:2018-01-23 02:18:40

标签: freemarker

Freemarker中的sort和sort_by内置列表。如何在Freemarker中对对象进行排序?

<#assign myObject = {
    'item1':{'name': 'Name One', 'url': 'https://www.one.com, 'order': 1},
    'item2':{'name': 'Name Two', 'url': 'https://www.two.com, 'order': 2},
    'item3'...
}/>


<#macro displayobjectLinks>
    <ul>
        <#list objectLinks?keys as info>
            <#if (info != "item1")>
                <li><a href="${objectLinks[info].url}">${objectLinks[info].name}</a></li>
            </#if>
        </#list>
    </ul>
</#macro?

如何根据'订单'按顺序显示?
我还需要访问我的对象的键(item1,item2 ......),因为我正在基于它做一些事情。

2 个答案:

答案 0 :(得分:0)

您的对象是一个哈希,内置values,返回一个序列,可以是sorted。所以,你可以这样做:

$str_buffer = '';
$foo =  while(somethign here too){ 
   $str_buffer.= "<tr class='table_headsnonw' style='font-size:12px;'>
                      <td>1</td>
                      <td>
                          3
                      </td>
                      <td>300</td>
                      <td>300</td>
                      <td>300</td>
                      <td>300</td>
                      <td>300</td>
                      <td>300</td>
                  </tr>";
 }



$variable="stuff".$str_buffer." other static stuff";
echo $variable;

请注意,并非所有的哈希都支持这一点,但你会没事的。

答案 1 :(得分:0)

sort_by

返回按给定哈希子变量升序排序的哈希序列。 (对于降序使用,然后使用反向内置。)规则与内置排序相同,不同之处在于序列的子变量必须为哈希,并且必须提供哈希子的名称。决定顺序的变量。例如:

您可以使用以下代码:

<#list objectLinks?sort_by(“ name”)作为信息>