概要
middleman のディレクトリごとのサマリーを自動生成する文書管理システムを拡張機能として作ってみました。
akcms - Ataru Kodaka Content Management System - atarukodaka/middleman-akcms
動作サンプルはこちら:Home - Ataru Kodaka Site
スナップショット:
foo/bar/baz.html を作成すると、foo/bar/index.html, foo/index.html, index.html といったディレクトリサマリーページを自動生成します。これにより、どのリソースからも parent, children でたどることができるようになります。
その他、月別アーカイブ、タグ、ペジネーション、breadcrumbなどをサポートします。
付属テンプレートでは bootstrap3をサポートします。
インストールと使いかた
middleman4 を入れた状態で、テンプレートを指定してプロジェクトを作ります
|
|
後は通常どおりにprojに入って bundle install し、source/ 以下お好きなようにファイルを作って中身を書き build や server 回します。
設定
config.rb
config.rb にて :akcms を activate し、各種設定をします。
|
|
使うレイアウトやテンプレート群を指定してください。
ペジネーションのデフォルト表示数/頁も指定できますが、
記事ごとに指定することもできます(後述)。
設計と機能
記事 / Article
以下の特徴を持ったリソースは、記事 (article) とみなされ:
- ignored でないもの
- 拡張子が .html あるいは .htm のもの
- type: フロントマターで ‘article’ 以外のものが明示的に指定されていないもの
以下のメソッドを持ちます:
- title:記事タイトル
- date:日付(TimeWithZoneクラス)。date: フロントマターあるいは更新日時から生成
- summary:サマリー表示
- published?:出力するか。published: false でなければ真
- prev_article:次の記事
- next_article:前の記事
- body:記事本文(レイアウト不使用)
そして、Middleman::Sitemap::Store クラス(sitemapオブジェクトが生成される)には、以下のインスタンスメソッドが追加されます。
- articles():全ての article リソース配列(日付逆順ソート済)
これを使って、
|
|
などと最新10件の記事を表示することができます。
また、全てのリソースに、以下のメソッドが追加されます:
- is_article?:article かどうか
- to_article!:当該リソースを article 属性を持たせる
see https://github.com/atarukodaka/middleman-akcms/blob/master/lib/middleman-akcms/article.rb
ディレクトリサマリー / DirectorySummary
activate の際、テンプレートを指定するとディレクトリサマリー生成機能が稼働します。
|
|
これにより、例えば foo/bar/baz.html というリソースがあった場合、
- foo/bar/index.html
- foo/index.html
- index.html
が(存在しなければ)テンプレートに従いプロキシリソースが生成されます。
その際、ローカル変数として、
- directory: 当該ディレクトリの情報を保持するname, path メソッドを持つオブジェクト
- articles[]:当該ディレクトリ下にある article のリソース配列
が渡されるため、
|
|
などと当該ディレクトリの記事一覧を作成できます。
breadcrump
全てのリソースに、ancestors メソッドが追加されるため、以下のように
breadcrumbs を手軽に作ることができます。
|
|
foo/config.yml
あるディレクトリに “directory_name: “というエントリを持つ config.yml が存在する場合、
resource.directory.name はその値が入ります。
|
|
|
|
タグ
options.tag_template
- resource.tags: 当該リソースのタグ配列
- sitemap.tags:タグ=>プロキシリソースのハッシュ
アーカイブ
options.archive_month_template
- sitemap.archives:日付(TimeWithZone)=>プロキシリソースのハッシュ
ペジネーション
- pagination?:ヘルパ関数
- current_resource.paginator:
- page_number
- num_pages
- …
シリーズ機能
options.series_title_template
config.yml
|
|
Tips
.emacs
.emacs や .emacs.d/init.el に
|
|
とやっておくと便利です。
data/config.yml
著者名や著者・サイト情報をYAMLで記述します。テンプレートで data.config.author などと取れます。