2015-07-24 6 views
5

Jekyll Version 2.5.3Jekyll Seite Daten nicht bestehen bleiben nicht

Wir versuchen, ein Plugin zu schreiben, Inhalte zu fördern, ob seine eine Seite oder ein Post Agnostiker zu. Es gibt jedoch einige Unterschiede zwischen Seiten und Posts, die nicht klar sind.

# this does not work 
    site.pages.each do |page| 
    # this does not show up in liquid 
    page.data['baz'] = 'Foo' 
    end 

    # this does work 
    site.posts.each do |post| 
    # this does show up in liquid 
    post.data['baz'] = 'Bar' 
    end 

Irgendwelche Ideen, warum Mutieren der .data Hash für Beiträge in Flüssigkeit zugänglich ist, aber die .data Hash für Seiten mutiert keine Wirkung hat?

Wir haben dies auch mit .data["title"] getestet und es hat Auswirkungen auf posts aber page Titel sind nicht betroffen.


{% for post in site.posts %} 
    <div class="postbaz">{{ post.baz }}</div> 
{% endfor %} 

{% for page in site.pages %} 
    <div class="pagebaz">{{ page.baz }}</div> 
{% endfor %} 

ergibt

<div class="postbaz">Foo</div> 
<div class="postbaz">Foo</div> 
<div class="postbaz">Foo</div> 
<div class="pagebaz"></div> 
<div class="pagebaz"></div> 
+0

In meinem prod Code war es 'page'. In meinem Reproduktionscode war es "Seiten", guter Fang; Ich habe es auf "Seite" verschoben und habe das gleiche Problem. – Fresheyeball

+0

@Fresheyeball Hast du ein Update zu dieser Frage? – EugZol

+0

Nicht seit dem letzten. – Fresheyeball

Antwort

1

Sie etwas fehlen. Das Hinzufügen von Werten zu data funktioniert einwandfrei sowohl für Seiten als auch für Posts.

Siehe my repository als Referenz.

Here I 'foo' Attribut hinzufügen zu allen Seiten und Beiträge

_plugins/foo.rb

module Foo 
    class Generator < Jekyll::Generator 
    def generate(site) 
     puts "Our plugin is running" 
     puts site.pages.inspect 
     puts site.posts.inspect 
     site.pages.each do |page| 
     page.data['foo'] = 'bar' 
     end 
     site.posts.each do |post| 
     post.data['foo'] = 'bar' 
     end 
    end 
    end 
end 

Hier füge ich 'foo' auf Beiträge Layout:

Post .html

<article class="post-content"> 
    {{ content }} 
    {{ page.foo }} 
</article> 

Und pages layout:

seite.html

<article class="post-content"> 
    {{ content }} 
    {{ page.foo }} 
</article> 

Nachdem ich jekyll b lief ich sowohl post und page, sehen sie nur, wo ich erwarten, dass in der Ausgabe.

In separaten Zweig ich das Setup neu erstellt, in dem Sie alle Seiten durchlaufen und Beiträge:

default.html (source)

{% for post in site.posts %} 
    <div class="postbaz">{{ post.foo }}</div> 
{% endfor %} 

{% for page in site.pages %} 
    <div class="pagebaz">{{ page.foo }}</div> 
{% endfor %} 

_plugins/foo.rb (source)

site.pages.each do |page| 
    page.data['foo'] = 'bar' 
end 
site.posts.each do |post| 
    post.data['foo'] = 'baz' 
end 

(Beachten Sie, dass die Eigenschaft 'bar ist 'Für Seite, und 'baz' für post)

Es macht wie erwartet.

Website/index.html (source)

<div class="postbaz">baz</div> 



<div class="pagebaz">bar</div> 

<div class="pagebaz">bar</div> 

<div class="pagebaz">bar</div> 

<div class="pagebaz">bar</div> 
+0

Ok lass mich das versuchen. – Fresheyeball

+0

Sie wissen nie, welche Linien ein Mann für eine 50-rep überqueren kann. Kopfgeld. Ich habe sogar ein Repository für dich gebaut! : D – EugZol