Movable Type のブロックタグにファンクションタグで使うモディファイアを指定する
「ブロックタグに、ファンクションタグで使うようなグローバルモディファイアを指定するとどうなるのか」という実験です。オチあはりません。
以下、MTEntries タグに encode_html="1" を設定しない場合と、設定した場合の「最近のエントリー」を出力してみます。
1.encode_htmlなしの場合
サブテンプレート
<mt:entries>
<mt:entriesHeader><ul></mt:entriesHeader>
<li><a href="<mt:entryPermalink />"><mt:entryTitle /></a></li>
<mt:entriesFooter><ul></mt:entriesFooter>
</mt:entries>
出力結果
<ul>
<li><a href="http://user-dmain/2008/04/5.html">ブログ記事5</a></li>
<li><a href="http://user-dmain/2008/04/4.html">ブログ記事4</a></li>
<li><a href="http://user-dmain/2008/04/3.html">ブログ記事3</a></li>
<li><a href="http://user-dmain/2008/03/2.html">ブログ記事2</a></li>
<li><a href="http://user-dmain/2008/02/1.html">ブログ記事1</a></li>
<ul>
2.encode_htmlありの場合
サブテンプレート
<mt:entries encode_html="1">
<mt:entriesHeader><ul></mt:entriesHeader>
<li><a href="<mt:entryPermalink />"><mt:entryTitle /></a></li>
<mt:entriesFooter><ul></mt:entriesFooter>
</mt:entries>
出力結果
<ul>
<li><a href="http://user-dmain/2008/04/5.html">ブログ記事5</a></li>
<li><a href="http://user-dmain/2008/04/4.html">ブログ記事4</a></li>
<li><a href="http://user-dmain/2008/04/3.html">ブログ記事3</a></li>
<li><a href="http://user-dmain/2008/03/2.html">ブログ記事2</a></li>
<li><a href="http://user-dmain/2008/02/1.html">ブログ記事1</a></li>
<ul>
ということで、このサンプルでは見事にブロック内部全体がエンコードされました。
なお、これを使えばブラウザの[ページ]-[ソースの表示]を使わずに、ブラウザで直接ソースコードを見ることができます。
「グローバルモディファイア」という名前は伊達ではありませんでした。
この蜃気楼は
Movable Type 4 でカテゴリー別にブログ記事ページのデザインを切り替える方法(その2)
Movable Type 4 でカテゴリー別にブログ記事ページのデザインを切り替える方法を、2回に分けて紹介します。
「サンプルを」という要望を頂いているのですが、時間がとれないので、以下のイメージのみでお許しください。
やりたいことは、ひとつのブログ記事アーカイブを使った、カテゴリー別のブログ記事ページのデザイン(HTMLマークアップやCSS)の切り替えです。

1.MTEntryIfCategory タグブロック内のサブテンプレートをモジュール化する
ブログ記事アーカイブのデザインを変更する1つめの方法で、MTEntryIfCategory タグブロック内にサブテンプレートをベタ書きするのではなく、MTInclude タグを使います。
カテゴリー1~3
<MTEntryIfCategory name="カテゴリー1">
<$MTInclude module="カテゴリー1"$>
</MTEntryIfCategory>
<MTEntryIfCategory name="カテゴリー2">
<$MTInclude module="カテゴリー2"$>
</MTEntryIfCategory>
<MTEntryIfCategory name="カテゴリー3">
<$MTInclude module="カテゴリー3"$>
</MTEntryIfCategory>
こうすることにより、カテゴリーアーカイブ本体では「どのカテゴリーにどのテンプレートを割り当てるか」という制御に徹することができ、テンプレート全体の見通しがよくなります。
汎用的なデザインを与えたいカテゴリー4~6を新たに追加する場合は、次のようにします。
<MTEntryIfCategory name="カテゴリー1">
<$MTInclude module="カテゴリー1"$>
<MTElse>
<MTEntryIfCategory name="カテゴリー2">
<$MTInclude module="カテゴリー2"$>
<MTElse>
<MTEntryIfCategory name="カテゴリー3">
<$MTInclude module="カテゴリー3"$>
<MTElse>
<$MTInclude module="カテゴリーその他"$>
</MTEntryIfCategory>
</MTEntryIfCategory>
</MTEntryIfCategory>
最初の MTEntryIfCategory タグでカテゴリー1であるか判定をし、そうでなければ MTElse を実行して、次の MTEntryIfCategory タグでカテゴリー2であるか判定をします。その繰り返しで、最後のカテゴリー判定にマッチしなかったカテゴリーには一番最後の MTElse タグの内容、つまりデフォルトとなるデザインのテンプレートモジュールを呼び出します。
2.MTEntryIfCategory タグを除去して、モジュール化をさらに最適化する
さて、すでにお気づきの方もいらっしゃると思いますが、1項のリストは、カテゴリーを識別するキーさえ取得できれば、実は以下の1行で済みます。
<$MTInclude module="カテゴリーを識別するキー"$>
「カテゴリーを識別するためのキー」として、次のようにカテゴリー名を使ってみます。カテゴリー名は、MTInclude タグを実行する前に、MTSetVarBlock タグを使って変数に設定し、変数名をmoduleモディファイアに与えれば、ダイナミックにカテゴリー名を設定することができます。
<$MTCategoryLabel setvar="category_name$>
<$MTInclude module="$category_name"$>
これで、このアーカイブが「カテゴリー1」の再構築を行うときには変数 category_name には「カテゴリー1」が、「カテゴリー2」の再構築を行うときには変数 category_name には「カテゴリー2」...という具合に設定され、それぞれ「カテゴリー1」「カテゴリー2」...という名前のテンプレートモジュールを呼び出します。
注意するのは、変数category_nameをmoduleモディファイア(というか、nameモディファイア以外)で使う場合は、変数名の前に大抵「$」をつけておく、ということです。
3.MTIf タグを使ってデフォルトデザインの条件分岐をつける
2つめのリストのように、デフォルトのデザインと振り分けたい場合は、さらに MTIf タグと MTCategoryDescription タグで制御します。
<$MTCategoryDescription setvar="category_description$>
<mt:if name="category_description">
<$MTInclude module="$category_description"$>
<mt:else>
<$MTInclude module="デフォルト"$>
<mt:if>
このリストを使う前準備として、各カテゴリーの「カテゴリーの説明」欄に、呼び出したいモジュール名を設定しておきます。デフォルトデザインのモジュールを呼び出したいときには、「カテゴリーの説明」欄には何も設定しません。
そうすれば、MTIf タグの判定で「カテゴリーの説明」欄に記入されている場合に、「カテゴリーの説明」欄に設定された名前のテンプレートモジュールを呼び出します。「カテゴリーの説明」欄に記入していない場合は、「デフォルト」という名前のテンプレートモジュールを呼び出します。
なお、前回もお伝えしたとおり、「カテゴリーの説明」欄を使うよりも、カスタムフィールドを利用した方が妥当に思われます。
- Movable Type 4 でカテゴリー別にブログ記事ページのデザインを切り替える方法(その1)
- Movable Type 4 でカテゴリー別にブログ記事ページのデザインを切り替える方法(その2)
キヤノン PIXUS mini360
かなり日が経ってしまいましたが、先日行われたMT4LP5 の直前に、交換用の名刺を手元に持ち合わせていないことに気がつき、名刺印刷用に「キヤノン PIXUS mini360」を急遽購入しておりましたので、製品の紹介まで。
![]() | キヤノン PIXUS mini360 キヤノン 2007-10-04 売り上げランキング : 3497 Amazonで詳しく見る by G-Tools |
この機種を選んだのは、通常のA4サイズを印刷するような大きい機種は置き場がなく、フォトプリンタ系で探し始めたためです。が、「プリンタで名刺を印刷する」という需要が少ないのか、そもそもどのフォトプリンタが名刺サイズに対応しているのか分からない、というところでつまづきました。
結局、カタログを睨めっこして、名刺サイズに対応している「キヤノン PIXUS mini360」を選んだのですが、今考えると、他のキャノンのフォトプリンタ(SELPHY)でもできたのかもしれません。カタログスペック上はこの機種しか載っていませんでした。
下は、キャノン SELPHY シリーズです。
![]() | Canon コンパクトプリンター SELPHY CP750 キヤノン 2007-06-07 売り上げランキング : 6754 Amazonで詳しく見る by G-Tools |
![]() | Canon コンパクトプリンター SELPHY CP740 キヤノン 2007-06-07 売り上げランキング : 6418 Amazonで詳しく見る by G-Tools |
話を戻して、キヤノン PIXUS mini360は、キャノンのフォトプリンタでは唯一のインクジェット方式(他は熱転写方式)です。また、4色カラーながら、最高解像度9600dpi、最小インク滴1pl というハイスペック。
操作も簡単、きびきびとした印刷っぷりで、予めデザインしていた名刺をあっという間に印刷できました(都合100枚)。
本来の機能であるフォトプリントは、主流になったメモリーカード差し込み方式(市販アダプタを使えば「miniSDメモリーカード」や「メモリースティック デュオ」からのプリントも可)。赤外線通信に対応したカメラ付き携帯電話なら、メモリーカードやケーブルなしで印刷できます。Bluetoothでのワイヤレスプリントも可能です(オプションのBU-20が必要)。
さらに別売のバッテリーを組み合わせれば、コンセントがない場所でもプリントできます(Lサイズ約130枚印刷可能)。
機能詳細は仕様は mini360 の公式サイトをご覧ください。
今回印刷した名刺はほとんどなくなったので、また機会があれば新しいデザインを考えたいと思います。好きな枚数も印刷できることや、デザインのバリエーションや微調整ができるのが、自前で印刷できるメリットですね。
インクジェットプリンタを購入したのは、おそらく10年振りくらいです。
ちなみに、前に買ったのはエプソンのPM-3500Cというもので、A3ノビまで対応しているので重宝しています。いまだに使ってはいるものの、ちょっと使わないとインクの噴射口が汚れるのか、きれいに印刷できるまで何回もクリーニングしなければならない状態です。
そろそろ次のプリンタを買わなければと思う今日この頃です。
Movable Type 4.15 ベータ1リリース
公にアナウンスされていないようですが、Movable Type 4.15 ベータ1(プロフェッシュナルパック同梱版)がリリースされました。言い換えると、MTOS 4.15 ベータのコア機能をベースにした Movable Type 4.15 ベータ(カスタムフィールド機能つき)がリリースされた、ということです。
すでに藤本壱さんの記事「Movable Type 4.15β4とメタデータの扱い」や mtos-ja で情報が公開されていますが、4.15 ではカスタムフィールドのテーブル構成が見直されています。
言い換えると、カスタムフィールドを実装するためのバックエンド機能が 4.15 で見直されて、カスタムフィールドはそれを元に作り直されています。
ちなみに、4.15 では MT::Meta クラスが新しく実装され、データベースには entry_meta とcategory_meta というテーブルが追加されています。さらに、mt_asset_meta/mt_author_meta/mt_blog_meta/mt_template_meta というテーブルも追加されています。
それに伴い、mt_entry テーブルから entry_meta カラムがなくなりました。
4.1 のテーブル(抜粋)

4.15 のテーブル(抜粋)

entry_meta のテーブル構造

カスタムフィールドを利用した場合、指定した型によって適切なカラムにデータを格納するようです。また、テキストや日付などの単純な構造のデータについてはシリアライズされません。
種類が「テキスト」のカスタムフィールド設定例

種類が「日付と時刻」のカスタムフィールド設定例

Movable Type 4 でカテゴリー別にブログ記事ページのデザインを切り替える方法(その1)
Movable Type 4 で、カテゴリー別にブログ記事ページのデザインを切り替える方法を、2回に分けて紹介します。
やりたいことは、ひとつのブログ記事アーカイブを使った、カテゴリー別のブログ記事ページのデザイン(HTMLマークアップやCSS)の切り替えです。

1.MTEntryIfCategory タグを使用する
ひとつめは、ブログ記事アーカイブテンプレートの中で MTEntryIfCategory タグを使って、カテゴリー別に処理を振り分ける方法です *1。MTEntryIfCategory タグは、処理中のブログ記事が属するカテゴリーを判定するためのタグです。このタグはブログ記事コンテキストで動作します。
MTEntryIfCategory タグの name モディファイアには、カテゴリー名が重複しないように設定します。
次のサンプルは、カテゴリー1~3に属するブログ記事のテンプレートを振り分けるサブテンプレートです。
<MTEntryIfCategory name="カテゴリー1">
:
(カテゴリー1に属するブログ記事アーカイブのテンプレート)
:
</MTEntryIfCategory>
<MTEntryIfCategory name="カテゴリー2">
:
(カテゴリー2に属するブログ記事アーカイブのテンプレート)
:
</MTEntryIfCategory>
<MTEntryIfCategory name="カテゴリー3">
:
(カテゴリー3に属するブログ記事アーカイブのテンプレート)
:
</MTEntryIfCategory>
また、タグの構造を変更すれば、特定のカテゴリーに属するブログ記事に特殊なデザインを与え、そうでないものについては汎用的なデザインを適用することもできます。
例えば、冒頭のサブテンプレートに、汎用的なデザインを使いたいカテゴリー4~6を新たに追加する場合、最初に示したサブテンプレートでは、カテゴリー4~6を個別に指定する必要がありますが、次のように変更すれば、一括した指定が可能です。
<MTEntryIfCategory name="カテゴリー1">
:
(カテゴリー1に属するブログ記事アーカイブのテンプレート)
:
<MTElse>
<MTEntryIfCategory name="カテゴリー2">
:
(カテゴリー2に属するブログ記事アーカイブのテンプレート)
:
<MTElse>
<MTEntryIfCategory name="カテゴリー3">
:
(カテゴリー3に属するブログ記事アーカイブのテンプレート)
:
<MTElse>
:
(カテゴリー4~6に属するブログ記事アーカイブのテンプレート)
:
</MTEntryIfCategory>
</MTEntryIfCategory>
</MTEntryIfCategory>
最初の MTEntryIfCategory タグでカテゴリー1であるかを判定し、そうでなければ MTElse を実行して、次の MTEntryIfCategory タグでカテゴリー2であるかを判定します。その繰り返しで、最後のカテゴリー判定にマッチしなかったカテゴリーのブログ記事には一番最後の MTElse タグの内容、つまりデフォルトとなるデザインを適用します。
ちなみに、次の設定は誤りです。
<MTEntryIfCategory name="カテゴリー1">
:
(カテゴリー1に属するブログ記事アーカイブのテンプレート)
:
</MTEntryIfCategory>
<MTEntryIfCategory name="カテゴリー2">
:
(カテゴリー2に属するブログ記事アーカイブのテンプレート)
:
</MTEntryIfCategory>
<MTEntryIfCategory name="カテゴリー3">
:
(カテゴリー3に属するブログ記事アーカイブのテンプレート)
:
<MTElse>
:
(カテゴリー4~6に属するブログ記事アーカイブのテンプレート)
:
</MTEntryIfCategory>
理由は、「カテゴリー4~6に属するブログ記事アーカイブのテンプレート」と書かれた部分にはカテゴリー1とカテゴリー2が含まれるからです。
2.スタイルシートについて
ここでは次の方法が考えられます。
head 要素が、1項のサブテンプレートの各カテゴリー別の部分に含まれているのであれば、head 要素内にカテゴリー用のスタイルシートを呼び出す link 要素をそのまま記述します(下)。
<MTEntryIfCategory name="カテゴリー1">
<head>
<link rel="stylesheet" href="<$MTBlogURL$>[カテゴリー1に属するブログ記事のスタイルシートファイル名]" type="text/css" encode_html="1"$>" media="screen,tv" />
</head>
:
(カテゴリー1に属するブログ記事アーカイブのテンプレート)
:
</MTEntryIfCategory>
<MTEntryIfCategory name="カテゴリー2">
<head>
<link rel="stylesheet" href="<$MTBlogURL$>[カテゴリー2に属するブログ記事のスタイルシートファイル名]" type="text/css" encode_html="1"$>" media="screen,tv" />
</head>
:
(カテゴリー2に属するブログ記事アーカイブのテンプレート)
:
以下省略
そうではなく、ブログ記事テンプレートから「ヘッダー」テンプレートモジュール(つまり head 要素)を呼び出している場合は、ブログ記事テンプレートの先頭に、次のような MTSetVar タグを記述します。
<MTEntryIfCategory name="カテゴリー1">
<mt:setvar name="style" value="カテゴリー1に属するブログ記事のスタイルシートのファイル名">
</MTEntryIfCategory>
<MTEntryIfCategory name="カテゴリー2">
<mt:setvar name="style" value="カテゴリー2に属するブログ記事のスタイルシートのファイル名">
</MTEntryIfCategory>
<MTEntryIfCategory name="カテゴリー3">
<mt:setvar name="style" value="カテゴリー3に属するブログ記事のスタイルシートのファイル名">
</MTEntryIfCategory>
<$MTInclude module="ヘッダー"$>
<MTEntryIfCategory name="カテゴリー1">
:
(カテゴリー1に属するブログ記事アーカイブのテンプレート)
:
以下省略
そして、「ヘッダー」モジュールには次のように記述しておきます。
これで、上のサブテンプレートで設定した変数 style の内容、つまりCSSファイル名が、「ヘッダー」モジュールに追加した link 要素の href 属性に反映されます。
<mt:if name="entry_archive">
<link rel="stylesheet" href="<$MTBlogURL$><$mt:getvar name="style"$>" type="text/css" title="<$MTCategoryLabel encode_html="1"$>" media="screen,tv" />
</mt:if>
または、「カテゴリーの説明」欄にスタイルシートのファイル名(下のサンプルでは拡張子なし)を設定しておけば、ブログ記事アーカイブに CSS ファイル名を設定しなくても、「ヘッダー」モジュールに設定した MTCategoryDescription タグで CSS ファイルを指定できます(下)。
<mt:if name="entry_archive">
<link rel="stylesheet" href="<$MTBlogURL$><$MTCategoryDescription$>.css" type="text/css" title="<$MTCategoryLabel encode_html="1"$>" media="screen,tv" />
</mt:if>
汎用的なカテゴリー用のスタイルシートを作りたい場合は、最初のサブテンプレートを次のように変更します。
<MTEntryIfCategory name="カテゴリー1">
<mt:setvar name="style" value="カテゴリー1に属するブログ記事のスタイルシートのファイル名">
<MTElse>
<MTEntryIfCategory name="カテゴリー2">
<mt:setvar name="style" value="カテゴリー2に属するブログ記事のスタイルシートのファイル名">
<MTElse>
<MTEntryIfCategory name="カテゴリー3">
<mt:setvar name="style" value="カテゴリー3に属するブログ記事のスタイルシートのファイル名">
<MTElse>
<mt:setvar name="style" value="カテゴリー4~6に属するブログ記事のスタイルシートのファイル名">
</MTEntryIfCategory>
</MTEntryIfCategory>
</MTEntryIfCategory>
<$MTInclude module="ヘッダー"$>
<MTEntryIfCategory name="カテゴリー1">
:
(カテゴリー1に属するブログ記事アーカイブのテンプレート)
:
以下省略
異なるカテゴリーで同じデザインを適用したい場合は、MTCategoryDescription タグに該当する「カテゴリーの説明」欄に同じ名称を記述しておきます。
なお、「カテゴリーの説明」よりもカスタムフィールドを使う方が、用途が明確になってよりいいでしょう。
次回は、さらに最適化したサブテンプレートを紹介します。
*1:MTIfCategory タグでも同じ効果があります。ここではブログ記事コンテキストであることを明示するために MTEntryIfCategory タグを使用しています。逆にカテゴリーアーカイブで MTEntryIfCategory タグは使えません。カテゴリーアーカイブなどのブログ記事コンテキスト以外のコンテキストで使用する場合は、MTEntries タグで括る必要があります。
- Movable Type 4 でカテゴリー別にブログ記事ページのデザインを切り替える方法(その1)
- Movable Type 4 でカテゴリー別にブログ記事ページのデザインを切り替える方法(その2)
MTOS 4.15 ベータ4リリースと公開プロファイルの日本語表記募集
MTOS 4.15 ベータ4がリリースされました。
管理画面系では、ローカライズがほぼ出来上がっています。

また、Six Apart では現在、公開プロファイルの日本語表記を募集しています。
今回新たに加わった2つの公開プロファイル Asynchronous Publishing と High Priority Static Publishing の日本語表示名を募集したいと思います。記事を書いてこの記事にトラックバックを送信いただくか、フィードバックフォームより [Movable Type のバージョン] 項目を Movable Type 4 Beta と選択し、ご投稿ください。
表記を募集しているのは次の2つです。
- Asynchronous Publishing(バックグラウンドキューを使った再構築)
- High Priority Static Publishing(インデックステンプレート、ブログ記事・ウェブページアーカイブテンプレートは静的再構築。それ以外のテンプレートは、バックグラウンドキューを使った再構築)
ベータ4の公開プロファイル選択画面は英語表記のままです。

個人的には、
- Asynchronous Publishing:非同期スタティックパブリッシング、バックグラウンド・スタティックパブリッシング、ピリオディック・スタティックパブリッシング、キューイング・スタティックパブリッシング
- High Priority Static Publishing:ハイブリッドパブリッシング、アドバンストパブリッシング
といったところでしょうか。
Asynchronous Publishing はスタティックパブリッシングの一種であることが分かる方がいいかなと思って、「スタティック」という単語を含めてます。
「ハイブリッドパブリッシング」は、上ノ郷谷さんが、ProNetミーティングや開発者向けカンファレンスでと言われていたらしいです(参考記事:Junnama Online - RebuildAt1stView(Beta) ハイブリッド・パブリッシング対応版。)。異なる再構築方式を組み合わせているので、この表記はしっくりしますね。
休日表示付きリアルタイムカレンダー for WordPress 日本語版
「休日表示付きリアルタイムカレンダー for WordPress」をバージョンアップして、WordPress 日本語版で曜日の部分に色をつけられるようにしました。

WordPress ME のカレンダーでは、曜日部分の土日に配色の設定がされていました。誤解されている方が多いようですが、これは「休日表示付きリアルタイムカレンダープラグイン」の設定ではなく、デフォルトで配色されていました(下)。

したがって、WordPress 日本語版で「休日表示付きリアルタイムカレンダープラグイン(v1.3)」を適用しても、曜日は真っ黒のままです(下)。

これを今回のバージョンアップで、WordPress 日本語版にプラグインを適用させたときに、土曜日と日曜日に配色の設定を行いました(下)。

1.プラグインのダウンロード
プラグインを以下のリンクからダウンロードしてください。
- 更新履歴
- 2008.04.24 v1.4 WordPress 日本語版対応
- 2008.04.26 v1.5 曜日部分の CSS 変更
2.プラグインのインストール
ダウンロードしたプラグインを展開し、中にある realtime-calendar フォルダを、wp-content/plugins にアップロードします。
WordPress のプラグイン一覧で、「Realtime Calendar」の右側の「利用する」をクリックすればOKです。あとはカレンダーを表示させるだけです。

3.注意事項
カレンダー用のテンプレートタグは、下記のもので動作の正常性を確認しています。
<li id="calendar"><?php get_calendar(); ?></li>
get_calendar() を括るタグに id属性 calendar を付与すれば大丈夫だと思います。CSS は適宜設定願います。
また、カレンダー先頭の「xxxx年xx月」という表示より当月を割り出していますので、この部分の表示が異なっていると、正常に動作しません(多言語対応はしていません)。
サブカテゴリーリストを定義型リストでマークアップする
Movable Type の、2階層のサブカテゴリーリストで、定義型リスト(dl/dt/dd:または定義リスト)によるマークアップを実現する方法です。ここでは Movable Type によるカスタマイズを記していますが、定義型リストの使い方の参考にもなると思います。
以前、ご質問を頂いたもので、本エントリーで情報展開しておきます。
1.完成例
親カテゴリーに dt 要素、子カテゴリーは全体を dd 要素で括った後、順不同リスト(ul/li)でリスト表示します。
<dl>
<dt>親カテゴリーA</dt>
<dd>
<ul>
<li>子カテゴリーA-1</li>
<li>子カテゴリーA-2</li>
<li>子カテゴリーA-3</li>
</ul>
</dd>
<dt>親カテゴリーB</dt>
<dd>
<ul>
<li>子カテゴリーB-1</li>
<li>子カテゴリーB-2</li>
<li>子カテゴリーB-3</li>
</ul>
</dd>
</dl>
ちなみに、上のリストを順不同リストで表現すると、次のようになります。
<ul>
<li>親カテゴリーA
<ul>
<li>子カテゴリーA-1</li>
<li>子カテゴリーA-2</li>
<li>子カテゴリーA-3</li>
</ul>
</li>
</ul>
<ul>
<li>親カテゴリーB
<ul>
<li>子カテゴリーB-1</li>
<li>子カテゴリーB-2</li>
<li>子カテゴリーB-3</li>
</ul>
</li>
</ul>
2.サブテンプレート
上記を実現するサブテンプレートは次のようになります。
<dl>
<MTTopLevelCategories>
<MTSubCatIsFirst><MTHasNoParentCategory><MTElse><dd><ul></MTHasNoParentCategory></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<MTHasNoParentCategory>
<dt><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]</dt>
<MTElse>
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]
</MTHasNoParentCategory>
<MTElse>
<MTHasNoParentCategory>
<dt><MTCategoryLabel></dt>
<MTElse>
<li><MTCategoryLabel>
</MTHasNoParentCategory>
</MTIfNonZero>
<MTSubCatsRecurse>
<MTHasNoParentCategory>
<MTElse>
</li>
</MTHasNoParentCategory>
<MTSubCatIsLast><MTHasNoParentCategory><MTElse></ul></dd></MTHasNoParentCategory></MTSubCatIsLast>
</MTTopLevelCategories>
</dl>
余談ですが、定義型リストによるマークアップは、以前行われた「コーディングコンテストVol.1」で最優秀賞を獲得された、「TOTOCO.ORG」さんのマークアップで利用されていて、審査員の方から「dl要素の使い方が良い」と、高い評価を受けています。
下の画面がコンテストで最優秀賞を得たサイトです。ブラウザから[表示]-[ページのソース]でマークアップをみることができます。
例えば、グローバルナビゲーションは次のようなマークアップです(一部省略しています)。
<dl id="globalNav">
<dt>主なカテゴリー</dt>
<dd>
<ul>
<li><a href="index.html"><img src="nav_home_cr.gif" alt="ホーム" width="98" height="54" /></a></li>
<li><a href="service/index.html"><img src="nav_biz.gif" alt="事業内容" width="98" height="54" /></a></li>
<li><a href="products/index.html"><img src="nav_products.gif" alt="製品情報" width="98" height="54" /></a></li>
<li><a href="recruit/index.html"><img src="nav_recruit.gif" alt="採用情報" width="98" height="54" /></a></li>
<li><a href="about/index.html"><img src="nav_about.gif" alt="会社概要" width="98" height="54" /></a></li>
<li><a href="contact/index.html"><img src="nav_contact.gif" alt="お問い合わせ" width="99" height="54" /></a></li>
</ul>
</dd>
</dl>
dt 要素は、次のCSSで非表示になっています(セレクタ名は一部省略)。
dl#globalNav dt{
position:absolute;
overflow:hidden;
width:0;
height:0;
}
丁度この時執筆していた、「Movable Type WEBデザインの新しいルール」のグローバルナビゲーションのカスタマイズにも、この定義型リストによるマークアップを利用させていただきました。
Movable Type のページ分割によるナビゲーションの前後ページ表示を絞り込む
Movable Type の MTPaginate プラグインによるページ分割を行った際、ナビゲーションの前後ページの表示を絞り込む方法です。
どういうことかと言うと、デフォルトの設定では、分割されたページが下の画面のようにすべて表示されてしまうのですが、本エントリーのカスタマイズを行えば、(多分)直近の前後ページのみの表示に変更できる、というものです。

下は、カスタマイズを行った後のナビゲーションです。上の画面と同じ、5ページに分割されたサンプルで、1ページ目を表示している状態です(とりあえず前後1ページのナビゲーションを表示する設定にしています)。

2ページ目を表示している時のナビゲーションです。3ページ目のナビゲーションが現れました。

3ページ目を表示している時のナビゲーションです。4ページ目のナビゲーションが現れ、1ページの表示が消えます。

4ページ目を表示している時のナビゲーションです。5ページ目のナビゲーションが現れ、2ページの表示が消えました。

5ページ目を表示している時のナビゲーションです。3ページの表示が消えました。

以下、カスタマイズ方法です。
1.MTPaginate プラグインによるページ分割の設定
下記の記事を参考にして、MTPaginate プラグインを Movable Type に設定してください。
注:2項を実施する前に、必ずページ分割が正常に動作することを確認してください。すべてを一気に行うと、正常に動作しなかった場合の切り分けができなくなります。
2.プラグインファイルの修正
MTPaginate/lib/MTPaginate.pm を任意のエディタで開き、赤色部分(v1.28 では 498行~506行)を青色部分に置き換えます。
$format_title = " . sprintf(' title=\"$format_title\"', \$i)" if $format_title;
$res .=<<PHP;
for(\$i = $start; \$i <= $end; \$i++) {
if(\$i > $start)
echo '$separator';
if(\$i == \$paginate_current_page) {
echo sprintf("$format_current", \$i);
} else {
echo "<a href=\\\"\$paginate_self=\$i$anchor\\\"$target" $format_title . sprintf('>$format', \$i) . '</a>';
}
}
PHP
if ($format_all && $place_all eq 'after') {
下が置き換えた後のリストです。
$format_title = " . sprintf(' title=\"$format_title\"', \$i)" if $format_title;
$res .=<<PHP;
for (\$i = $start; \$i <= $end; \$i++) {
if (\$paginate_current_page == 'all') {
if(\$i > $start)
echo '$separator';
if(\$i == \$paginate_current_page) {
echo sprintf("$format_current", \$i);
} else {
echo "<a href=\\\"\$paginate_self=\$i$anchor\\\"$target" $format_title . sprintf('>$format', \$i) . '</a>';
}
} else {
if (\$i > $start) {
if (\$i == \$paginate_current_page && \$i != 1) {
echo '$separator';
} else if (\$i < \$paginate_current_page) {
if (\$paginate_current_page - \$i < $offset) {
echo '$separator';
}
} else {
if (\$i - \$paginate_current_page < ($offset+1)) {
echo '$separator';
}
}
}
if (\$i == \$paginate_current_page) {
echo sprintf("$format_current", \$i);
} else {
if(\$i < \$paginate_current_page) {
if(\$paginate_current_page - \$i < ($offset+1)) {
echo "<a href=\\\"\$paginate_self=\$i$anchor\\\"$target" $format_title . sprintf('>$format', \$i) . '</a>';
}
} else {
if(\$i - \$paginate_current_page < ($offset+1)) {
echo "<a href=\\\"\$paginate_self=\$i$anchor\\\"$target" $format_title . sprintf('>$format', \$i) . '</a>';
}
}
}
}
}
PHP
if ($format_all && $place_all eq 'after') {
追加した箇所の2行上に、さらに青色の行を1行追加してください。
$format_title = " . sprintf(' title=\"$format_title\"', \$i)" if $format_title;
my $offset = $args->{offset} || 2;
$res .=<<PHP;
for (\$i = $start; \$i <= $end; \$i++) {
if (\$paginate_current_page == 'all') {
if(\$i > $start)
echo '$separator';
if(\$i == \$paginate_current_page) {
echo sprintf("$format_current", \$i);
} else {
echo "<a href=\\\"\$paginate_self=\$i$anchor\\\"$target" $format_title . sprintf('>$format', \$i) . '</a>';
}
} else {
if (\$i > $start) {
if (\$i == \$paginate_current_page && \$i != 1) {
echo '$separator';
} else if (\$i < \$paginate_current_page) {
if (\$paginate_current_page - \$i < $offset) {
echo '$separator';
}
} else {
if (\$i - \$paginate_current_page < ($offset+1)) {
echo '$separator';
}
}
}
if (\$i == \$paginate_current_page) {
echo sprintf("$format_current", \$i);
} else {
if(\$i < \$paginate_current_page) {
if(\$paginate_current_page - \$i < ($offset+1)) {
echo "<a href=\\\"\$paginate_self=\$i$anchor\\\"$target" $format_title . sprintf('>$format', \$i) . '</a>';
}
} else {
if(\$i - \$paginate_current_page < ($offset+1)) {
echo "<a href=\\\"\$paginate_self=\$i$anchor\\\"$target" $format_title . sprintf('>$format', \$i) . '</a>';
}
}
}
}
}
PHP
if ($format_all && $place_all eq 'after') {
修正が終わったら保存し、元のディレクトリにアップロードして、ファイルを上書きしてください。
うまく動かないようでしたら、元のMTPaginateのプラグインアーカイブから同じファイルを取り出して、再度チャレンジしてください。
3.offset モディファイアの指定
テンプレートに記述している MTPaginateNavigator タグに offset モディファイアを与えれば、前後に表示するページ数を指定できます。
指定しない場合のデフォルト値は2になっているので、前後2ページを表示します。
<MTPaginateNavigator offset="3">
とすれば、表示ページの前後3ページのナビゲーションを表示します。
4.動作確認状況
このカスタマイズで確認している MTPaginateNavigator タグのオプションは、
<$MTPaginateNavigator offset="n" style="links" format_all="All pages" place_all="before" separator=" | ">
<$MTPaginateNavigator offset="n" style="links" format_all="All pages" place_all="after" separator=" | ">
の2種類のみです。これ以外のパターンは未確認ですので、予めご容赦ください。
mt-csv2customfields v0.02
Category:[カスタムフィールド]
Tag:[[MovableType][Script][mt-csv2customfields]]
Permalink
CSV形式のデータを Movable Type のカスタムフィールドに一括読み込みさせるスクリプト mt-csv2customfields.cgi をバージョンアップしました。
追加機能は次の通りです。
- CSVデータにカテゴリー名(またはサブカテゴリー名)が設定可能
- カテゴリー名が存在しない場合、トップカテゴリーとして新規作成
- CSVデータにタグが設定可能
- タグの複数指定が可能
- 既存のブログ記事タイトルを指定した場合、カスタムフィールドの内容を上書き
最新版のダウンロードと使用方法は以下の記事を参照願います。
テキストからグラフィックをつくる(仮)
このエントリーは、先日エントリーした「555万5555アクセス特別企画」で見事キリ番 5555555 をゲットされた方のサイト紹介です。

サイト名は「テキストからグラフィックをつくる(仮)」。管理者は都内デザイン事務所に勤務されている fooo さん。
(以下の説明はほとんどサイトからの引用です。予めご了承ください)
このサイトは「あるものにルールを当てはめて変換を行うことによって、新しい別のものをつくる」という、変換によるデザインの手法を試みる個人的な実験サイトということです。
で、現在行っているのは、上のキャプチャにある、テキストを変換してグラフィックを生成することを行われています。
この「テキストを変換してグラフィックを生成」のロジック(変換ルール)は次の通りです。
- テキストを品詞分解
- 品詞分解した言葉の先頭文字を抽出
- 五十音に対応色が割り振られており、先頭文字によって、品詞分解された各言葉の粒子の色が決定
- 色の粒子の大きさは、分解された各言葉の音数によって決定
- 描画はテキストの順番通りに行われ、テキスト解析が進むごとに下方向へ移動
- 左右方向の粒子の触れ幅は、テキストのひらがなの割合によって決定
- テキストに読点・改行がある場合、粒子の描画位置が再設定される
- テキストの段落や場面が変化すると、描画位置が下方向へ大きく移動
- テキスト内にキーワード語を設定した場合、先頭文字に関係なく特殊な模様が描画
さらに詳しい解説が「図解付きPDF(924KB)」でご覧になれます。これを読むと冒頭のグラフィックの意味がよくお分かりになるでしょう。
品詞分解に Monzai、描画に Illustrator を使用し、AppleScript で両ソフトの制御をしています。
ご本人が「このサイトについて」で、
グラフィックとテキストを見比べても、その関係性はわかりずらいものです。けれども、数種類のグラフィックを見比べることにより、簡単なルールでもテキストのリズムが見えてきます
とおっしゃってますが、テキストの特徴が相対的に比較できるので、オープンなサービスにできて、比較の対象が増えると結構面白いかもしれません。
ますますのご活躍を期待しています。
MTOS 4.15 ベータ3リリース
MTOS 4.15 ベータ3がリリースされていました。
Movable Type 4.15 Beta は Movable Type Open Source コミュニティにおけるパフォーマンス向上のアクティビティの成果が盛り込まれたリリースです。ソースコードは Movable Type Open Source 4.15 となりますので、ベータ3ではカスタムフィールドなどを含む Professional Pack は同梱されていません。
ベータ3から(?)、日本語版がダウンロードできるようになっています。
テンプレート一覧の構成が大きく変わったのが衝撃で気がついてなかったのですが、一覧の中の表示も微妙に変わってます。
画面はインデックステンプレート一覧の一部について、MT4.1 と MTOS4.15ベータを比較したものです。
MT4.1 のテンプレート一覧

MTOS4.15 ベータのテンプレート一覧

具体的には、
- 「インデックステンプレートのページ表示のリンク」がテンプレート名に移動
- 「ダイナミックテンプレートの表示」が公開欄(Staticの部分)に縮退
- 「インデックスと同期して再構築」の表示が公開欄(Staticの部分)に縮退
となっているようです。4.1 から継承されているのは「ファイルにリンクされたテンプレート」のみです。
また、設定画面のダイナミックパブリッシングとバックグラウンド再構築の設定が、「公開設定」から消えました。公開設定に残っているのは、ダイナミックパブリッシングのオプションのみです。

ダイナミックパブリッシングとバックグラウンド再構築の設定は、テンプレート編集画面で直接選択できるようになってます。
Statically と Manually の違いは、インデックスの再構築と同期する・しないの違いと思ってます。

再構築を最適化するとこんな感じでしょうか。

ちなみにRSSもインデックステンプレートからなくなりました。
余談ですが、(多分)ベータ2からコメントに返信機能がデフォルトで表示されるようになりました。

返信を設定して確認画面に移動すると、返信が無効になる件はフィードバックさせて頂いてます。
「Movable Type プロフェッショナル・スタイル」重版決定
4月上旬に発売された「Movable Type プロフェッショナル・スタイル」の重版が決定致しました。
![]() | Movable Type プロフェッショナル・スタイル MT4.1対応 CSS Nite 上ノ郷谷 太一 蒲生 トシヒロ 毎日コミュニケーションズ 2008-04-08 売り上げランキング : 632 Amazonで詳しく見る by G-Tools |
「CMSとして使うMovable Typeガイドブック」に引き続き、こちらも発売後1週間で重版が決まったようです。
大変多くの方にお買い上げいただいているようで、ありがとうございます。
書籍の構成を再掲しておきます。
Introduction:Movable Type 4の概要とテンプレートの基本
- Movable Type 4の概要/金子順(Goodpic.Com)
- Movable Typeテンプレートの基本/上ノ郷谷 太一 (Anorak is not dead!)
Track A:企業サイトへの応用
- MT4を使ったビジネスサイト企画・設計/八木 明子(アークウェブ)
- 基礎からのテンプレートカスタマイズ/柳 泰久(@Style's Vox)
- CMSとして使うMT4/蒲生 トシヒロ(世界中の1%の人々へ)
- 企業サイト構築に役立つ、 実用的MTタグの組み方あれこれ/黒野明子(El diario de la diseñadora viviendo en tokio)
- 「QuickPlugins」を利用したECサイト構築/森 雅人(クイックソリューション)
Track B:プラグイン開発とカスタマイズ
- MTタグ、JavaScript を用いたサイトのカスタマイズ/ 荒木 勇次郎(小粋空間)
- プラグインを利用したカスタマイズ/藤本 壱(The blog of H.Fujimoto)
- MTプラグインを作ろう!/関根 元和(MovableTypeで行こう!)
- 教えて!プラグインを使ったステップアップ/小野 崎 直昭(WolaWola)
- 管理画面のカスタマイズ/野田 純生(Junnama Online (Mirror))
Track C:スキルアップのための環境構築
- MTの設置・運用に関するTIPS/ 丹羽 章(Online Digital Clock Works)
- Movable Typeを構築するためのサーバー選び
- Movable Typeのサーバー別インストール方法
- ローカルサーバーで動かすMT4(XAMPP、MAMP)
- phpMySdminを使ったデータ移動
- SPAM対策
- セキュリティ対
私の担当分は30ページほどですが、テンプレートタグと JavaScript を使ったカスタマイズの解説を行っています。テンプレートタグの使い方はかなり細かく解説しているつもりですので、興味のある方はご覧ください。
他の方の執筆担当分も、テンプレートの基本からカスタマイズ、プラグインの利用や作成、環境設定に至るまで、充実した内容です。
CSS でブログ本文の画像だけをセンタリングする
ブログのエントリー本文は、一般的に左寄せで表示しますが、「本文中の画像だけをセンタリングしたい場合はどうすればいいですか?」というご質問を頂きましたので、本エントリーで紹介します。
このカスタマイズを行えば、下の画面のように、画像だけをセンタリングすることができます。

ちなみに、これは昨年の11月に頂いた質問で、もっと早くエントリーを公開する予定でしたが、完全に忘却の彼方でした。大変申し訳ありません。
1.設定方法
エントリー全体が、
class="entry"
という class 属性で括られていると仮定した場合、CSS に、
.entry img {
display:block;
margin: 0 auto;
text-align: center;
}
を追加するだけです。
class属性名が異なる場合は .entry の部分を変更してください。また、セレクタ名を img という要素セレクタにしてしまうと、ブログ全体に設定が蔓延してしまうので、必ずエントリー本文に絞り込むセレクタを設定してください。
2.Movable Type 4 の場合
Movable Type 4 であれば、ブログ記事に画像をアップロードした時に配置の設定が可能です。「位置」欄にある「中央」を選択すればOKです。

この設定を行うと、img 要素に style 属性として、
style="margin: 0pt auto 20px; text-align: center; display: block;"
が設定されます。
img 要素にダイレクトに CSS が設定されるので、カスケードの優先度から、テンプレートを入れ替えても効果は変わりません。
EntryCategory プラグイン
Movable Type には MTEntryCategory というファンクションタグが存在しますが、これをブロックタグに置き換えるプラグインを作りました。
元々の発端は、EntryCategoryID プラグインを作った時に、他のプライマリーカテゴリーに関する情報も、このようなファンクションタグでしか出力できないことを不満に思ったからです。
テンプレ



