PureBuilder2 TopicPath機能の追加
有用なユーティリティコード
- TOP
- Old Archives
- PureBuilder2 TopicPath機能の追加
変更点
概要
これまでTopicPath機能はPureBuilderで提供されて来なかった。 そのため、個別のドキュメントとテンプレートにおいて実装可能な機能として紹介されてきたが、一般的な要望であるため今回の変更で取り込んだ。
このTopicPath機能は整形されたHTMLを返すわけではなく、シンボルと文字列からなる配列を返す。 PureBuilderの本来の設計に従い、サイトの階層構造に等しいディレクトリ構成を採用し、かつドキュメントごとにTopicPathが固定される状態であれば、かなり楽にTopicPathが生成できる。
これまではTopicPathはドキュメントあたりで設定することが勧められていた。これは、ACCS indexが組み込みで機能するためだ。
この機能を使えば設定ファイルによって、そのディレクトリの親パスを定義し、そして文書タイトルがStringとして追加される。
詳細
つまり、ディレクトリで設定されているのが
[ :Foo, :Bar ]journal/
で、文書タイトルがBazであるならば、
[ :Foo, :Bar, "Baz" ]
となる。
別にシンボルである必要はない。だが、シンボルを推奨している。マップを使用することが推奨されているためだ。 だが、特にシンボルであることを期待しているコードは組み込まれていない。
だから、例えば
[ { Address: "http://example.com/foo/", Title: "Foo" }, "Baz ]
のような構造にしても構わない。
実際にそれを使うコードとしては
% tp = DOC.mktopicpath
% tp.each do |i|
% if i.kind_of?(String)
<li><%= i %></li>
% else
<li><a href="<%= DOC.pbenv[:TopicPathMap][i][1] %>"><%= DOC.pbenv[:TopicPathMap][i][0] %></a></li>
% end
% end if tp
のようになる。
ただし、Indexの場合はディレクトリで定義されている階層は今いるページなのであるから、その場合はtitleとpathの最終エレメントは重複しているはずだ。
そこで、:Index
が定義されている場合は、最終エレメントを取り除くことにした。
過渡期のコード
タイトルは"title"
なのか"Title"
なのか:Title
なのか、といったところに揺れがある。
正式には"title"
を使用することになっている。だが、おそらくはreservedなキーは大文字で始めることにしたほうがいいだろう。
この互換性を維持するコードにしてある。
また、すでにページあたりでTopicPathを設定している場合に備え、現状はdevelブランチのみの対応だ。
途中で放置したため、書くべきことを忘れました。 ゴメンナサイ。