mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-29 22:29:56 +02:00
@@ -21,6 +21,8 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/spf13/cast"
|
||||
|
||||
"github.com/gohugoio/hugo/common/collections"
|
||||
"github.com/gohugoio/hugo/compare"
|
||||
|
||||
@@ -225,6 +227,10 @@ func (p Pages) groupByDateField(sorter func(p Pages) Pages, formatter func(p Pag
|
||||
sp = sp.Reverse()
|
||||
}
|
||||
|
||||
if sp == nil {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
date := formatter(sp[0].(Page))
|
||||
var r []PageGroup
|
||||
r = append(r, PageGroup{Key: date, Pages: make(Pages, 0)})
|
||||
@@ -303,23 +309,36 @@ func (p Pages) GroupByLastmod(format string, order ...string) (PagesGroup, error
|
||||
// Valid values for order is asc, desc, rev and reverse.
|
||||
// For valid format strings, see https://golang.org/pkg/time/#Time.Format
|
||||
func (p Pages) GroupByParamDate(key string, format string, order ...string) (PagesGroup, error) {
|
||||
sorter := func(p Pages) Pages {
|
||||
// Cache the dates.
|
||||
dates := make(map[Page]time.Time)
|
||||
|
||||
sorter := func(pages Pages) Pages {
|
||||
var r Pages
|
||||
for _, e := range p {
|
||||
param := resource.GetParamToLower(e, key)
|
||||
if _, ok := param.(time.Time); ok {
|
||||
r = append(r, e)
|
||||
|
||||
for _, p := range pages {
|
||||
param := resource.GetParamToLower(p, key)
|
||||
var t time.Time
|
||||
|
||||
if param != nil {
|
||||
var ok bool
|
||||
if t, ok = param.(time.Time); !ok {
|
||||
// Probably a string. Try to convert it to time.Time.
|
||||
t = cast.ToTime(param)
|
||||
}
|
||||
}
|
||||
|
||||
dates[p] = t
|
||||
r = append(r, p)
|
||||
}
|
||||
|
||||
pdate := func(p1, p2 Page) bool {
|
||||
p1p, p2p := p1.(Page), p2.(Page)
|
||||
return resource.GetParamToLower(p1p, key).(time.Time).Unix() < resource.GetParamToLower(p2p, key).(time.Time).Unix()
|
||||
return dates[p1].Unix() < dates[p2].Unix()
|
||||
}
|
||||
pageBy(pdate).Sort(r)
|
||||
return r
|
||||
}
|
||||
formatter := func(p Page) string {
|
||||
return resource.GetParamToLower(p, key).(time.Time).Format(format)
|
||||
return dates[p].Format(format)
|
||||
}
|
||||
return p.groupByDateField(sorter, formatter, order...)
|
||||
}
|
||||
|
Reference in New Issue
Block a user