2015-07-24 18 views
5

Jekyll versione 2.5.3dati Jekyll pagina non persistono

Stiamo cercando di scrivere un plugin per promuovere i contenuti che è agnostico se o non la sua una pagina o un post. Tuttavia c'è qualche differenza tra pagine e post che non è chiara.

# 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 

Tutte le idee sul perché mutare l'hash .data per i messaggi è accessibile in liquido, ma mutando il .data hash per le pagine non ha alcun effetto?

Abbiamo anche provato questo con .data["title"] e ha un effetto su posts ma i titoli page non sono stati modificati.


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

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

cede

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

Nel mio codice prod era 'page'. Nel mio codice di riproduzione erano 'pages', buona cattura; L'ho spostato di nuovo a 'page' e ho lo stesso problema. – Fresheyeball

+0

@Fresheyeball hai qualche aggiornamento su quella domanda? – EugZol

+0

Non dal precedente. – Fresheyeball

risposta

1

vi manca qualcosa. L'aggiunta di valori a data funziona perfettamente bene sia per pagine che per post.

Vedere my repository per riferimento.

Here aggiungo 'pippo' attribuire a tutte le pagine e post

_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 

Qui aggiungo 'pippo' al layout di messaggi:

pubblicare .html

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

E per pages layout:

page.html

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

Dopo correvo jekyll b riesco a vedere l'uscita sia in post e page, proprio dove mi aspetto che siano.

Nel ramo separato ho ricreato il vostro setup, dove eseguire iterazioni su tutte le pagine e post:

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 

(Si noti che la proprietà è 'bar 'Per la pagina, e 'Baz' per il post)

rende come previsto:.

sito/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 fammi provare questo. – Fresheyeball

+0

Non sai mai quali linee un uomo può attraversare per 50 ripetizioni. taglie. Ho persino creato un repository per te! : D – EugZol

Problemi correlati