WEB・アプリ開発

middleman-blogでpaginationの変数をpartialやlayoutでも使う方法

paginationに関する変数をpartialやlayoutで使うと何も表示されない

 

middleman-blogでは、paginationのナビゲーションを作るために以下のような変数が使えます。


ただ、これらはテンプレートのファイル内で使用される想定しかされておらず、partialやlayoutで使用すると、nilが入っている状態になり、画面には何も表示されません。

なので、それぞれのテンプレート内にこのナビゲーションを書く必要があり、重複したコードとなってしまいます。

スポンサーリンク

解決策

これらの変数に入るべき情報が、current_page.metadata[:locals]という配列に入っています。こちらはpartialでもlayoutからでもアクセスできます。下の例はこのサイトのpaginationのナビゲーションを作るpartialです。このコードをlayoutに書いても動きます。

_pager.slim

ナビゲーションだけでなく一覧表示部分もpartialやlayoutに書ける

一覧表示部分は通常こんな感じのコードをテンプレートに書きますよね。


page_articlescurrent_page.metadata[:locals]に入っています。なので、下のように1行追加してあげるだけで、これをpartialやlayoutに入れられます。


私の場合は、一覧表示系のテンプレート(index.slim、tag.slim、category.slim、calendar.slim)についてはlist_layout.slimというlayoutを使うようにし、このlayout内に上記の一覧表示のコードを書いています。また、最初の_page.slimというpartialもこのlayout内から呼び出すようにしています。

※middleman-blogのバージョン:v3.6.0.beta.2