2011-09-20 13 views
6

Ho un plug-in di blocco Jekyll (Liquid) e vorrei rilevare qual è la pagina corrente. Vedo che un passaggio viene passato al rendering e che posso recuperare l'oggetto del sito corrente come context.registers [: sito]. Tuttavia, i tentativi di ottenere la pagina corrente come context.registers [: page] falliscono.Come posso rilevare la pagina corrente in un plug-in di tag Jekyll?

Il problema che sto cercando di risolvere è creare un semplice plug-in per bloccare se la pagina corrente è la pagina menzionata nel tag ed evidenziarla.

Qualsiasi consiglio sarebbe molto apprezzato.

Grazie!

risposta

15

Risulta possiamo anche fare questo tipo:

def render(context) 
    page_url = context.environments.first["page"]["url"] 

che non è ovvio, ma non richiede l'applicazione di patch il codice.

+0

Questo è brillante. E completamente non intuitivo. Grazie per aver capito. – cboettig

+2

E se fosse necessario prendere l'oggetto 'context' su' initialize'? – jackyalcine

1

Non penso che ci sia un buon modo di farlo con Jekyll così com'è. convertible.rb passa solo l'oggetto site a Liquid, che non contiene dati specifici della pagina.

Suggerirei semplicemente di modificare convertible.rb per passare i dati necessari, inviare una richiesta di pull al progetto principale per inserire le modifiche e utilizzare localmente la forcella per generare il sito. Urrà per l'open source!

La seguente patch banale lavora per me a livello locale contro Jekyll 0.11.0, facendo una pagina di hash disponibili in liquido come context.registers[:page] (nota: si tratta di un hash pre-convertita a questo punto, in modo che ci si accede context.registers[:page]['url'], non context.registers[:page].url) :

diff --git a/lib/jekyll/convertible.rb b/lib/jekyll/convertible.rb 
index d33abc5..a674ef5 100644 
--- a/lib/jekyll/convertible.rb 
+++ b/lib/jekyll/convertible.rb 
@@ -69,7 +69,7 @@ module Jekyll 
    # 
    # Returns nothing. 
    def do_layout(payload, layouts) 
-  info = { :filters => [Jekyll::Filters], :registers => { :site => self.site } } 
+  info = { :filters => [Jekyll::Filters], :registers => { :site => self.site, :page => payload['page'] } } 

     # render and transform content (this becomes the final content of the object) 
     payload["pygments_prefix"] = converter.pygments_prefix 

Spero che ti aiuti!

2

context['page'] sembra restituire un hash con la maggior parte delle proprietà della pagina corrente, tra cui url e path

così l'attuale oggetto pagina può essere recuperato con

context.registers[:site].pages.detect { |p| p.path==context['page']['path'] } 
Problemi correlati