サイトマップ
Middleman にはテンプレートからアクセスできる, サイト内のすべてのページとリソース, 相互にどのように関係するか情報を持つ サイトマップがあります。これはナビゲーションの作成, 検索ページや フィードの作成に使うことができます。
サイトマップ はページごとの HTML, CSS, JavaScript, 画像など
すべての情報のリポジトリです。:proxy
を使って作る 動的ページ
も含みます。
サイトマップを確認する
Middleman がどのようにサイトを見ているか正確に理解するために, プレビューサーバを
起動しブラウザで http://localhost:4567/__middleman/sitemap/
を開きます。
完全なサイトマップやソースへのパス, ビルド先のパス, URL など各リソースを
確認できます。"path" には特に注意してください:
config.rb の page
, ignore
や proxy
, link_to
や url_for
から
ファイルを参照するために使われます。
コードからサイトマップにアクセス
テンプレートの中では sitemap
がサイトマップオブジェクトです。
サイトマップオブジェクトから, ページごとに resources
メソッドを使うか
find_resource_by_path
を使って個別のリソースを取得できます。
current_resource
を使ってカレントページのページオブジェクトを取得することも
できます。サイトマップからページリストを取得できれば, 個々のページオブジェクトを
使って, 各種プロパティをフィルタリングできます。
サイトマップのリソース
サイトマップの各リソースは Resource オブジェクトです。Resource オブジェクトは
あらゆる種類の情報を伝えます。frontmatter データ, ファイル拡張子, ソースと
出力先のパス, リンク URL などにアクセスできます。Resource オブジェクトの
プロパティは Middleman の内部レンダリングにとても便利です。例えば,
すべての .html
ファイルを見つけるためにファイル拡張子でページ
フィルタリングすることが考えられます。
それぞれのページはサイト階層の中で関連する他のページを探すこともできます。
parent
, siblings
や children
メソッドはナビゲーションメニューや
パンくずリストを作る場合に特に便利です。
config.rb の中でサイトマップを使う
サイトマップの情報を使って config.rb
から新しい 動的ページ を
作ることができます。ただし, サイトマップは config.rb
が読み込まれた 後 まで
用意されないので少し注意が必要です。これに対応するために, アプリケーションの
ready
イベントにコールバックを登録する必要があります。例として, ページの
frontmatter に "category" が追加されているものとして, カテゴリーごとに
動的にカテゴリーページを作ります。
config.rb
に次の内容を追加:
ready do
sitemap.resources.group_by {|p| p.data["category"] }.each do |category, pages|
proxy "/categories/#{category}.html", "category.html",
:locals => { :category => category, :pages => pages }
end
end
そして, 取得したカテゴリごとにページをビルドするために, category
と pages
変数を使う category.html.erb
を作ります。