【Movable Type】フォルダ一覧を出力する
概要
管理画面「フォルダ」で追加されたフォルダを出力する方法。フォルダ一覧の出力方法はいくつかあり、用途により使い分けると便利。PowerCMSも同様。
なお、以降の説明においてフォルダの階層は、とくに記載がなければ以下を前提としています。
また、使用できるモディファイアは、最低限覚えておくとよいもののみ記載しています。
フォルダA
└フォルダA-1
└フォルダA-2
フォルダB
└フォルダB-1
└フォルダB-2
フォルダC
└フォルダC-1
└フォルダC-2
基本構造ととりあえず覚えておくといいモディファイア
フォルダ一覧の出力方法はいくつかあります。
MTFolders
フォルダの一覧を表示するためのブロック。フォルダの階層は関係なく、すべて同列に出力される。表示順も固定(フォルダ名を基準とした文字コード順の昇順)
何も考えず手っ取り早くフォルダ一覧を表示させるにはオススメ。
<!-- MT記述 -->
<mt:Folders>
<mt:FolderHeader>
<dl>
</mt:FolderHeader>
<dt><a href="<$mt:FolderPath$>"><$mt:FolderLabel$></a></dt>
<dd><$mt:FolderDescription$></dd>
<mt:FolderFooter>
</dl>
</mt:FolderFooter>
</mt:Folders>
<!-- HTML出力 -->
<dl>
<dt><a href="">フォルダA</a></dt>
<dd>フォルダAの説明</dd>
<dt><a href="">フォルダA-1</a></dt>
<dd>フォルダA-1の説明</dd>
<dt><a href="">フォルダA-2</a></dt>
<dd>フォルダA-2の説明</dd>
<dt><a href="">フォルダB</a></dt>
<dd>フォルダBの説明</dd>
<dt><a href="">フォルダB-1</a></dt>
<dd>フォルダB-1の説明</dd>
<dt><a href="">フォルダB-2</a></dt>
<dd>フォルダB-2の説明</dd>
<dt><a href="">フォルダC</a></dt>
<dd>フォルダCの説明</dd>
<dt><a href="">フォルダC-1</a></dt>
<dd>フォルダC-1の説明</dd>
<dt><a href="">フォルダC-2</a></dt>
<dd>フォルダC-2の説明</dd>
</dl>
show_empty
1
を指定するとウェブページが公開されていないフォルダも出力する。
MTTopLevelFolders
現在のフォルダに関係なく、最上位のフォルダ一覧を表示するブロック。アンカーメニューなど、単純に最上位のフォルダリストのみ表示したい場合はこれが手っ取り早くてオススメ。
現在フォルダの最上位の親フォルダを表示するブロックタグMTTopLevelFolder
と綴りを間違えやすいので注意。
<!-- MT記述 -->
<mt:TopLevelFolders>
<mt:SubCatIsFirst>
<ul>
</mt:SubCatIsFirst>
<li><a href="<$mt:FolderPath$>"><$mt:FolderLabel$></a></li>
<mt:SubCatIsLast>
</ul>
</mt:SubCatIsLast>
</mt:TopLevelFolders>
<!-- HTML出力 -->
<ul>
<li><a href="">フォルダA</a></li>
<li><a href="">フォルダB</a></li>
<li><a href="">フォルダC</a></li>
</ul>
リファレンスのページにはとくに記載がないが、以下のMTSubFolders
のモディファイアであるsort_by
とsort_order
が使用できる。
MTSubFolders
現在のフォルダの子フォルダを階層化して一覧表示するブロック。上2つで紹介したものより細かい調整ができる。
最上位階層の出力にMTTopLevelFolders
とあわせて使用することが多い。
<!-- MT記述 -->
<mt:TopLevelFolders>
<h2><$mt:FolderLabel$></h2>
<mt:SubFolders>
<mt:SubCatIsFirst>
<ul>
</mt:SubCatIsFirst>
<li><a href="<$mt:FolderPath$>"><$mt:FolderLabel$></a></li>
<mt:SubCatIsLast>
</ul>
</mt:SubCatIsLast>
</mt:SubFolders>
</mt:TopLevelFolders>
<!-- HTML出力 -->
<h2>フォルダA</h2>
<ul>
<li><a href="">フォルダA-1</a></li>
<li><a href="">フォルダA-2</a></li>
</ul>
<h2>フォルダB</h2>
<ul>
<li><a href="">フォルダB-1</a></li>
<li><a href="">フォルダB-2</a></li>
</ul>
<h2>フォルダC</h2>
<ul>
<li><a href="">フォルダC-1</a></li>
<li><a href="">フォルダC-2</a></li>
</ul>
top
1
を指定すると、MTTopLevelFolders
と同じ挙動になる。
上記の例を書き換えると以下のようになるが、パッと見てわかりづらいため、最上位のフォルダを出力したいのであれば、基本的にはMTTopLevelFolders
を使うことをオススメします。
<mt:SubFolders top="1">
<h2><$mt:CategoryLabel$></h2>
<mt:SubFolders>
<mt:SubCatIsFirst>
<ul>
</mt:SubCatIsFirst>
<li><a href="<$mt:FolderPath$>"><$mt:FolderLabel$></a></li>
<mt:SubCatIsLast>
</ul>
</mt:SubCatIsLast>
</mt:SubFolders>
</mt:SubFolders>
sort_order
昇順(ascend
/ デフォルトの指定)か降順(descend
)を指定する。
(検証)特定のフォルダのサブフォルダのみ表示ができるか
一応表示は可能のようです。
<!-- 想定しているHTML内容 -->
<h2>フォルダA</h2>
<ul>
<li><a href="">フォルダA-1</a></li>
<li><a href="">フォルダA-2</a></li>
</ul>
<!-- MT記述 -->
<mt:SubFolders category="フォルダA">
<mt:SubCatIsFirst>
<mt:ParentFolder><h3><$mt:FolderLabel$></h3></mt:ParentFolder>
<ul>
</mt:SubCatIsFirst>
<li><a href="<$mt:FolderPath$>"><$mt:FolderLabel$></a></li>
<mt:SubCatIsLast>
</ul>
</mt:SubCatIsLast>
</mt:SubFolders>
または
<mt:SubFolders category="フォルダA">
<mt:SubCatIsFirst>
<mt:TopLevelFolder><h3><$mt:FolderLabel$></h3></mt:TopLevelFolder>
<ul>
</mt:SubCatIsFirst>
<li><a href="<$mt:FolderPath$>"><$mt:FolderLabel$></a></li>
<mt:SubCatIsLast>
</ul>
</mt:SubCatIsLast>
</mt:SubFolders>
MTSubFolders
のモディファイアはcategory
でないと動作しませんでした(folder
では出力されない)
MTSubFolderRecurse
MTSubFolders
ブロック内を再帰的に表示する。Markdown的にhtmlタグのみの単純な階層構造の出力の場合は、この書き方がシンプルでいいかもしれない。
<!-- フォルダ例 -->
フォルダA
└フォルダA-1
└フォルダA-1-1
└フォルダA-1-2
└フォルダA-2
└フォルダA-2-1
└フォルダA-2-2
<!-- MT記述 -->
<mt:TopLevelFolders>
<h2><$mt:FolderLabel$></h2>
<mt:SubFolders>
<mt:SubCatIsFirst>
<ul>
</mt:SubCatIsFirst>
<li>
<a href="<$mt:FolderPath$>"><$mt:FolderLabel$></a>
<$mt:SubFolderRecurse$>
</li>
<mt:SubCatIsLast>
</ul>
</mt:SubCatIsLast>
</mt:SubFolders>
</mt:TopLevelFolders>
<!-- HTML出力 -->
<h2>フォルダA</h2>
<ul>
<li>
<a href="">フォルダA-1</a>
<ul>
<li><a href="">フォルダA-1-1</a></li>
<li><a href="">フォルダA-1-2</a></li>
</ul>
</li>
<li>
<a href="">フォルダA-2</a>
<ul>
<li><a href="">フォルダA-2-1</a></li>
<li><a href="">フォルダA-2-2</a></li>
</ul>
</li>
</ul>
max_depth
再帰的に表示させる階層の数(深さ)を指定する。
1
は直下の子フォルダまで、2
は孫フォルダまでを出力する。
一緒に覚えておくといいMTタグ
記事一覧出力時に一緒に覚えておくといいMTタグたち。
MTFolderLabel
フォルダ名を出力する。
MTFolderBasename
フォルダのベースネームを出力する。主にCSSで指定するclass名に使用する場合が多い。
MTFolderDescription
フォルダ編集画面で入力した説明の内容を出力する。
MTFolderPath
最上位親フォルダから現在のディレクトリまでのディレクトリパスを表示する。
MTFolderID
フォルダのID(数字)を出力する。
MTFolderCount
フォルダ毎に、そのフォルダが指定されている公開されているウェブページの件数を出力する。単純にウェブページの件数を表示したり、MTCategoryCount
同様にMTIf
ブロックでウェブページが存在する場合、ない場合の分岐などに使える。
MTSubCatIsFirst
MTTopLevelFolders
MTSubFolders
内で使用する。ループ出力の一番はじめのときだけ実行されるブロックタグ。
MTSubCatIsLast
MTTopLevelFolders
MTSubFolders
内で使用する。ループ出力の一番最後のときだけ実行されるブロックタグ。
公式リファレンス
すべて掲載しきれないので、大枠のもののみ記載しています。
MT
- https://www.movabletype.jp/documentation/appendices/tags/folders.html
- https://www.movabletype.jp/documentation/appendices/tags/toplevelfolders.html
- https://www.movabletype.jp/documentation/appendices/tags/subfolders.html
- https://www.movabletype.jp/documentation/appendices/tags/subfolderrecurse.html
Discussion