SubCategoryDepth/SubFolderDepth プラグイン
Movable Type のサブカテゴリーリストやサブフォルダリストで階層を出力するプラグインを作りました。画面のようにサブカテゴリーの階層を表示できます。

ちなみにMT4では、制御系タグを利用すればこのようなことは簡単に実現できますが、このプラグインはMT4がリリースされる以前、1年ほど前に作ったもので、せっかくなので公開します。
1.ダウンロード
下記のリンクからプラグインアーカイブをダウンロードし、任意のフォルダに保存してください。
2.インストール
プラグインアーカイブを解凍し、中にある SubCategoryDepth.pl を plugins ディレクトリにアップロードしてください。
ブログ管理画面より「システム」→「プラグイン」でプラグイン一覧を表示し、次のように表示されればOKです。

3.使用方法
このプラグインが提供する MTSubCategoryDepth タグは、次のブロックタグで利用可能です。
- MTTopLevelCategories
- MTSubCategories
- MTTopLevelFolders
- MTSubFolders
冒頭のサンプルのようにサブカテゴリーリストの階層を出力する場合は、次のように記述します。
<mt:TopLevelCategories>
<mt:SubCatIsFirst>
<ul class="widget-list">
</mt:SubCatIsFirst>
<mt:IfNonZero tag="mt:CategoryCount">
<li class="widget-list-item"><a href="<$mt:CategoryArchiveLink$>"<mt:IfNonEmpty tag="mt:CategoryDescription"> title="<$mt:CategoryDescription$>"</mt:IfNonEmpty>><$mt:CategoryLabel$> (<$mt:CategoryCount$>)</a>
<mt:Else>
<li class="widget-list-item"><$mt:CategoryLabel$>
</mt:IfNonZero>
<mt:SubCategoryDepth setvar="depth" />
階層<mt:getVar name="depth" op="++" />
<$mt:SubCatsRecurse$>
</li>
<mt:SubCatIsLast>
</ul>
</mt:SubCatIsLast>
</mt:TopLevelCategories>
プラグインで出力するデフォルト値は、最上位の親階層は0になり、階層が深くなる毎に+1されます。
B型自分の説明書・A型自分の説明書
最近、巷で流行っているらしく、読みました。
![]() | B型自分の説明書 Jamais Jamais 文芸社 2007-08 売り上げランキング : 5 Amazonで詳しく見る by G-Tools |
![]() | A型自分の説明書 Jamais Jamais 文芸社 2008-04 売り上げランキング : 359 Amazonで詳しく見る by G-Tools |
タイトルにある「説明書」からお分かりの通り、基本操作・外部接続・色々な設定・プログラム...と、
説明書っぽい構成になっています(章立てと内容はそれほど関係ありません)。各項目にはチェックマークがついていて、チェックすることで「自分説明書」が完成するというものです。
それより、著者のJamais Jamais さんが何者かという方が気になるのですが...。
エンジニアという仕事
カテゴリーの階層別にデザインを切り替える for Movable Type 4
カテゴリーの階層別にデザインを切り替えるカスタマイズです。ポイントは「MTElseタグを使わない(使えない)」ということです。
参考記事は下記です。ありがとうございました。
以下に示すサブテンプレートは、ブログ記事リストへの設定を前提にしています。各サブテンプレートの一番外側のifタグは、ブログ記事リストでカテゴリーアーカイブと他のアーカイブを併用している場合を考慮したものです。
2階層の場合(パターン1)
<mt:if name="category_archive">
<MTHasParentCategory>
子カテゴリーのサブテンプレート
</MTHasParentCategory>
<MTHasNoParentCategory>
親カテゴリーのサブテンプレート
</MTHasNoParentCategory>
</mt:if>
2階層の場合(パターン2)
<mt:if name="category_archive">
<MTHasSubCategories>
親カテゴリーのサブテンプレート
</MTHasSubCategories>
<MTHasNoSubCategories>
子カテゴリーのサブテンプレート
</MTHasNoSubCategories>
</mt:if>
3階層の場合(パターン1)
<mt:if name="category_archive">
<MTHasSubCategories>
<MTHasNoParentCategory>
親カテゴリーのサブテンプレート
</MTHasNoParentCategory>
<MTHasParentCategory>
子カテゴリーのサブテンプレート
</MTHasParentCategory>
</MTHasSubCategories>
<MTHasNoSubCategories>
孫カテゴリーのサブテンプレート
</MTHasNoSubCategories>
</mt:if>
3階層の場合(パターン2)
<mt:if name="category_archive">
<MTHasParentCategory>
<MTHasSubCategories>
子カテゴリーのサブテンプレート
</MTHasSubCategories>
<MTHasNoSubCategories>
孫カテゴリーのサブテンプレート
</MTHasNoSubCategories>
</MTHasParentCategory>
<MTHasNoParentCategory>
親カテゴリーのサブテンプレート
</MTHasNoParentCategory>
</mt:if>
4階層の場合
<mt:if name="category_archive">
<MTHasSubCategories>
<MTHasNoParentCategory>
階層1カテゴリーのサブテンプレート
</MTHasNoParentCategory>
<MTHasParentCategory>
<MTParentCategory>
<MTHasParentCategory>
階層3カテゴリーのサブテンプレート
</MTHasParentCategory>
<MTHasNoParentCategory>
階層2カテゴリーのサブテンプレート
</MTHasNoParentCategory>
</MTParentCategory>
</MTHasParentCategory>
</MTHasSubCategories>
<MTHasNoSubCategories>
階層4カテゴリーのサブテンプレート
</MTHasNoSubCategories>
</mt:if>
次回はプラグインもしくは制御タグによる階層判定を行います。
MTOS 4.15 ベータ5リリース
MTOS 4.15 ベータ5がリリースされました。
前回のMTOSリリースで記事にしていた、公開プロファイルの日本語表記が決まったようです。

- Asynchronous Publishing → 非同期スタティックパブリッシング
- High Priority Static Publishing → 一部アーカイブのみ非同期スタティックパブリッシング
また、同梱プラグインとして提供されていた Widget Manager がコア機能に統合されたようです。これにより、テンプレートセットにウィジェットの登録が可能になりました。
また、ウィジェットセットに関しては、テンプレートセットにもアップデートがあります。これまでは、テンプレート各々をどのような種類かで分類し登録できましたが、次のバージョンよりウィジェットセットの登録もできるようになります。
ウィジェットセットの内容は、テンプレートセットに依存することになります。試しに、当ブログで配布しているテンプレートセット(ウィジェット登録なし)に切り換えたときのウィジェット一覧です。

また、コメントプレビュー時の返信状態も改修されています(チェックボックスを非表示)。下はプレビュー時の表示で、返信先が固定されています。

追記:インデックステンプレートの JavaScript が大きく変わっています。
カテゴリーリストの中に月別カテゴリーリストを表示する
カテゴリーリストと、そのカテゴリーがもつ月別カテゴリーリストを同時に表示するカスタマイズです。

カテゴリーリストはサブカテゴリーリストでも可能です。

カテゴリーリストの表示件数を絞り、かつ表示月が少ない場合に有効です。また、月別カテゴリーが有効になっていない場合は月別カテゴリーリストを表示しません。
デフォルトテンプレート(ウィジェット)+カテゴリーリスト
<MTIfArchiveTypeEnabled archive_type="Category">
<div class="widget-archive widget-archive-category widget">
<h3 class="widget-header">カテゴリ</h3>
<div class="widget-content"><ul class="widget-list">
<MTCategories>
<MTIfNonZero tag="MTCategoryCount">
<li class="widget-list-item"><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><$MTCategoryLabel$></a>
<MTIfArchiveTypeEnabled archive_type="Category-Monthly">
<MTArchiveList archive_type="Category-Monthly">
<MTArchiveListHeader>
<ul class="widget-list">
</MTArchiveListHeader>
<li class="widget-list-item"><a href="<$MTArchiveLink$>"><$MTArchiveTitle regex_replace="/.*: /",""$></a> [<$MTArchiveCount$>]</li>
<MTArchiveListFooter>
</ul>
</MTArchiveListFooter>
</MTArchiveList>
</MTIfArchiveTypeEnabled>
<MTElse>
<li class="widget-list-item"><$MTCategoryLabel$>
</MTIfNonZero>
</li>
</MTCategories>
</div>
</div>
</MTIfArchiveTypeEnabled>
デフォルトテンプレート(ウィジェット)+サブカテゴリーリスト
<MTIfArchiveTypeEnabled archive_type="Category">
<div class="widget-archive widget-archive-category widget">
<h2 class="widget-header">カテゴリ</h2>
<div class="widget-content">
<MTTopLevelCategories>
<MTSubCatIsFirst>
<ul class="widget-list">
</MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li class="widget-list-item"><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><$MTCategoryLabel$></a>
<MTIfArchiveTypeEnabled archive_type="Category-Monthly">
<MTArchiveList archive_type="Category-Monthly">
<MTArchiveListHeader>
<ul class="widget-list">
</MTArchiveListHeader>
<li class="widget-list-item"><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a> [<$MTArchiveCount$>]</li>
<MTArchiveListFooter>
</ul>
</MTArchiveListFooter>
</MTArchiveList>
</MTIfArchiveTypeEnabled>
<MTElse>
<li class="widget-list-item"><$MTCategoryLabel$>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast>
</ul>
</MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</div>
</MTIfArchiveTypeEnabled>
そのうち折りたためるようにします。
ブログのタグ検索ができるようになりました
当ブログでは Movable Type 4 にアップグレードしてから、タグ検索やタグクラウドの表示ができていませんでしたが、重い腰をあげて、ようやくタグ検索ができるように修正致しました。
利用可能になった部分は次の通りです。
メインページのメニューでタグ検索を用いたいくつかのメニュー

ブログ記事の「Tag」のリンク

タグのページ(のタグクラウド)

当ブログのタグは、3年ほど前の記事「Tag Cloud のページを作る」で紹介したように、Movable Type 3 の時にキーワードフィールドと Tagwire プラグイン、MT-XSearch プラグインを利用したものでしたが、 Ogawa::memoranda さんの mt-keywords2tags スクリプトで、キーワードフィールドの内容をタグフィールドに移動しました。
参考までに、ブログ記事のTag表示の変更内容は次の通りです。
変更前
Tag:[<MTEntryTags glue=", "><a href="<$MTCGIPath$>mt-xsearch.cgi?blog_id=<$MTBlogID$>&search_key=Tagwire&search=<$MTTag encode_url="1"$>" title="<$MTTag$>のタグ一覧へ"><$MTTag$></a></MTEntryTags>]
変更後
Tag:[<MTEntryTags glue=", "><a href="<$MTTagSearchLink$>&IncludeBlogs=<$MTBlogID$>" rel="tag" title="<$MTTagName$>のタグ一覧へ"><$MTTagName$></a></MTEntryTags>]
標準のタグ機能に移行して良かったのは、タグ一覧から多くの typo がみつかり、正しいスペルのタグのマージできたことです。
またタグに半角文字を使っていればタグフィールドに数文字入力すれば、候補の表示および補完ができるので、タイプミスが減ることを期待しています。
ブログのテンプレートも久しぶりに手を加えました。
WebクリエイティブのためのCMSテンプレートデザイン
面白そうなので「WebクリエイティブのためのCMSテンプレートデザイン」を購入してみました。
![]() | WebクリエイティブのためのCMSテンプレートデザイン (Web Designing BOOKS) エ・ビスコム・テック・ラボ 毎日コミュニケーションズ 2007-09-15 売り上げランキング : 109448 Amazonで詳しく見る by G-Tools |
この本の特徴は、最終的にCMS(Movable Type 4/3.3 および WordPress 2.2 対応)を使ってテンプレートを作り上げるのですが、その過程が他書と全く異なっています。
まず最初に CMS を一切使わず、サンプルとなるサイトを手作業でがりがりと作ります。そして、そのソースコードを元に、情報をテンプレートタグに置き換えていく、という作業を行うのです。
また、テンプレート化の前に、用意したコンテンツ(テキストや画像)はそれぞれのCMSのブログ記事やアイテムとして投稿またはアップロードしておきます。これでテンプレートから出力されるソースコードが、最初に作成したものと全く同じものが出力される、という仕組みです。
普段目にしている書籍は、「このテンプレートタグを書くと、こういう出力になります」という順で書かれているのですが、この書籍は「こういう出力をテンプレートタグに直すとこう書きます」と、すべて逆に書かれているので、フィルムを逆回しで再生しているような感覚です。
書籍は、
- ニュース・お知らせページを作成する
- 写真・イラストギャラリーを作成する
- 1行ニュースを作成する
- カタログサイトを作成する
- 英語に対応したサイトを作る
の4つに分かれています。フルカラーなので非常に読みやすいです。
CMSビギナーの方がこの書籍で作れば、完成イメージが最初にあるので、CMSからどのように出力されるか、テンプレートタグで何ができるか、という仕組みを理解しやすいのではないでしょうか。
また、CMSに慣れた方にとっては、「こういうサイトにしたい」という要望をテキストで受けたときに、それをどのようにテンプレートやテンプレートタグに置き換えれば良いかという、ノウハウ集としても使えるかもしれません。
feedpath Rabbit サービス終了と次のフィードリーダー候補
気がついたら4月が終わっていて、永年愛用していた feedpath Rabbit のサービスが終了してしまってました。
とはいえ、一応OPMLは早くに保存しておりまして、サービス終了のお知らせからここ半月ほど、次に使うフィードリーダーの候補をいくつか試していました。
フィードリーダーは安易に livedoor Reader や Google リーダーに乗り換えず、feedburner のフィード購読者から探してみました。

いくつか試してみて、個人的に気に入ったのは、画面一番下にある「HanRSS」というサービスです。
外観は BlogLines を彷彿とさせます。
私の選定ポイントである、タイトルのみ表示と本文の切り替えが簡単にできるのが気に入ってます。下がタイトルのみの表示状態で、「内容一覧」のリンクをクリックすると全文表示されます。

これが全文表示状態です。先ほどのリンクは「タイトル一覧」に変わり、もう一度クリックすると折りたたまれます。
動きもキビキビしていてストレスありません。またタイトル・全文切り替えはショートカットキーも用意されています。タイトルバー部分をクリックしても可能です。

既読分もセレクトボックスを選択すれば読むことができます。

ブログを横断したまとめ読みができないのが唯一惜しいところですが、結構気に入ってます。
と書いておきながら、Google リーダーで読んでいる自分がいるのは何故でしょう・・・。
余談ですが、Google リーダーは Firefox 3 ベータで読むと、折りたたみ動作が快適です。
Movable Typeの再構築の出力制御について
ご存知の方も多いと思いますが、Movable Type で再構築(スタティックパブリッシング)を行った時、指定したすべてのファイルは無条件に出力されない仕様になっています。
例えば、すべてのインデックステンプレートで、「再構築オプション」をチェックしている状態(4.15以降であれば「スタティック」を選択)で、再構築画面から「すべてのファイル」または「インデックスのみ」を指定して再構築した場合、スタイルシートやJavaScript(mt.js)を最近編集していないのであれば、それらのファイルのタイムスタンプは更新されません。
極端な条件にすると、ブログ記事やテンプレート、あるいはコメント・トラックバックなど、前回の再構築からブログの情報が全く変更されていない状態で、再構築画面から「すべてのファイル」を選択して再構築を行っても、ファイルはひとつも出力(更新)されません。
この仕様に、最近まで全く気がついていませんでした。
レンタルサーバやローカルPCのタイムスタンプを確認しましたので、おそらく間違いはないと思いますが、認識誤りがありましたらご指摘ください。
1.ファイルが出力される条件
再構築でファイルが出力される条件を示します。
ソースをトレースすれば明確な条件が分かると思いますが、時間がないので(というかトレース能力が低いので)再構築を実際に行って、確認した限りの内容です。
- テンプレートを編集した場合
- 変更した情報に関連するテンプレートタグがテンプレートに記述されている場合
- 管理画面からファイルの出力内容に関係する設定の変更が行われた場合
- 再構築対象のファイルがなくなっている場合
2.各条件の詳細
1番目の条件は自明ですが、テンプレートの内容に変更があった場合、対象のテンプレートを再構築することによってファイルが出力されます。
2番目の条件は、例えば、コメントを投稿(公開)したときに、「最近のコメント」といったコメント関連のテンプレートタグが存在するテンプレートだけが再構築対象になります。逆に、コメント関連のテンプレートタグが存在しないテンプレートは再構築対象になりません。
3番目の条件は、例えば、ブログ記事編集画面でコメント・トラックバックの受信設定を変更した場合、そのブログ記事の内容を変更していなくても、コメントフォームやトラックバックURLの表示が変わるため、保存によって再構築され、ファイルが出力されます。
4番目の条件は、テンプレートの変更や該当するテンプレートタグがなくても、ファイルが何らかの要因でなくなってしまった場合は再構築されます。これはパスやファイル名が変更されたときも同じと思われます。
3.ファイルを出力したい場合
プログラムをハックすれば出力できる手段があるはずですが(または環境変数)、管理画面上で簡単に全てのファイルを再構築するには、テンプレートで共通に呼び出しているテンプレートモジュールを適当に編集してから再構築するのが無難ではないでしょうか。
4.再構築の最適化
テンプレートタグの有無で再構築が制御できることが間違いないのであれば、部品を単純にインクルードするよりも、コメントやトラックバックなどの特定テンプレートタグをモジュール化することで、再構築時間はより短縮できると思います。
4.15のSSIを用いれば、独自にPHP化せずにそのようなことが実現可能かもしれません。
5.再構築の定義
ふと思ったのですが、画面上再構築は行われているのに、仮にファイルがひとつも出力されない場合は「再構築」という表現は正しいのでしょうか(単に素朴な疑問です)。
内部処理では再構築するためのチェックが行われていると思いますし、それを含めて再構築(処理)と定義するのかもしれませんが...。
一括再構築は別として、例えば、個別再構築の場合「前回から変更がなかったのでファイルは更新されませんでした」というメッセージ出力も可能な気がします。
すいません。ちょっと疲れてます。





