簡體   English   中英

Jekyll,液體,隨機數

[英]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>&ldquo;{{ site.data.inspirational-quotes[random].quote }}&rdquo; <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

安裝

  1. 將上述代碼另存為random_hex.rb並將文件放在_plugins目錄中。
  2. 重啟 Jekyll。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM