📃

【Movable Type】フォルダ一覧を出力する

2024/09/20に公開

概要

管理画面「フォルダ」で追加されたフォルダを出力する方法。フォルダ一覧の出力方法はいくつかあり、用途により使い分けると便利。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_bysort_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

PowerCMS

Discussion