【问题标题】:Jekyll, Liquid, Random numbersJekyll,液体,随机数
【发布时间】:2011-09-20 16:16:24
【问题描述】:

我想要一组链接

<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 部分。我不确定从哪里开始。谷歌对该主题的搜索没有结果。

【问题讨论】:

    标签: random jekyll liquid


    【解决方案1】:

    这是从 _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>
    

    【讨论】:

    • 此更改始终有效还是仅在重建整个站点时有效?
    • 是的,Jekyll 是一个静态站点生成器,所以在构建时间之外不能做任何动态的事情。
    • 我使用了 page.title.size 而不是使用时间/日期,它允许它在包含中工作(每个时间/日期都相同)。我用它在文章/页面底部放置随机广告/消息。
    • 你能不能给我们一个完整的例子(json格式,全局变量等),我无法得到这个工作......
    【解决方案2】:

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

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

    {% assign min = 65 %}
    {% assign max = 80 %}
    {% assign diff = max | minus: min %}
    {% assign randomNumber = "now" | date: "%N" | modulo: diff | plus: min %}
    

    【讨论】:

    • 如何使数字介于 0 和 1 之间,我觉得这种方法会返回整数而不是实际值。
    【解决方案3】:

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

    总之,这个在我写的插件里(我把它放在我的_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)
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        我写了一个小的 Jekyll 插件来生成任意长度的随机十六进制字符串。 plugin is documented 以及我的其他 Jekyll 插件。以下是源代码:

        require 'securerandom'
        
        module RandomNumber
            def random_hex_string(n)
              SecureRandom.hex(n)
            end
        end
        
        Liquid::Template.register_filter(RandomNumber)
        

        使用示例

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

        {% assign id = 6 | random_hex_string %}
        

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

        安装

        1. 将上述代码另存为random_hex.rb,并将文件放在_plugins目录下。
        2. 重启 Jekyll。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-05-04
          • 1970-01-01
          • 2018-11-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-27
          • 2019-05-28
          • 2020-07-08
          相关资源
          最近更新 更多