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>“{{ site.data.inspirational-quotes[random].quote }}” <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 %}