随机化Docpad中的相关帖子

时间:2015-04-10 05:31:16

标签: docpad

我已经安装了docpad的Related插件,我想要做的是我希望它在每个博文的侧边栏中显示五个随机相关的帖子。目前我已经在post.html.jade

中设置了这种方式
div
  h4 Related posts:
  each doc in getRelatedDocuments().slice(0,5)
    a(href=doc.url)= doc.title
    br

所以,它显示了5个帖子,但它们不是随机的。如何随机播放getRelatedDocuments()的输出?

2 个答案:

答案 0 :(得分:1)

您是否尝试过对问题Getting random value from an array进行修改?

我在docpad.coffee文件中创建了一个函数来实现这个解决方案:

getRandomPosts: (howMany) ->
    items = @getCollection('posts').toJSON()
    output = []
    i = 0
    while i < howMany
        doc = items[Math.floor(Math.random() * items.length)]
        output.push(doc)
        i++

    return output

您可能需要在while循环中执行额外的步骤,以检查doc值是否已经在输出数组中,因为Math.floor等可能会返回已使用的值。

答案 1 :(得分:0)

感谢Steve Mc指出我正确的方向。我最终在docpad.coffee

中创建了这个功能
shufflePosts: (items) ->
  i = items.length
  return items if i == 0
  while --i
    j = Math.floor(Math.random() * (i + 1))
    tmp = items[i]
    items[i] = items[j]
    items[j] = tmp
  return items

它基本上是Fisher-Yates混洗算法的实现。在我的帖子布局中,我称之为:

each doc in shufflePosts(getRelatedDocuments()).slice(0,5)
  a(href=doc.url)= doc.title
  br

所以现在一切都很棒,谢谢!