サイト上のすべてのページ(投稿ではない)の階層ナビゲーションツリーを出力するJekyllのカスタムタグプラグインを作成しようとしています。私は基本的に<ul>
、特定のCSSクラスによって現在のページが記録されているページへのリンク(リンクテキストとしてページタイトルを使用)を含むネストされた束が必要です。
私はルビーに非常に不慣れです。私はPHPの人です。
私は、すべてのページを繰り返し処理して1次元のリストを出力することから始めて、少なくともそれができることを確認することから始めようと考えました。これが私がこれまでに持っているものです:
module Jekyll
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.url+'">'+page.title+'</a></li>'
end
output += '<ul>'
output
end
end
end
Liquid::Template.register_tag('nav_tree', Jekyll::NavTree)
そして、を介して液体テンプレートに挿入してい{% nav_tree %}
ます。
問題は、page
上記のコードの変数に、期待するすべてのデータが含まれていないことです。page.title
は未定義でありpage.url
、その前にスラッシュが付いた単なるベース名です(たとえば/a/b/c.html
、それは私に与えているだけです/c.html
)。
私は何が間違っているのですか?
補足:私はすでに純粋なLiquidマークアップでこれを実行しようとしましたが、最終的にはあきらめました。Liquidを使用すると簡単に繰り返し処理できますsite.pages
が、リストを適切にネストする方法がわかりませんでした。