Random 杰基尔,液体,随机数

Random 杰基尔,液体,随机数,random,jekyll,liquid,Random,Jekyll,Liquid,我想有一个链接集 <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 articl

我想有一个链接集

<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和liquid生成站点。在github上托管时,我必须使用jekyll的内置部分。我真的不知道从哪里开始。谷歌在这个主题上的搜索是徒劳的。

    我也有类似的愿望,开始定义一个自定义的液体标签(请参阅),它通过
    上下文访问帖子。注册
    和随机选择的帖子,但请注意,一旦Jekyll生成了你的站点,随机选择将保持不变,直到站点重新生成。我建议另一种选择:让Jekyll用JavaScript将所有这些帖子链接写入一个数组(包含在布局中的内联),该数组将被洗牌,最上面的三个链接将显示在页面上。您甚至可以通过调用
    setInterval()
    来增强这一点,使这三个链接与数组中的其他链接一起旋转。这不是最优雅的解决方案,但动态生成随机内容似乎并不完全符合Jekyll的设计理念。

    这是从数据中的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>
    
    {%assign random=site.time |日期:“%s%N”|模数:site.data.inspirational-quotes.size%}
    &ldquo;{{site.data.励志语录[random].quote}}&rdquo;{{site.data.励志语录[random].person}
    
    我发现使用液体生成数字很有用,它不是直接的,尽管如此,它是用min/max生成随机数的最优雅的方法

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

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

    对于我正在开发的一个网站,我有一个类似的想法,并尝试编写一个插件(见下文)。正如Peter所指出的,随机选择将在生成时发生,因此,如果你在看动态的东西,你将不得不看其他地方

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

    #输出一个随机页面链接
    #
    #用法:
    #{{site.pages | random_page}
    #{{site.collection_name | random_page}
    #{%assign myPage=site.collection_name | random_page%}
    #   
    #{%assign myPage=site.pages | random_page%}
    #   
    模块随机页面选择器
    def随机_页面(输入)
    索引=兰德(0…输入长度)
    “#{input[index].url}”
    结束
    结束
    液体::模板。寄存器过滤器(随机页面选择器)
    
    我编写了一个小的Jekyll插件来生成任意长度的随机十六进制字符串。和我的其他Jekyll插件一起使用。以下是源代码:

    需要“securerandom”
    模随机数
    def随机_十六进制_字符串(n)
    SecureRandom.hex(n)
    结束
    结束
    液体::模板。寄存器\过滤器(随机数)
    
    用法示例 这将生成一个6个字符长的随机十六进制字符串,并将结果存储在名为
    id
    的液体变量中。 因为这个插件是作为一个过滤器实现的,所以首先写要生成的十六进制字符数(6),然后写一个管道(竖条), 然后是筛选器的名称(
    random
    )。

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

    装置
  • 将上述代码另存为
    random_hex.rb
    ,并将文件放入
    \u plugins
    目录。
  • 重启杰基尔。

  • 此更改始终有效或仅在重建整个站点时有效?是的,Jekyll是一个静态站点生成器,因此无法在构建时间之外执行任何动态操作。而不是使用我使用的page.title.size的时间/日期,它允许此更改在包含中工作(每个站点的时间/日期相同)。我用它在文章/页面底部放置一条随机广告/消息。你能给我们一个完整的例子(json格式、全局变量等)吗,我无法完成这项工作…如何使数字介于0和1之间,我觉得这种方法将返回整数而不是实数。
    # 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)
    
    {% assign id = 6 | random_hex_string %}