Джекилл, Жидкость, Случайные числа - PullRequest
11 голосов
/ 20 сентября 2011

Я хотел бы иметь набор ссылок

<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.Я не совсем уверен, с чего начать.Поиски в Google по этой теме бесплодны.

Ответы [ 4 ]

17 голосов
/ 04 февраля 2015

Это выбор случайной цитаты из файла JSON в _data, но принцип должен работать и с вашими сообщениями:

{% 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>
6 голосов
/ 17 октября 2017

Я нашел эта статья полезной для генерации чисел с использованием Liquid, это не просто, тем не менее, это самый элегантный способ генерировать случайное число с мин / макс.

Следующий пример относится к числу от 65 до 80.

{% assign min = 65 %}
{% assign max = 80 %}
{% assign diff = max | minus: min %}
{% assign randomNumber = "now" | date: "%N" | modulo: diff | plus: min %}
2 голосов
/ 10 октября 2011

У меня было похожее желание, и я приступил к определению пользовательского тега Liquid (см. http://github.com/mojombo/jekyll/wiki/Plugins), который просматривал посты через context.registers и выбранные произвольно, но учтите, что как только Jekyll генерирует ваш сайт, этот случайный выборостается статичным до тех пор, пока сайт не будет обновлен. Я бы предложил другой вариант: пусть Джекилл записывает все эти ссылки на посты в массив на JavaScript (включается в макет), который перетасовывается, и затем на странице отображаются первые три ссылки.Вы могли бы даже улучшить это, чтобы эти три ссылки вращались вместе с другими в массиве с помощью вызова setInterval (). Это не самое элегантное решение, но динамическое генерирование случайного контента, похоже, не совсем соответствует философии дизайна Jekyll..

1 голос
/ 26 января 2018

У меня была похожая идея для веб-сайта, над которым я работаю, и прибегнул к написанию плагина (см. Ниже). Как указал Питер, случайный выбор произойдет во время генерации, поэтому, если вы смотрите на что-то динамическое, вам придется искать в другом месте.

Во всяком случае, это в плагине, который я написал (я поместил его в свой каталог _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)
...