[英]Jekyll, Liquid, Random numbers
我想要一組鏈接
<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 和液體來生成站點。 我必須使用 jekyll 的內置部分,因為我在 github 上托管。 我不確定從哪里開始。 谷歌對該主題的搜索毫無結果。
這是從 _data 中的 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>
我發現這篇文章對使用 Liquid 生成數字很有用,它並不直接,但它是使用 min/max 生成隨機數的最優雅的方法。
以下示例適用於 65 到 80 之間的數字。
{% assign min = 65 %}
{% assign max = 80 %}
{% assign diff = max | minus: min %}
{% assign randomNumber = "now" | date: "%N" | modulo: diff | plus: min %}
我對我正在開發的網站也有類似的想法,於是寫了一個插件(見下文)。 正如彼得指出的那樣,隨機選擇將在生成時發生,因此如果您正在查看動態內容,則必須查看其他地方。
無論如何,這在我寫的插件中(我將它放在我的 _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)
我有一個類似的願望,並開始定義一個自定義的 Liquid 標簽(參見http://github.com/mojombo/jekyll/wiki/Plugins ),它通過context.registers
訪問帖子並隨機選擇一些帖子,但請注意,一旦 Jekyll生成您的站點,該隨機選擇將保持不變,直到站點重新生成。 我會建議一個不同的選擇:讓 Jekyll 將所有這些帖子鏈接寫入 JavaScript 中的一個數組(包含在布局中),該數組被打亂,然后前三個鏈接顯示在頁面上。 您甚至可以通過調用setInterval()
來增強它,以便這三個鏈接與數組中的其他鏈接一起旋轉。 這不是最優雅的解決方案,但無論如何動態生成隨機內容似乎並不完全符合 Jekyll 的設計理念。
我寫了一個小的 Jekyll 插件來生成任意長度的隨機十六進制字符串。 該插件與我的其他 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
。
random_hex.rb
並將文件放在_plugins
目錄中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.