Прокрутите дату сообщений, чтобы сделать архив в DocPad

Вот некоторый псевдокод того, чего я хочу достичь:

for year in post.date
    h1 year
    for month in post.date
        h2 month
        ul
            li post entry

Это псевдокод. Однако у меня недостаточно опыта, чтобы добиться этого. Файл, в котором это произойдет, выглядит следующим образом: https://github.com/Greduan/eduantech.docpad/blob/master/src/documents/posts.html.eco

И это будет на языке eco. Я также использую Moment.js, если это необходимо.

Даже если вы не предоставите точный код, общее направление будет очень признательно. :)

EDIT: Я хотел бы добиться чего-то подобного: http://swannodette.github.io/archive.html

EDIT 2: Вот часть кода, который я придумал:

for post in @getCollection('posts').toJSON()

    for year in post.date
        h1 @moment(post.date).format('YYYY')

        for month in post.date
            h2 @moment(post.date).format('MMMM')
            ul ->
                li ->
                    @postDatetime(post.date, 'll') + ' » '
                    a href:'post.url', post.title

Пока он просто ничего не выводит. Итак, я думаю, что я просто ошибся в именах некоторых переменных, что, как мне кажется, я и сделал. Я ценю любую помощь. :)

Кстати, не беспокойтесь о функции @postDatetime. Что с работает без проблем где-то еще. :)


person greduan    schedule 06.08.2013    source источник
comment
Вы хотите сгруппировать списки постов по году, а затем по месяцу? Или вы хотите вывести сообщение по году и месяцу?   -  person balupton    schedule 07.08.2013
comment
@balupton Я хочу, чтобы они группировали их по месяцам и годам, да. Спасибо за вашу помощь. :)   -  person greduan    schedule 07.08.2013


Ответы (1)


Если у вас уже есть посты, отсортированные по дате, то ваша коллекция уже сгруппирована по годам, месяцам. Все, что вам нужно сделать, это просмотреть всю коллекцию и вставить заголовки года и месяца, когда значения года/месяца изменятся. Что-то вроде этого:

yr = -1 //temporary vars for storing current year value in loop
mnth = -1 //same for month value
monthNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]

div style:'text-align:left;font-size:20px;width:500px;margin-right:auto;margin-left:auto', ->

for post in @getCollection('posts').toJSON()
    if post.date.getFullYear() isnt yr
        yr = post.date.getFullYear()
        mnth = -1 
        h1 yr.toString()
    if post.date.getMonth() isnt mnth
        mnth = post.date.getMonth() 
        h2 style:'padding-left:10px;', monthNames[mnth]
        ul style:'padding-left:50px;', ->
    li ->
        post.date.toDateString()

Это похоже на то, что вам нужно?

person Steve Mc    schedule 12.09.2013
comment
Прямо сейчас я немного отвлекся от своего веб-сайта, но как только смогу, я изучу это, пока, похоже, он делает то, что мне нужно, я вернусь с отзывами позже. :) - person greduan; 12.09.2013
comment
Это прекрасно работает! Я внесу в него некоторые изменения, чтобы вывести то, что хочу, но он достигает именно того, что я хотел. Огромное спасибо! :) - person greduan; 16.09.2013