Как сгенерировать случайное число в жидком магазине?

Если логика содержит объект даты, обратите внимание, что значение будет текущим временем, когда страница была в последний раз создана из шаблона, а не когда страница представлена ​​пользователю, если задействовано кэширование или создание статического сайта в соответствии со статьей Shopify. Он будет возвращать одинаковое число каждый раз.

Важно помнить, что Liquid — это язык шаблонов, а не язык программирования. Он не предназначен для генерации действительно случайных чисел — он предназначен для кэширования серверов, доставляющих контент. Для настоящей случайности вы захотите использовать язык программирования, такой как Javascript.

Dave B 16.12.2020 18:25

Я также ищу эту функцию, которая кажется проблематичной из-за кэширования. В моем случае я хочу создать href для случайной статьи в моем блоге в зависимости от случайного числа, например, в списке между статьей 1 и статьей 30. Я не знаю, как это возможно, поскольку я не думаю, что javascript может взаимодействовать с жидкостью, чтобы служить другим звеном?

DevOverflow 03.02.2021 13:35

Приведенные ниже ответы правильно показывают, как генерировать случайное число в Liquid, но результаты, как вы упомянули, обрабатываются. Лучше отредактируйте этот вопрос и задайте новый вопрос, если вы хотите, например, показать случайный пост в Shopify.

TimoSolo 19.08.2022 11:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
4 508
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Используйте код для генерации случайного числа

{% capture random %}{{ 'now' | date: "%09N" }}{% endcapture %}

вывести его с помощью

{{random}}

Кажется, не обновляет случайное число, когда я пытаюсь это сделать

DevOverflow 03.02.2021 13:25

@DevOverflow это связано с тем, что объект даты кэшируется и не возвращает динамическое значение. Это обычная проблема Shopify.

TwistedOwl 29.05.2021 12:59
{% assign random_number = "now" | date: "%N" | modulo: 1000 | plus: 0 %}

Работал для меня, предоставляет случайное число от 0 до 1000.

| plus: min ничего не делает в этом случае, потому что вы не определили min
TimoSolo 19.08.2022 11:12

@TimoSolo забыл включить, я обновил ответ.

Chris Hayes 19.08.2022 16:34
Ответ принят как подходящий

Вы можете использовать метку времени, чтобы получить большое число, и использовать математику, чтобы получить случайный результат. Например, чтобы получить случайное число от 0 до 100:

{% assign randomNumber = "now" | date: "%N" | modulo: 100 %}

(помните, что это будет генерировать целое число от 0 до 99 включительно.)

Или случайное число от 10 до 20:

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

NB: файлы Liquid кэшируются, поэтому случайное число генерируется только при создании страницы и не меняется каждый раз, когда вы просматриваете страницу. Для этого вам понадобится javascript.

Другие вопросы по теме