2012-02-08 11 views
10

Estoy tratando de elegir un elemento aleatorio de una matriz: ¿es posible usar Liquid/Jekyll?Líquido: ¿Puedo obtener un elemento aleatorio de una matriz?

Puedo crear una matriz y acceder a un índice determinado ... pero ¿hay alguna manera de "mezclar" la matriz y luego seleccionar un índice, y así obtener un elemento aleatorio de la matriz?

prefix: ["Foo", "Bar", "Baz"] 
--- 

{{ page.prefix[1] }} 

# outputs "Bar" 
+0

Esta pregunta ahora tiene una respuesta aquí: https://stackoverflow.com/a/28323813/2838033 - agregando esto en caso de que alguien provenga de Google. – mechalynx

Respuesta

9

El líquido no tiene un filtro para elegir un elemento aleatorio de una matriz o un intervalo entero.

Si quieres que Jekyll haga eso, deberías crear una extensión para agregar ese filtro de líquido.

Sin embargo, debo señalar que al hacerlo elegiría un elemento aleatorio cada vez que se genera la página, pero no cada vez que se ve la página.

Si desea obtener diferentes valores aleatorios cada vez que visita una página, su mejor opción es usar javascript y dejar que el cliente elija un valor aleatorio. Sin embargo, puede usar líquido para generar el javascript relevante.

2

Se puede crear una plugin para obtener un elemento aleatorio Algo como esto:

module Jekyll 
    module RandomFilter 
    # Use sample to get a random value from an array 
    # 
    # input - The Array to sample. 
    # 
    # Examples 
    # 
    # random([1, 2, 3, 4, 5]) 
    # # => ([2]) 
    # 
    # Returns a randomly-selected item out of an array. 
    def random(input) 
     input.sample(1) 
    end 
    end 
end 

Liquid::Template.register_filter(Jekyll::RandomFilter) 

luego hacer algo como esto en su plantilla para poner en práctica:

{% assign myArray = '1|2|3|4|5 | split: '|' %} 
{% assign myNumber = myArray | random %} 
+0

¿Cómo puedo hacer esto ** en Shopify **? – ADTC

+0

@ADTC ¡No sé! – Brendan

+0

Creo que es la respuesta por usuario2517028 – ADTC

1

Usted puede ser capaz de hacer eso simplemente en estado líquido, pero podría menos de solución genérica como la que se proporcionado por @Brendan. De acuerdo con this article, puede generar un número de líquido aleatorio entre mín & máx. Tan simplemente:

  • Asigne el mínimo a 0 y máximo a la longitud de su matriz.
  • Pasa el cursor sobre la matriz hasta que encuentres tu número aleatorio y elijas tu elemento.

Aquí es un ejemplo, obtener su índice de matriz aleatoria:

{% assign min = 0 %} 
{% assign max = prefix.size %} 
{% assign diff = max | minus: min %} 
{% assign randomNumber = "now" | date: "%N" | modulo: diff | plus: min %} 

luego encontrar su valor aleatorio:

{{ prefix[randomNumber] }} 
0

La respuesta 2018 es

{% assign prefix = page.prefix | sample: 2 %} 
{{ prefix[0] }} 

A medida que la OP preguntó acerca de Jekyll, esto se puede encontrar en: https://jekyllrb.com/docs/templates/

+0

Mostrar documentación. No lo encuentro en la referencia de Liquid. – ADTC

+0

Actualizado. Aviso, específico de Jekyll, en línea con el OP. – Merovex

Cuestiones relacionadas