J'essaie d'écrire un plugin de balise personnalisé pour Jekyll qui produira une arborescence de navigation hiérarchique de toutes les pages (pas des messages) sur le site. Je veux fondamentalement un bouquet imbriqué i 'm très inexpérimenté avec Ruby. Je suis un gars PHP. P> J'ai pensé que je voudrais commencer à itérer à toutes les pages et émis une liste unidimensionnelle juste pour m'assurer que je pouvais au moins le faire. Voici ce que j'ai jusqu'à présent: p> et je l'insère dans mon modèle de liquide via Le problème est que la variable code> page code> dans le code ci-dessus ne dispose pas de toutes les données que vous attendez. Qu'est-ce que je fais mal? p> Note latérale: forte > J'ai déjà essayé de faire cela avec un marge pur liquide, et j'ai finalement abandonné. Je peux facilement itération via le site
code> S avec des liens (avec le titre de la page sous forme de texte de liaison) sur les pages avec la page actuelle notée par une certaine classe CSS.
{% nav_tree%} code>. P>.
page.title code> est indéfini et
page.URL code> est juste le nom de base avec une barre oblique devant celle-ci (par exemple, pour
/a/b/c.html < / Code>, il suffit de me donner
/c.html code>). p>
.pages code> juste bien avec du liquide, mais je ne pouvais pas comprendre un moyen de nier de manière appropriée les listes. P> P>
3 Réponses :
Essayez:
module Jekyll # Add accessor for directory class Page attr_reader :dir end class NavTree < Liquid::Tag def initialize(tag_name, text, tokens) super end def render(context) site = context.registers[:site] output = '<ul>' site.pages.each do |page| output += '<li><a href="'+page.dir+page.url+'">'+(page.data['title'] || page.url) +'</a></li>' end output += '<ul>' output end end end Liquid::Template.register_tag('nav_tree', Jekyll::NavTree)
Avec ce code, j'obtiens Erreur de liquide: impossible de convertir nil en chaîne code>.
Vous avez probablement eu une page sans titre, de sorte que Page.Data ['Titre'] est nulle. Remplacer w / e.g. (page.Data ['Titre'] || Page.URL).
Désolé pour la réponse tardive. Vous étiez correct. J'ai eu une page sans titre. Votre solution fonctionne.
page.title code> n'est pas toujours défini (exemple:
atom.xml code>). Vous devez vérifier s'il est défini. Ensuite, vous pouvez prendre
page.name code> ou ne pas traiter l'entrée ...
def render(context)
site = context.registers[:site]
output = '<ul>'
site.pages.each do |page|
unless page.data['title'].nil?
t = page.data['title']
else
t = page.name
end
output += "<li><a href="'+page.dir+page.url+'">'+t+'</a></li>"
end
output += '<ul>'
output
end
Raccourcir que, sauf si..end un peu à: t = page.Data ['titre'] || Page.Name code>
Récemment, j'ai rencontré un problème similaire où l'erreur "Impossible de convertir Nill en String" ne fait que souffler ma tête. Mon fichier config.yml contient une ligne quelque chose comme ça " baseurl: / paradocs / jEkyll / out / stry>" Maintenant, c'est pour mon local pour un serveur, je dois faire que beseurl vide et que l'erreur commence à apparaître Dans le temps de construction, je dois enfin faire " baseurl: / strong>" .. et c'est mon travail. P>
J'ai créé Un problème sur GitHub pour voir si quelqu'un connaît la réponse.
Avez-vous déjà réussi à faire fonctionner la nidification? J'aimerais voir le code final si oui
@Brand Malheureusement, je n'ai jamais eu la fin de la finition.
J'ai réussi à pirater l'arbre de page hiérapie ensemble. Ce n'est pas jolie mais j'ai posté ici: gist.github.com/3536551 au cas où quelqu'un d'autre trébuche sur cette question