15

我想要一组链接

<li>
  <h2>Random Articles</h2>  
  <ul>
    <li><a href="#">Old article 1</a></li>
    <li><a href="#">Old article 1</a></li>
    <li><a href="#">Old article 1</a></li>
  </ul>
</li>

但我想从随机选择的帖子中生成链接。我正在使用 jekyll 和液体来生成网站。当我在 github 上托管时,我必须使用内置的 jekyll 部分。我不确定从哪里开始。谷歌对该主题的搜索没有结果。

4

5 回答 5

19

这是从 _data 中的 JSON 文件中选择一个随机引用,但该原则也适用于您的帖子:

{% assign random = site.time | date: "%s%N" | modulo: site.data.inspirational-quotes.size %}

<blockquote>&ldquo;{{ site.data.inspirational-quotes[random].quote }}&rdquo; <cite>{{ site.data.inspirational-quotes[random].person }}</cite></blockquote>
于 2015-02-04T14:27:13.277 回答
10

我发现这篇文章对于使用 Liquid 生成数字很有用,虽然它不是直截了当的,但它是生成具有最小值/最大值的随机数的最优雅的方法。

以下示例适用于 65 和 80 之间的数字。

{% assign min = 65 %}
{% assign max = 80 %}
{% assign diff = max | minus: min %}
{% assign randomNumber = "now" | date: "%N" | modulo: diff | plus: min %}
于 2017-10-17T10:21:50.260 回答
4

我对正在开发的网站也有类似的想法,并试图编写一个插件(见下文)。正如彼得指出的那样,随机选择将在生成时发生,因此如果您正在寻找动态的东西,您将不得不寻找其他地方。

无论如何,这在我写的插件中(我把它放在我的 _plugins 目录中,例如.../_plugins/randomPage.rb):

# Outputs a random page link
#
# Usage:
#   {{ site.pages | random_page }}
#   {{ site.collection_name | random_page }}
#   {% assign myPage = site.collection_name | random_page %}
#   <a href="{{ myPage }}">{{myPage}}</a>
#   {% assign myPage = site.pages | random_page %}
#   <a href="{{ myPage }}">{{myPage}}</a>

module RandomPageSelector
    def random_page( input )
        index = rand(0...input.length)
        "#{input[index].url}"
    end
end

Liquid::Template.register_filter(RandomPageSelector)
于 2018-01-26T18:39:58.540 回答
3

我有类似的愿望并开始定义一个自定义 Liquid 标签(请参阅http://github.com/mojombo/jekyll/wiki/Plugins),它通过context.registers随机选择的帖子访问帖子,但请注意,一旦 Jekyll 生成您的网站,在重新生成站点之前,该随机选择保持静态。我会建议一个不同的选择:让 Jekyll 将所有这些帖子链接写入 JavaScript 中的数组(包括布局中的内联),然后将其打乱,然后将前三个链接显示在页面上。您甚至可以增强这一点,以便这三个链接通过setInterval()调用与阵列中的其他链接一起旋转。这不是最优雅的解决方案,但无论如何动态生成随机内容似乎并不完全符合 Jekyll 的设计理念。

于 2011-10-10T19:06:02.003 回答
1

我写了一个小的 Jekyll 插件来生成任意长度的随机十六进制字符串。该插件与我的其他 Jekyll 插件一起记录在案。这是源代码:

require 'securerandom'

module RandomNumber
    def random_hex_string(n)
      SecureRandom.hex(n)
    end
end

Liquid::Template.register_filter(RandomNumber)

使用示例

这会生成一个 6 个字符长的随机十六进制字符串,并将结果存储在名为 的 Liquid 变量中id。因为这个插件是作为过滤器实现的,所以先写要生成的十六进制字符数(6),后面是竖线(竖线),然后是过滤器的名称(random)。

{% assign id = 6 | random_hex_string %}

生成的 6 个字符可能是:51e2160d4bdf.

安装

  1. 将上面的代码另存为random_hex.rb,并将文件放在_plugins目录中。
  2. 重启 Jekyll。
于 2020-10-05T20:01:40.817 回答