2016-07-13 21 views
4

Annahme - Von dem, was ich verstehe, Liquid funktioniert in einer Weise, dass die Variable page.my_key können mit Namen page und Schlüssel my_key zu einem PHP-Array verglichen werden: $page['my_key']. Nach dieser gleichen Logik könnten wir {{ page.my_key }} mit echo $page['my_key'] vergleichen.Nesting Variablen in Jekyll/Flüssig

Und wir könnten dieses Titelei vergleichen:

---- 
my_key: my_value 
---- 

dieser PHP-Code:

$page['my_key'] = "my_value"; 

Frage - Ich möchte so etwas wie dies tun:

$page['my_key'] = "my_value"; 
$page['my_key2'] = "my_value2"; 
$key = "my_key"; 
echo $page[$key]; 

Alles, was ich denken kann ist:

---- 
my_key: my_value 
my_key2: my_value2 
---- 
{% assign key = 'my_key' %} 
{{ page.{{ key }} }} 

aber das funktioniert nicht ... Ist so etwas möglich, wenn?

Antwort

0

Ich glaube, ich die Lösung gefunden:

---- 
my_key: my_value 
my_key2: my_value2 
---- 
{% assign key = 'my_key' %} 
{{ page[key] }} 

Found it here.

2

Vorsicht: Array und Hash sind zwei verschiedene Tiere.

Erstellen Sie einfach eine array-hash.md (beachten Sie, dass ich es in Markdown für die Kürze geschrieben) Seite in Ihrem Jekyll. Fügen Sie diesen Code ein. Und Sie werden verstehen, wie unterschiedlich sie sind und wie sie auf ihre Artikel zugreifen können.

--- 
layout: default 
title: array-hash 
myArray: 
- item 1 
- item 2 
- one more 
# or 
myArray2: [ item 1, item 2, one more item ] 
myHash: 
item1: toto 
"item 2": titi 
item 3: yoyo 
--- 

{% comment %} +++ Shortcuts 
    a = page.myArray 
    h = page.MyHash 
    h2 = page.myArray2 
{% endcomment %} 

{% assign a = page.myArray %} 
{% assign a2 = page.myArray2 %} 
{% assign h = page.myHash %} 

## Arrays 

page.myArray : {{ a }} 

page.myArray with inspect : {{ a | inspect }} 

page.myArray with join : {{ a | join:", " }} 

page.myArray2 : {{ a2 | inspect }} 

### Looping the array 
<ul> 
{% for item in a %} 
<li>{{ item | inspect }}</li> 
{% endfor %} 
</ul> 

### Targeting a specific item in the array 

{% comment %} arrays start at zero {% endcomment %} 
second element in the array = {{ a[1] }} 

Note that {% raw %}{{ a["1"] }}{% endraw %} will not work. You need to pass 
an integer and not a string. 

Test (not working) : { a["1"] } 

## Hashes 

page.myHash : {{ h }} 

#### looping the hash 

{% for item in h %} 
{{ item | inspect }} 
{% endfor %} 

You note that in the loop we get arrays that returns **key as item[0]** 
and **value as item[1]** 

The loop can then look like : 

<ul> 
{% for item in h %} 
<li>{{ item[0] }} : {{ item[1] }}</li> 
{% endfor %} 
</ul> 

### Targeting a specific item in the hash 

**Item1** due to the absence of space in the key name, can both me accessed 
by dot notation (h.item1) or bracket notation (h["item1"]). 

hash.item1 : {{ h.item1 }} 

hash["item1"] : {{ h.["item1"] }} 

Item 2 and 3, containing a space in their key string can only be accessed with 
bracket notation : 

hash.item 2 (not working) : {{ h.item 2 }} 

hash["item 2"] : {{ h.["item 2"] }} 

hash.item 3 (not working) : {{ h.item 3 }} 

hash["item 3"] : {{ h.["item 3"] }}