Movable Type 4.15 公開ベータテスト開始
Movable Type 4.15 公開ベータテストが開始しました。
Movable Type 4.15 では、パフォーマンス改善に関する様々な機能が追加されています。
- パフォーマンス改善
- パフォーマンスロギング機能
- 再構築の負荷を減らすテンプレートモジュールのキャッシュ
- 詳細な設定が可能になった再構築オプション
- 複数のテンプレートで利用しているテンプレートモジュール、ウィジェトの出力結果を共有して読み込み、再構築の負荷を減らすサーバー・サイド・インクルード
- 全文検索や、結果ページのページ分割など強化されたブログ検索
- 追加・拡張されたテンプレートタグ
- 追加された環境変数
- テンプレートごとのオプション設定インターフェイスの追加
- テンプレート一覧ページのリデザイン
- テンプレートのプレビュー
パッケージは MTOS として配布されています。
以下、各機能について抜粋でまとめてみました。タイトルのリンクをクリックすれば、公式サイトのより詳細な解説ページを参照できます。
1.パフォーマンスロギング機能
以下の内容をログファイルに出力します。
- 使用 OS などウェブサーバー環境に関する情報
- メモリー使用量
- テンプレートタグの処理時間
- リクエストされた URL
- プロセス ID
2.再構築の負荷を減らすテンプレートモジュールのキャッシュ
MTInclude ファンクションタグで読み込むテンプレートモジュールの内容をキャッシュします。
テンプレートモジュールまたはウィジェットの編集画面に次の「Module Caching」というオプションが追加されました(画面に入っていませんがチェックボックスには「ウェブページ」と「アイテム」もあります)。Expireする時間や動作も選択できるようです。
![]()
3.再構築オプションの詳細な設定
次の設定が可能になりました。
- 全てのテンプレートで出力されるページを、バックグラウンドのキューを使用し再構築を定期的に実施し、静的ファイルを出力
- インデックステンプレート、ブログ記事アーカイブテンプレートで出力されるページは、再構築実行時、静的にファイルを出力。それ以外はバックグラウンドのキューを使用して定期的に再構築を実施し、静的にファイルを出力。
4.サーバー・サイド・インクルード
テンプレートモジュールまたはウィジェットを呼び出すとき、サーバー・サイド・インクルード (SSI) を利用して、再構築時に適切なサーバー・サイド・インクルードの記述に変換します。再構築の負荷を削減します。
サーバー・サイド・インクルードの設定にはPHPも含まれているので、標準機能でPHP化が行えます。
テンプレートモジュールまたはウィジェットの編集画面に次の「Server Side Include」というオプションが追加されました。
![]()
ブログ設定画面に次の「Server Side Includes」という項目が追加されており、SSI の方法を選択します。

設定後、テンプレートモジュールまたはウィジェットの編集画面の「Server Side Include」というオプションに反映されます。
![]()
<$MTInclude module="サイドバー"$>
と書かれたテンプレートタグは、内容が展開されるのではなく、
<?php include("/www/htdocs/mt/includes_c/A3s/ssi.html") ?>
というようなインクルード文に置き換わります。
なお、SSI の設定だけではなく、例えばPHPによるSSI を行う場合は、別途PHP化が必要です。
5.検索結果ページのページ分割
キーワードもしくはタグでブログ内を検索した結果ページを分割して出力できます。また、分割されたページをあつかうテンプレートタグを利用して、ページナビゲーションのなどの作成も行えます。
6.追加・拡張されたテンプレートタグ
以下の検索結果関連タグが追加、および拡張されています。
- MTCurrentPage
- 現在表示中のページは検索結果の総ページの何番目かを出力
- MTTotalPages
- 検索結果の総ページ数を出力
- MTPagerBlock
- 検索結果ページの総ページ分繰り返し処理を実施
- MTIfCurrentPage
- ブロックタグを利用して作成したページナビゲーションの中で、現在表示中のページ数を判定
- MTSearchMaxResults
- 環境設定ファイル (mt-config.cgi) で設定されている環境変数 MaxResults の値を出力
- MTPagerLink
- 複数ページの検索結果になり、MTPagerBlock ブロックタグで検索結果ページ分繰り返し処理を行いナビゲーションを作成するとき、各検索結果ページへの URL を出力
- MTIfMoreResults
- 検索結果が設定した1ページに表示する件数より多いかを判定
- MTIfPreviousResults
- 検索結果が複数の検索結果ページになるとき、表示中のページにひとつ前のページがあるかを判定
- MTNextLink
- 複数ページの検索結果になるとき、表示中ページの次ページの URL を出力
- MTPreviousLink
- 複数ページの検索結果になるとき、表示中ページの次ページの URL を出力
- MTInclude
- テンプレートモジュールや、外部ファイルを読み込むときに使用。SSI や PHP のインクルードを利用可能
7.追加された環境変数
以下の環境変数が追加されました。
- AuthorBasenameLimit
- ユーザーアーカイブのベースネームの最大文字数を設定
- PerformanceLogging
- パフォーマンスロギング機能を使用するかどうかの設定
- PerformanceLoggingThreshold
- 処理時間が設定時間未満の場合はパフォーマンスログに出力しないように設定
- RebuildAtDelete
- 記事やウェブページなどを管理画面上で削除処理したとき、自動的に再構築を行うかどうかを設定
- ProcessMemoryCommand
- メモリー使用量の計測時に使用するコマンドを設定したい場合に使用
- SearchResultDisplay
- 検索結果の並べ替えの順序を設定
- SearchDefaultTemplate
- デフォルトで使用するサイト検索結果のテンプレートを設定
- SearchMaxResults
- 検索実行時に返される、結果の最大数を示
- SearchAltTemplate
- 検索結果の代替テンプレートを利用する際にテンプレートを設定
- SearchPrivateTags
- タグ検索で、@ で始まるプライベートタグを検索対象にするかを設定
- IncludesDir
- テンプレートモジュールやウィジェットを SSI インクルードオプションを使用して読み込むときに使用する対象ファイルを格納するディレクトリの名前を設定
8.テンプレート一覧ページのリデザイン
ブログのテンプレート管理画面は、ウィジェットを除く全てのテンプレートがひとつの画面に表示されるようになりました。
![]()
9.テンプレートのプレビュー
インデックステンプレート・アーカイブテンプレートにプレビュー機能が追加されました。フォームボタンの「確認」がそれです。

テンプレートセットで独自のカラムレイアウトを適用させる方法(その1:テーマ切り替えの仕組み)
Movable Type 4.1 で追加されたテンプレートセット機能で、切り替えたテンプレートセットを、さらに「スタイル」を利用してカラムレイアウトを適用さえる方法を紹介します。
カラムレイアウトを切り替えるためには、「スタイル(ブログ管理画面の「デザイン」→「スタイル」)」の機能を少し知っておく必要があります。「スタイル」は、MT3 の時代には「Style Catcher プラグイン」として配布されていた機能で、以前「StyleCatcher リポジトリ公開方法」というエントリーで一度説明しています。
MT4 ではカラムレイアウト選択機能が追加されているので、今回は「汎用ウェブサイト」を用いて、リポジトリの構成とテーマ切り替えの仕組みなどを解説します。
1.リポジトリの構成
「リポジトリ」とは、テーマを公開するにあたっての、必要な資材のセットを指します。
リポジトリの構成は、おおむね次のようになっています。
themes/
├ index.html
├ テーマ名1/
│ ├ screen.css
│ ├ thumbnail.gif
│ └ thumbnail-large.gif
└ テーマ名2/
├ screen.css
├ thumbnail.gif
└ thumbnail-large.gif
:
リポジトリ内に複数のテーマを設定できますが、ひとつでも構いません。
以下、それぞれのファイルの役割を説明します。
index.html
テーマスタイルを登録するファイルです。このファイルに記述したスタイルがスタイル選択画面の選択対象となります。
汎用テンプレートセットの HTML ファイル(universal.html)の内容は次のとおりです。
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="content-script-type" content="text/javascript" />
<meta http-equiv="content-style-type" content="text/css" />
<meta http-equiv="imagetoolbar" content="no" />
<title>Universal Themes</title>
<link rel="theme" type="text/x-theme" href="universal-black/screen.css" />
<link rel="theme" type="text/x-theme" href="universal-blue/screen.css" />
<link rel="theme" type="text/x-theme" href="universal-green/screen.css" />
<link rel="theme" type="text/x-theme" href="universal-pink/screen.css" />
</head>
<body>
<p>This is the Universal Theme set.</p>
</body>
</html>
ご自身のテーマ登録ファイルを作成するときは、このファイルをコピーして index.html として使うと良いでしょう。meta 要素はそのまま、title 要素の内容はスタイル選択画面の「カテゴリ」欄に表示されます。link 要素に記述した screen.css が、実際に選択対象になるテーマ(スタイルシート)です。スタイルシートは冒頭の構成のように、テーマ名ディレクトリの下に配置するのが一般的です。
body要素は空でも構いません。
screen.css
テーマ用スタイルシートです。キモとなるのは、このファイルのヘッダ部分に記述するフォーマット(下)です。
/*
A Six Apart theme adapted for Movable Type default templates
name: Cityscape Paris
designer: Tiffany Chow
designer_url: http://tiffany.vox.com/
layouts: layout-wtt, layout-twt, layout-wt, layout-tw
*/
青色で示した内容が、スタイル切り替え時、右下のセレクトボックスにカラムレイアウトとして反映されます。

thumbnail.gif
テーマ選択時に表示されるテーマのサムネイル画像です。120×90 で表示されます。
テーマスタイルと同じディレクトリに配置してください。
thumbnail-large.gif
サムネイルをクリックした後にこの画像が右側に表示されます。300×250 で表示されます。
テーマスタイルと同じディレクトリに配置してください。
2.テンプレートセットの構成
本体となるテンプレートセットの説明は省略していますが、テンプレートセットにリポジトリを同梱する場合のファイル構成は次のようになります。
テンプレートセット名
├ mt-static/
│ └ plugins/
│ └ テンプレートセット名
│ └ themes/
│ ├ index.html
│ └ テーマ名/
│ ├ screen.css
│ ├ thumbnail.gif
│ └ thumbnail-large.gif
└ plugins/
└ テンプレートセット名/
├ config.yaml
└ templates
└ 各テンプレート
このように、テンプレートセットにリポジトリを同梱する際には、ユーザーがアップロードしやすいよう、テンプレートセットに「mt-static/plugins/テンプレートセット名」のフォルダを作っておき、その下にリポジトリを同梱します。
リポジトリに限らず、mt-static にプラグイン資材をアップロードする時のお作法となっています。
また、上記の構成からお分かりのとおり、テンプレートセットのリポジトリのアップロード位置は、
mt-static/plugins/テンプレートセット名
を推奨します。
その理由は、プラグイン形式で配布するお作法にしたがっていることと、複数のテンプレートセットをアップロードした時に、どのテンプレートセットのリポジトリであるかを、ユーザーが容易に判別できるためです。
mt-static/themes でも構いませんが、この位置ではリポジトリを設定するHTMLファイルが存在しないため、スタイル一覧にサムネイルが表示されない(つまり目的のカラムレイアウト選択ができない)と思います(間違っていたらご指摘ください)。また、mt-static 配下に配置する資材がリポジトリ以外に何かある場合は、アップロード先が分断しないよう一ヶ所にまとめた方が良いでしょう。
3.ユーザーの作成したテーマをスタイル選択画面に表示する
1項でユーザーが任意のリポジトリを作成したと仮定し、ここではそれを読み込ませてみます。
ユーザーの作成したテーマを「デザイン」→「スタイル」画面から読み込ませるには、「+」アイコンをクリックします。

そして、このファイルがあるURLを指定します。

入力するURLは、
http://user-domain/mt-static/plugins/テンプレートセット名/themes/
という感じです。
汎用ウェブサイトでは、universal.html となっていますが、ユーザーがリポジトリを公開する場合は index.html としておいた方が、リポジトリURLの設定が簡単になります。
4.カラムレイアウトの切り替え
スタイル選択画面でカラムを切り替えると、セレクトボックスで選択した screen.css に対応した値(下の青色部分)が、変数 page_layout に選択したカラムレイアウトが保存されます。
/*
A Six Apart theme adapted for Movable Type default templates
name: Cityscape Paris
designer: Tiffany Chow
designer_url: http://tiffany.vox.com/
layouts: layout-wtt, layout-twt, layout-wt, layout-tw
*/
MT インストール時にはデフォルトのレイアウトが適用されます(変数 page_layout に初期値が設定されるようになったのはこのためかもしれません)。
5.インデックステンプレートのスタイルシート
最後に、インデックステンプレートのスタイルシート(styles.css)を説明します。
styles.css はテーマスタイルとベーステーマを呼び出すための import 命令が記述された簡素な内容です。
テーマスタイル(screen.css)は、前述のとおり、独自のファイルを適用できますが、ベーステーマファイル(themes-base/blog.css)は、テンプレートセットやスタイルを切り替えても必ず指定されます。
例として、下に汎用ウェブサイトの styles.css の内容を掲載します。
@import url(<$MTStaticWebPath$>themes-base/blog.css);
@import url(<$MTStaticWebPath$>addons/Commercial.pack/themes/universal-black/screen.css);
つまり、スタイルを切り替えた際には、screen.css のパスが自動的に書き換えられます。
Movable Type 4.1 テンプレートセット(スタイル対応版)
Movable Type 4.1 用のテンプレートセット(スタイル対応版)の配布を開始します。

Movable Type 4.1 で追加されたテンプレートセット機能を用いれば、これまでのようにテキストエリアにテンプレートをペーストせずに、簡単に入れ替えることができます。
このテンプレートセットは、先日公開した「Movable Type 4.1 テンプレートセット」に「スタイル」機能によるカラムレイアウト切り替え機能を追加したもので、テンプレートを編集せずに、8種類のカラムレイアウトを自由に切り替えることができます(下)。

CSS は配布済の Movable Type 4.1 テンプレートと互換性があります(ファイル名のみ変更が必要)。
1.テンプレートセットのダウンロード
「スタイル対応版」のテンプレートセットアーカイブを、下記のページからダウンロードしてください。
以下、テンプレートセットの利用方法です。
2.テンプレートセットのインストール
ダウンロードしたテンプレートセットアーカイブを解凍し、中にある plugins 配下にある KoikikukanTemplateSet フォルダを Movable Type の plugins フォルダに丸ごとアップロードしてください。
また、mt-static/plugins 配下にある KoikikukanTemplateSet フォルダを Movable Type の mt-static/plugins フォルダに丸ごとアップロードしてください。
「システムメニュー」→「プラグイン」でプラグインの一覧が表示されるので、「KoikikukanTemplateSet」が表示されていればインストールOKです。

3.テンプレートセットの入れ替え
ここではインストールされた状態で入れ替える方法を説明します。
ブログ管理画面より「デザイン」→「テンプレート」をクリック。

右下にある「ブログのテンプレートを初期化」をクリック。

「新しいテンプレートセットを適用」を選択し、セレクトボックスから「小粋空間テンプレートセット」を選択。「既存のテンプレートのバックアップを作成する」をチェックすると、入れ替え前のテンプレートのバックアップがとれます。
選択後、右下の「次へ」をクリック。

「確認」をクリック。これでテンプレートセットの入れ替えが開始します。

「テンプレートの初期化を完了しました。」が表示されれば完了です。

サイトの再構築アイコンをクリック。

「すべてのファイル」を選択して「再構築」をクリック。

「すべてのファイルを再構築しました。 」が表示されたら再構築完了です。

前の画面の「サイトを見る」をクリックするか、ブログ管理画面の「サイト表示」のアイコンをクリック。

当サイトのテンプレートセットのデザインで表示されれば完了です。デフォルトデザインのままであればブラウザをリロードしてください。

4.カラムレイアウトの切り替え
ここではカラムレイアウトを切り替える方法を説明します。
ブログ管理画面より「デザイン」→「スタイル」をクリック。

「既定のスタイル」の左側にある + マークのアイコンをクリック(「既定のスタイル」の部分は選択状態によって異なります)。

開いたウィンドウに小粋空間テンプレートセットをインストールしたスタティックディレクトリのテーマURLを入力。

具体的には、次のような URL になります。
http://[user-domain]/mt-static/plugins/KoikikukanTemplateSet/themes/
赤色の部分は、MT のスタティックディレクトリ(mt-static ディレクトリがある位置)までの URL を設定してください。
正しい URL であれば、次のような画面になるので、表示されたサムネイル画像をクリック。

右側に大きな画像が表示され、その下にレイアウト選択用のセレクトボックスが表示されます。

セレクトボックスからお好きなレイアウトを選択してください。ここでは「layout-two-column-right」を選択します。

レイアウトの対応は次の通りです。
| 名称 | 意味 |
|---|---|
| layout-three-column | 3カラム・固定レイアウト |
| layout-three-column-liquid | 3カラム・リキッドレイアウト |
| layout-two-column-right | 2カラム(右サイドバー)・固定レイアウト |
| layout-two-column-liquid-right | 2カラム(右サイドバー)・リキッドレイアウト |
| layout-two-column-left | 2カラム(左サイドバー)・固定レイアウト |
| layout-two-column-liquid-left | 2カラム(左サイドバー)・リキッドレイアウト |
| layout-one-column | 1カラム・固定レイアウト |
| layout-one-column-liquid | 1カラム・リキッドレイアウト |
選択後、「デザインを適用」をクリック。

「テーマを適用しました。レイアウトも変更されたので、再構築する必要があります。 設定を有効にするために再構築してください。」と表示されるので、ブログ全体を再構築してください。

スタイルが切り替わりました。サイドバーの内容もテンプレート編集画面で入れ替える必要はありません。
![]()
5.スタイルの変更
スタイルを変更する場合は、インデックステンプレートにある、「スタイルシート(styles-site.css)」を編集してください。
Movable Type 4.1 テンプレートセット
Movable Type 4.1 用のテンプレートセット配布を開始します。

Movable Type 4.1 で追加されたテンプレートセット機能を用いれば、これまでのようにテキストエリアにテンプレートをペーストせずに、簡単に入れ替えることができます。
1.テンプレートセットのダウンロード
テンプレートセットアーカイブを下記のページからダウンロードしてください。
以下、テンプレートセットの利用方法です。
2.テンプレートセットのインストール
ダウンロードしたテンプレートセットアーカイブを解凍し、中にある plugins 配下にある KoikikukanTemplateSet フォルダを Movable Type の plugins フォルダに丸ごとアップロードしてください。
「システムメニュー」→「プラグイン」でプラグインの一覧が表示されるので、「KoikikukanTemplateSet」が表示されていればインストールOKです。

また、images フォルダにある koikikukan.gif(クレジットバナー)をブログディレクトリ(index.html のあるディレクトリ)にアップロードしてください。ブログディレクトリにアップロードすれば、テンプレートを修正せずにクレジットバナーを表示します。
3.テンプレートセットの入れ替え
ここではインストールされた状態で入れ替える方法を説明します。
ブログ管理画面より「デザイン」→「テンプレート」をクリック。

右下にある「ブログのテンプレートを初期化」をクリック。

「新しいテンプレートセットを適用」を選択し、セレクトボックスから「小粋空間テンプレートセット」を選択。「既存のテンプレートのバックアップを作成する」をチェックすると、入れ替え前のテンプレートのバックアップがとれます。
選択後、右下の「次へ」をクリック。

「確認」をクリック。これでテンプレートセットの入れ替えが開始します。

「テンプレートの初期化を完了しました。」が表示されれば完了です。

サイトの再構築アイコンをクリック。

「すべてのファイル」を選択して「再構築」をクリック。

「すべてのファイルを再構築しました。 」が表示されたら再構築完了です。

前の画面の「サイトを見る」をクリックするか、ブログ管理画面の「サイト表示」のアイコンをクリック。

当サイトのテンプレートセットのデザインで表示されれば完了です。デフォルトデザインのままであればブラウザをリロードしてください。

Movable Type 4.1 リリース
Movable Type 4.1 がリリースされました。リリース候補第2版から正式版リリースまでの展開が予想外に早かったです。
本日 Movable Type 4.1 の出荷を開始しました。
昨年の Movable Type 4 のリリースにはじまり、エンタープライズ・ソリューション、コミュニティ・ソリューションのリリース。そして MTOS の発表と、大きな進化を遂げました。また、昨年末からは Movable Type 4.1 のベータテストを開始。みなさまから沢山のフィードバックをいただきました。本当にありがとうございます。
Six Apart 社の皆様、ありがとうございます。そしてお疲れ様でした。
以下に、これまでの 4.1 関連記事を再掲しておきます。
解説記事
- Movable Type 4.1 の「汎用ウェブサイト」テンプレートセットについて
- カスタムフィールドによるアップロード画像をサムネイルで表示するプラグイン 0.02
- カスタムフィールドによるアップロード画像をサムネイルで表示するプラグイン
- Movable Type 4.1 の「ブログのテンプレートを初期化」について
- Movable Type カスタムフィールドの DB スキーマ
- 予約変数一覧 for Movable Type 4.1
- MTLoop タグによる配列変数・ハッシュ変数の制御
- Movable Type 4.1 / MTOS における変数での算術演算子の利用方法
- Movable Type 4.1 / MTOS における配列とハッシュの利用方法
- Movable Type 4.1 カスタムフィールドの使用方法
- Movable Type 4.1 追加タグ一覧
リリース記事
- Movable Type 4.1 リリース候補第2版公開
- Movable Type 4.1 リリース候補版公開
- Movable Type 4.1 ベータ 3 リリース
- Movable Type 4.1 ベータ 2 リリース
- Movable Type 4.1 ベータテスト開始
あと、「汎用ウェブサイト」のスタイルも公開しておきます。
Movable Type 4.1 リリース候補第2版公開
Movable Type 4.1 のリリース候補第2版が公開されました。
Movable Type 4.1 のリリース候補第2版を公開
Movable Type 4.1 RC2 の日本語環境用にビルドされたバッケージをダウンロードできます。ダウンロードページの [Select default language:] セレクトメニューより [Japanese] を選択してください。
Movable Type 4.1 ベータのページでは、追加されるテンプレートタグなどの新機能に関するドキュメントなどを公開しています。また、movabletype.jp のブログでも新機能に関するブログ記事を公開しています。合わせてご利用ください。
この版で Universal Template Set(汎用ウェブサイトのテンプレートセット)が実装されました。これについては別エントリーで紹介致します。
Movable Type 4.1 リリース候補版公開
Movable Type 4.1 のリリース候補版が公開されました。
Movable Type 4.1 RC1 の日本語環境用にビルドされたバッケージをダウンロードできます。ダウンロードページの [Select default language:] セレクトメニューより [Japanese] を選択してください。
Movable Type 4.1 ベータのページでは、追加されるテンプレートタグなどの新機能に関するドキュメントなどを公開しています。また、movabletype.jp のブログでも新機能に関するブログ記事を公開しています。合わせてご利用ください。
ベータ3との差分で、テンプレートタグの追加はありませんでしたが、ContextHandlers.pm の diff を見ると、
@@ -5997,6 +5997,7 @@
}
$ctx->{__stash}{entries} = \@entries;
$ctx->{current_timestamp} = $this_day . '000000';
+ $ctx->{current_timestamp_end} = $this_day . '215959';
$ctx->{__stash}{calendar_day} = $day - $pad_start;
}
defined(my $out = $builder->build($ctx, $tokens, {
というのがありました。
'215959' は '235959' ではないでしょうか。
Movable Type 4.1 ベータ 3 リリース
Movable Type 4.1 ベータ 3 が公開されました。
Movable Type 4.1 Beta3 の日本語環境用にビルドされたバッケージをダウンロードできます。ダウンロードページの [Select default language:] セレクトメニューより [Japanese] を選択してください。
ベータ3では日本語版を選択してダウンロードできるようになっています。また、ベータ2でインストールできなかったという不具合が解消されています。
以下、ベータ1 からですが、テンプレート関係の変更点を挙げておきます。
スタイルシート
4.0x では、「スタイルシート(メイン)」「スタイルシート(ベーステーマ)」と2つのインデックステンプレートがありましたが、4.1 では「スタイルシート」ひとつになりました。

スタイルシートの内容は次のようになっています。インデックステンプレートであった「ベーステーマ」も @import で呼び出されています。

サイドバー
4.0x では「フッター」からテンプレートモジュール「サイドバー(2カラム)」「サイドバー(3カラム)」が呼び出されていましたが、4.1 では「サイドバー」というテンプレートモジュールが呼び出されています。

テンプレートモジュール「サイドバー」では変数 page_layout が判定されて、変数 page_columns にカラム数を設定します。そして、カラム数に応じてウィジェットセット「2カラムのサイドバー」または、「3カラムのサイドバー(メイン)」「3カラムのサイドバー(サブ)」が呼び出されます。

ウィジェットセットでは、ドラッグ&ドロップでウィジェットを設定します。「インストール済」に表示されているウィジェットがファイルに出力されます。

デフォルトで用意されているウィジェットセットです。以前は「First Widget Manager」というサンプル用のウィジェットセットがありましたが、なくなりました。

4,0 のサイドバーのリスト類は、再構築の負荷を考えて MTIf タグで表示されてテンプレートが制限されていましたが、今のところ、ウィジェットにはそのような MTIf タグによる制限がないようです。
構文強調表示
あと、4.0x でコピー&ペーストが不便だったため、ほとんど使っていなかった CodePress による構文強調表示のコピー&ペーストがいつの間にか改善されていました。
予約変数一覧 for Movable Type 4.1
MTIf タグ等でアーカイブ種別を判定するための、Movable Type 4.1 で予め用意された予約変数一覧です。
このエントリーは、MT4.0x 用にエントリーした「予約変数一覧 for Movable Type 4(その1)」を MT4.1 ベータ版の内容に書き換えたものです。赤字は 4.0x から削除された変数、青字は追加された変数です。
archive_listing が新たに追加され、カテゴリーアーカイブとユーザーアーカイブがその対象として追加されています。つまりリスト系のアーカイブがこの変数で判断できます。
これらは lib/MT/WeblogPublisher.pm に記載されているもので、抜粋したものを下記の表にまとめました(使用方法は後述)。
記載に誤りがあったため、マトリクスを修正しました。
修正後(これが正解です)
| Y | M | W | D | C | C | A | A | I | P | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Y | M | W | D | Y | M | W | D | |||||||||
| archive_template main_template | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
| datebased_archive | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ||||
| archive_listing | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ||
| datebased_only_archive | ○ | ○ | ○ | ○ | ||||||||||||
| category_archive | ○ | ○ | ○ | ○ | ○ | |||||||||||
| author_archive | ○ | ○ | ○ | ○ | ○ | |||||||||||
| entry_archive feedback_template | ○ | ○ | ||||||||||||||
module_category-monthly_archives | ○ | ○ | ||||||||||||||
module_author-monthly_archives | ○ | ○ | ||||||||||||||
| datebased_yearly_archive module_yearly_archives | ○ | |||||||||||||||
| datebased_monthly_archive | ○ | |||||||||||||||
| datebased_weekly_archive | ○ | |||||||||||||||
| datebased_daily_archive | ○ | |||||||||||||||
| category_yearly_archive | ○ | |||||||||||||||
| category_monthly_archive | ○ | |||||||||||||||
| category_weekly_archive | ○ | |||||||||||||||
| category_daily_archive | ○ | |||||||||||||||
| author_yearly_archive | ○ | |||||||||||||||
| author_monthly_archive | ○ | |||||||||||||||
| author_weekly_archive | ○ | |||||||||||||||
| author_daily_archive | ○ | |||||||||||||||
| entry_template | ○ | |||||||||||||||
| page_archive page_template | ○ | |||||||||||||||
修正前(一部誤りがあります)
| Y | M | W | D | C | C | A | A | I | P | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Y | M | W | D | Y | M | W | D | |||||||||
| archive_template main_template | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
archive_listing | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ||
| datebased_only_archive | ○ | ○ | ○ | ○ | ||||||||||||
| category_archive | ○ | |||||||||||||||
| author_archive | ○ | |||||||||||||||
feedback_template | ○ | ○ | ||||||||||||||
module_category-monthly_archives | ○ | ○ | ||||||||||||||
module_author-monthly_archives | ○ | ○ | ||||||||||||||
| datebased_yearly_archive module_yearly_archives | ○ | |||||||||||||||
| datebased_monthly_archive | ○ | |||||||||||||||
| datebased_weekly_archive | ○ | |||||||||||||||
| datebased_daily_archive | ○ | |||||||||||||||
| category_yearly_archive | ○ | |||||||||||||||
| category_monthly_archive | ○ | |||||||||||||||
| category_weekly_archive | ○ | |||||||||||||||
| category_daily_archive | ○ | |||||||||||||||
| author_yearly_archive | ○ | |||||||||||||||
| author_monthly_archive | ○ | |||||||||||||||
| author_weekly_archive | ○ | |||||||||||||||
| author_daily_archive | ○ | |||||||||||||||
| entry_template | ○ | |||||||||||||||
| page_archive page_template | ○ | |||||||||||||||
一番上にある略号の意味は次の通りです。
- Y:年別アーカイブ
- M:月別アーカイブ
- W:週別アーカイブ
- D:日別アーカイブ
- C:カテゴリーアーカイブ
- A:ユーザーアーカイブ
- I:ブログ記事アーカイブ
- P:ウェブページアーカイブ
カテゴリーアーカイブとユーザーアーカイブは、年別・月別・週別・日別との組み合わせもあります。
○印がついているのが、そのアーカイブを表示する時に、変数に "1" が設定されていることを示しています。●はデフォルトテンプレートで、テンプレート上に MTSetVar タグで設定されているものを示しています。
例えば、アーカイブ種別が「年別・月別・週別・日別」であることを判定したい場合は、
<MTIf name="datebased_only_archive">
:
</MTIf>
とテンプレート(またはテンプレートモジュール)に書きます。
このタグが書かれたテンプレートやテンプレートモジュールが「年別・月別・週別・日別」として実行される場合、MTIf タグのブロック内部が実行されます。
アーカイブ種別が「ブログ記事・ウェブページ」であることを判定したい場合は
<MTIf name="feedback_template">
:
</MTIf>
と書きます。このタグが書かれたテンプレートやテンプレートモジュールが「ブログ記事・ウェブページ」として実行される場合、MTIf タグのブロック内部が実行されます。
これらを利用すれば、独自の変数を用意する必要はありません。
2008.02.25
認識に誤りがあったため、マトリクスを修正しました。
MTLoop タグによる配列変数・ハッシュ変数の制御
Movable Type 4.0 では管理画面用だった MTLoop タグが、Movable Type 4.1 ではテンプレート上で利用できるようになりました。これにより配列やハッシュの取得が MTLoop タグで実現できるようになります。
以下、MTLoop での配列とハッシュの利用方法を紹介します。
1.配列を取得する
MTFor タグで設定し、MTLoop タグで取得するサンプルを示します。
<mt:for var="i" from="0" to="9">
<mt:setvar name="foo[$i]" value="$i">
</mt:for>
<mt:loop name="foo">
<mt:getvar name="__value__">
</mt:loop>
MTLoop タグの使い方は、name モディファイアに配列変数名を設定するだけで、ここでは foo を設定しています。
配列変数 foo の値は予約変数 __value__ に自動的に設定されるので、あとは MTGetVar タグの name モディファイアに指定するだけです。
MTLoop タグの部分を MTFor タグで書くと
<mt:for var="i" from="0" to="9">
<mt:setvar name="foo[$i]" value="$i">
</mt:for>
となるので、MTLoop タグの方が簡単に書けることがお分かりになると思います。
なお、MTLoopタグでは配列のインデックスが0から処理が開始されるため、設定側の MTFor タグの from モディファイアは「0」、to モディファイアは「9」を設定しています。
2.ハッシュを取得する
4.1 ベータ 2 から新しく追加された sethashvar タグ(ハッシュをまとめて定義できるタグ)を用いて、ハッシュを作成し、MTLoop タグで取得するサンプルを示します。
<mt:sethashvar name="week">
<mt:setvar name="mon" value="Monday">
<mt:setvar name="tue" value="Tuesday">
<mt:setvar name="wed" value="Wednesday">
<mt:setvar name="thu" value="Thursday">
<mt:setvar name="fri" value="Friday">
<mt:setvar name="sat" value="Saturday">
<mt:setvar name="sun" value="Sunday">
</mt:sethashvar>
<mt:loop name="week">
<$mt:getvar name="__key__"$> <$mt:getvar name="__value__"$>
</mt:loop>
テンプレートを再構築すると、下のように出力されます。
sun Sunday
fri Friday
tue Tuesday
sat Saturday
mon Monday
wed Wednesday
thu Thursday
配列変数の時と同様、name モディファイアに配列変数名を設定します。ここでは week を設定します。
配列変数 week のキーの値は予約変数 __key__ に、キーに対応する値は予約変数 __value__ に自動的に設定されるので、それぞれ MTGetVar タグの name モディファイアに指定します。
ハッシュは配列のような順序性がありませんが、sort_by モディファイアを設定することで、一定の規則にしたがって出力されます。
キーの文字列順で並べ替え
<mt:loop name="[変数名]" sort_by="key">
キーの文字列順(逆順)で並べ替え
<mt:loop name="[変数名]" sort_by="key reverse">
キーに対応する値の文字列順で並べ替え
<mt:loop name="[変数名]" sort_by="value">
キーに対応する値の文字列順(逆順)で並べ替え
<mt:loop name="[変数名]" sort_by="value reverse">
キーに対応する値の文字を数値として比較・並べ替え
<mt:loop name="[変数名]" sort_by="value numeric">
キーに対応する値の文字を数値として比較・並べ替え(逆順)
<mt:loop name="[変数名]" sort_by="value numeric reverse">
Movable Type 4.1 ベータ 2 リリース
Movable Type 4.1 ベータ 2 が公開されました。
ベータ1も含め、ファイルのアップロード画面およびアイテム管理画面が変わっていましたので、以下に紹介します。
ベータ2ではファイルのアップロード画面でフォルダの選択画面が追加されました。

アップロードしたファイルを使ってブログ記事を作成する時の位置指定に「なし」が追加されました。

ベータ1から、アイテムの一覧画面が変更されています。画像やファイル名をクリックすると情報を編集できるようになりました。

画像をクリックすると拡大表示される機能はそのままです。
これがアイテムの編集画面です。アイテムの名前や説明、タグが編集可能です。
右下にある「アイテムの埋め込み」をクリックすると、

このようにテキストフィールドにアイテムのURLが表示されます。

Movable Type 4.1 / MTOS における変数での算術演算子の利用方法
昨日エントリーした「Movable Type 4.1 / MTOS における配列とハッシュの利用方法」に加え、MT4.1/MTOS では算術演算子の利用が可能になりました。
詳細は後述しますが、可能な演算は、
- 加算(+)
- 減算(-)
- 乗算(*)
- 除算(/)
- 剰余(%)
- インクリメント(++)
- デクリメント(--)
で、変数の演算結果を同一変数に保持したり、MTIf タグ等での判定や、判定と同時に演算すること等が可能です。
ということで、こちらについても以下に利用方法をまとめてみました。なお、利用可能と思われるテンプレートタグは下記の通りです。
- MTIf
- MTUnless
- MTGetVar
- MTSetVar
- MTSetVarBlock
- MTSetVarTemplate
1.加算
フォーマット
op モディファイアに"+"または"add"を設定します。定義済みの変数に加算する場合は value モディファイアを記述し、加算したい値を設定します。
値を加算のみする場合
<$mt:setvar name="[変数名]" op="+" value="[加算値]"$>
または
<$mt:setvar name="[変数名]" op="add" value="[加算値]"$>
加算後に表示する場合
<$mt:getvar name="[変数名]" op="+" value="[加算値]"$>
または
<$mt:getvar name="[変数名]" op="add" value="[加算値]"$>
加算した結果を判定する場合(例は等しい場合を判定)
<mt:if name="[変数名]" op="+" value="[加算値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="add" value="[加算値]" eq="[比較値]">
サンプル
変数hogeに+1した結果を設定
<$mt:setvar name="hoge" value="1"$>
<$mt:setvar name="hoge" op="+" value="1"$>
変数hogeに+1した結果を表示
<$mt:setvar name="hoge" value="1"$>
<$mt:getvar name="hoge" op="+" value="1"$>
変数hogeに+1した結果が2であるかを判定
<$mt:setvar name="hoge" value="1"$>
<mt:if name="hoge" op="+" value="1" eq="2">
OK
<mt:else>
NG
</mt:if>
2.減算
フォーマット
op モディファイアに"-"または"sub"を設定します。定義済みの変数に減算する場合は value モディファイアを記述し、減算したい値を設定します。
値を減算のみする場合
<$mt:setvar name="[変数名]" op="-" value="[減算値]"$>
または
<$mt:setvar name="[変数名]" op="sub" value="[減算値]"$>
減算後に表示する場合
<$mt:getvar name="[変数名]" op="-" value="[減算値]"$>
または
<$mt:getvar name="[変数名]" op="sub" value="[減算値]"$>
減算した結果を判定する場合(例は等しい場合を判定)
<mt:if name="[変数名]" op="-" value="[減算値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="sub" value="[減算値]" eq="[比較値]">
サンプル
変数hogeから-1した結果を設定
<$mt:setvar name="hoge" value="10"$>
<$mt:setvar name="hoge" op="-" value="1"$>
変数hogeから-1した結果を表示
<$mt:setvar name="hoge" value="10"$>
<$mt:getvar name="hoge" op="-" value="1"$>
変数hogeに-1した結果が2であるかを判定
<$mt:setvar name="hoge" value="3"$>
<mt:if name="hoge" op="-" value="1" eq="2">
OK
<mt:else>
NG
</mt:if>
3.乗算
フォーマット
op モディファイアに"*"または"mul"を設定します。定義済みの変数に乗算する場合は value モディファイアを記述し、乗算したい値を設定します。
値を乗算のみする場合
<$mt:setvar name="[変数名]" op="*" value="[乗数値]"$>
または
<$mt:setvar name="[変数名]" op="mul" value="[乗数値]"$>
乗算後に表示する場合
<$mt:getvar name="[変数名]" op="*" value="[乗数値]"$>
または
<$mt:getvar name="[変数名]" op="mul" value="[乗数値]"$>
乗算した結果を判定する場合(例は等しい場合を判定)
<mt:if name="[変数名]" op="*" value="[乗数値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="mul" value="[乗数値]" eq="[比較値]">
サンプル
変数hogeに2倍した結果を変数に設定
<$mt:setvar name="hoge" value="1"$>
<$mt:setvar name="hoge" op="*" value="2"$>
変数hogeを2倍した結果を表示
<$mt:setvar name="hoge" value="1"$>
<$mt:getvar name="hoge" op="*" value="2"$>
変数hogeに2倍した結果が6であるかを判定
<$mt:setvar name="hoge" value="3"$>
<mt:if name="hoge" op="*" value="2" eq="6">
OK
<mt:else>
NG
</mt:if>
4.除算
フォーマット
op モディファイアに"/"または"div"を設定します。定義済みの変数に除算する場合は value モディファイアを記述し、除算したい値を設定します。
値を除算のみする場合
<$mt:setvar name="[変数名]" op="/" value="[除数値]"$>
または
<$mt:setvar name="[変数名]" op="div" value="[除数値]"$>
除算後に表示する場合
<$mt:getvar name="[変数名]" op="/" value="[除数値]"$>
または
<$mt:getvar name="[変数名]" op="div" value="[除数値]"$>
除算した結果を判定する場合(例は等しい場合を判定)
<mt:if name="[変数名]" op="/" value="[除数値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="div" value="[除数値]" eq="[比較値]">
サンプル
変数hogeを2で割った結果を変数に設定
<$mt:setvar name="hoge" value="10"$>
<$mt:setvar name="hoge" op="/" value="2"$>
変数hogeを2で割った結果を表示
<$mt:setvar name="hoge" value="10"$>
<$mt:getvar name="hoge" op="/" value="2"$>
変数hogeを2で割った結果が3であるかを判定
<$mt:setvar name="hoge" value="6"$>
<mt:if name="hoge" op="/" value="2" eq="3">
OK
<mt:else>
NG
</mt:if>
5.剰余
フォーマット
op モディファイアに"%"または"mod"を設定します。定義済みの変数に剰余する場合は value モディファイアを記述し、剰余したい値を設定します。
値を剰余のみする場合
<$mt:setvar name="[変数名]" op="%" value="[剰余値]"$>
または
<$mt:setvar name="[変数名]" op="mod" value="[剰余値]"$>
剰余後に表示する場合
<$mt:getvar name="[変数名]" op="%" value="[剰余値]"$>
または
<$mt:getvar name="[変数名]" op="mod" value="[剰余値]"$>
剰余した結果を判定する場合(例は等しい場合を判定)
<mt:if name="[変数名]" op="%" value="[剰余値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="mod" value="[剰余値]" eq="[比較値]">
サンプル
変数hogeを3で割った余りを変数に設定
<$mt:setvar name="hoge" value="5"$>
<$mt:setvar name="hoge" op="%" value="3"$>
変数hogeを3で割った余りを表示
<$mt:setvar name="hoge" value="5"$>
<$mt:getvar name="hoge" op="%" value="3"$>
変数hogeを3で割った余りが1であるかを判定
<$mt:setvar name="hoge" value="7"$>
<mt:if name="hoge" op="%" value="3" eq="1">
OK
<mt:else>
NG
</mt:if>
6.インクリメント
「インクリメント」とは、値に1を加算することを指します。
フォーマット
op モディファイアに"++"または"inc"を設定します。なお、定義済みの変数にしかインクリメントすることはできません。
値をインクリメントのみする場合
<$mt:setvar name="[変数名]" op="++"$>
または
<$mt:setvar name="[変数名]" op="inc"$>
インクリメント後に表示する場合
<$mt:getvar name="[変数名]" op="++"$>
または
<$mt:getvar name="[変数名]" op="inc"$>
インクリメントした結果を判定する場合(例は等しい場合を判定)
<mt:if name="[変数名]" op="++" eq="[比較値]">
または
<mt:if name="[変数名]" op="inc" eq="[比較値]">
サンプル
変数hogeをインクリメント
<$mt:setvar name="hoge" value="1"$>
<$mt:setvar name="hoge" op="++"$>
変数hogeをインクリメントした結果を表示
<$mt:setvar name="hoge" value="1"$>
<$mt:getvar name="hoge" op="++"$>
変数hogeをインクリメントした結果が2であるかを判定
<$mt:setvar name="hoge" value="1"$>
<mt:if name="hoge" op="++" eq="2">
OK
<mt:else>
NG
</mt:if>
7.デクリメント
「デクリメント」とは、値から1を減算することを指します。
フォーマット
op モディファイアに"--"または"dec"を設定します。なお、定義済みの変数にしかデクリメントすることはできません。
値をデクリメントのみする場合
<$mt:setvar name="[変数名]" op="--"$>
または
<$mt:setvar name="[変数名]" op="dec"$>
デクリメント後に表示する場合
<$mt:getvar name="[変数名]" op="--"$>
または
<$mt:getvar name="[変数名]" op="dec"$>
デクリメントした結果を判定する場合(例は等しい場合を判定)
<mt:if name="[変数名]" op="--" eq="[比較値]">
または
<mt:if name="[変数名]" op="dec" eq="[比較値]">
サンプル
変数hogeをデクリメント
<$mt:setvar name="hoge" value="10"$>
<$mt:setvar name="hoge" op="--"$>
変数hogeをデクリメントした結果を表示
<$mt:setvar name="hoge" value="10"$>
<$mt:getvar name="hoge" op="--"$>
変数hogeをデクリメントした結果が1であるかを判定
<$mt:setvar name="hoge" value="2"$>
<mt:if name="hoge" op="--" eq="1">
OK
<mt:else>
NG
</mt:if>
8.注意事項
文字列や数字を含んだ文字列に演算を行っても何も行われません。また、ベータ1a版の動作確認では、他のリスト系テンプレートタグとの組み合わせでは初期値が1でないと機能しないようです(下記)。
NG(初期値0)
<$mt:setvar name="hoge" value="0"$>
<MTEntries>
<$mt:setvar name="hoge" op="++"$>
</MTEntries>
<$mt:getvar name="hoge">
OK(初期値1)
<$mt:setvar name="hoge" value="1"$>
<MTEntries>
<$mt:setvar name="hoge" op="++"$>
</MTEntries>
<$mt:getvar name="hoge">
Movable Type 4.1 / MTOS における配列とハッシュの利用方法
公にアナウンスされていないようですが、MT4.1/MTOS では変数で配列とハッシュの操作が可能になり、変数処理がよりプログラマブルになりました。
ということで、以下に利用方法をまとめてみました。
1.配列
配列とは、同じ型のデータを連続的に並べた集合を指します。同一の変数名にインデックス(添え字)を付与することでデータを識別することができます。
例えば、week という変数に、Monday から Sunday までの文字列を設定するには、
week[0] = 'Monday'
week[1] = 'Tuesday'
week[2] = 'Wednesday'
week[3] = 'Thursday'
week[4] = 'Friday'
week[5] = 'Saturday'
week[6] = 'Sunday'
という感じになります。
MTSetVar による配列の設定
MTSetVar タグで配列を設定する方法は2通りあります。name モディファイアの変数名に直接インデックスを記述して、value モディファイアに値を設定するか(下)、
<MTSetVar name="week[0]" value="Mon">
<MTSetVar name="week[1]" value="Tue">
<MTSetVar name="week[2]" value="Wed">
:
index モディファイアを記述し、そこにインデックスを設定します(下)。value モディファイアは同じです。
<MTSetVar name="week" index="0" value="Mon">
<MTSetVar name="week" index="1" value="Tue">
<MTSetVar name="week" index="2" value="Wed">
:
MTSetVarBlock による配列の設定
MTSetVar タグに配列を設定する方法も、MTSetVar タグと大体同じで、name モディファイアの変数名に直接インデックスを記述し、value モディファイアの代わりにブロック内に値を記述します。
<MTSetVarBlock name="week[0]">
:
</MTSetVarBlock>
<MTSetVarBlock name="week[1]">
:
</MTSetVarBlock>
<MTSetVarBlock name="week[2]">
:
</MTSetVarBlock>
:
または、index モディファイアを記述し、そこにインデックスを設定します(下)。
<MTSetVarBlock name="week" index="0">
:
</MTSetVarBlock>
<MTSetVarBlock name="week" index="1">
:
</MTSetVarBlock>
<MTSetVarBlock name="week" index="2">
:
</MTSetVarBlock>
:
MTFor による配列の設定
単純な数値であれば MTFor で設定することも可能です。
下記に、0~6の値を配列に設定するサンプルを示します。MTFor タグの var モディファイアの変数名に配列のインデックスが設定されます。from モディファイアに最小値、to モディファイアに最大値を設定し、MTFor ブロック内に MTSetVar を記述して、配列のインデックスとなる $x を記述します。
<mt:for var="x" from="0" to="6">
<MTSetVar name="week[$x]" value="$x">
</mt:for>
MTSetVar の name モディファイアと別に、index モディファイアに $x を記述してもOKです。
<mt:for var="x" from="0" to="6">
<MTSetVar name="week" index="$x" value="$x">
</mt:for>
繰り返し処理による配列の設定
下記に、ブログ記事タイトルを配列の値に設定するサンプルを示します。
<MTEntries>
<MTSetVarBlock name="counter"><$MTGetVar name="__counter__"$></MTSetVarBlock>
<MTSetVarBlock name="entrytitle[$counter]"><$MTEntryTitle$></MTSetVarBlock>
</MTEntries>
2行目の counter は、インデックス値となる __counter__ の値を3行目に直接設定できないため、MTSetVarBlock でワンクッションおいてます。3行目でブログ記事タイトルを配列に設定しています。
配列の取得
配列の内容を取得・表示するには、MTGetVar(または MTVar)で name モディファイアにインデックスつきの変数名を指定します。
<MTGetVar name="week[0]">
<MTGetVar name="week[1]">
<MTGetVar name="week[2]">
:
実行結果
Mon
Tue
Wed
:
または、MTGetVar(または MTVar)で name モディファイアと別に index モディファイアにインデックス値を指定します。実行結果は同じです。
<MTGetVar name="week" index="0">
<MTGetVar name="week" index="1">
<MTGetVar name="week" index="2">
:
さらに MTFor タグを使うことで、繰り返しによる取得も可能です。
MTFor タグの var モディファイアの値が配列のインデックス値となります。from モディファイアに最小値、to モディファイアに最大値を設定し、MTFor ブロック内に MTGetVar を記述して配列の値を取得します。MTGetVar の name モディファイアにインデックス値となる $x を記述します。
<mt:for var="x" from="0" to="6">
<MTGetVar name="week[$x]">
</mt:for>
MTGetVar の name モディファイアと別に、index モディファイアに $x を記述してもOKです。
<mt:for var="x" from="0" to="6">
<MTGetVar name="week" index="$x">
</mt:for>
配列の要素数を求める
count 関数により、配列を設定した後の要素数を求めます。
フォーマットは、
<MTGetVar name="count(week)">
で、name モディファイアに要素数を求める関数名(count)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。
実行結果
7
または、
<MTGetVar name="week" function="count">
と書いても同じです。function モディファイアに関数名 count を記述します。
配列の最後からデータを取得する
pop 関数により、配列の最後からデータを取得し、配列から取得データを削除します。
フォーマットは、
<MTGetVar name="pop(week)">
で、name モディファイアに関数名(pop)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。
実行結果(結果には表示されませんが配列のインデックスが-1されています)
Sun
または、
<MTGetVar name="week" function="pop">
と書いても同じです。function モディファイアに関数名 pop を記述します。
配列の先頭からデータを取得する
shift 関数により、配列の先頭からデータを取得し、配列から取得データを削除します。
<MTGetVar name="shift(week)">
で、name モディファイアに関数名(shift)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。
実行結果(結果には表示されませんが配列のインデックスが-1されています)
Mon
または、
<MTGetVar name="week" function="shift">
と書iいても同じです。
2.ハッシュ
ハッシュは、配列のインデックスが文字列となったものです。この文字列となったインデックスを「キー」と呼びます。先の1週間の例では、
week[mon] = 'Monday'
week[tue] = 'Tuesday'
week[wed] = 'Wednesday'
week[thu] = 'Thursday'
week[fri] = 'Friday'
week[sat] = 'Saturday'
week[sun] = 'Sunday'
となります。
MTSetVar にハッシュの設定
MTSetVar タグにハッシュを設定する方法は2通りあります。name モディファイアの変数名に直接キー({}で囲まれた部分)を記述するか(下)、
<MTSetVar name="week{mon}" value="Monday">
<MTSetVar name="week{tue}" value="Tuesday">
:
key モディファイアを記述し、そこにキーを設定します(下)。
<MTSetVar name="week" key="mon" value="Monday">
<MTSetVar name="week" key="tue" value="Tuesday">
:
MTSetVarBlock にハッシュの設定
MTSetVarBlock タグにハッシュを設定する方法も、MTSetVar タグと大体同じで、name モディファイアの変数名に直接キーを記述し、value 属性の代わりにブロック内に値を記述します。
<MTSetVarBlock name="week{mon}">
:
</MTSetVarBlock>
<MTSetVarBlock name="week{tue}">
:
</MTSetVarBlock>
:
または、key モディファイアを記述し、そこにキーを設定します(下)。
<MTSetVarBlock name="week" key="mon">
:
</MTSetVarBlock>
<MTSetVarBlock name="week" key="tue">
:
</MTSetVarBlock>
:
ハッシュの取得
ハッシュの内容を取得・表示するには、MTGetVar(または MTVar)で name モディファイアにキーつきの変数名を指定します。
<MTGetVar name="week{mon}">
<MTGetVar name="week{tue}">
:
実行結果
Monday
Tuesday
:
または、MTGetVar(または MTVar)で name モディファイアと別に key モディファイアにインデックス値を指定します。実行結果は同じです。
<MTGetVar name="week" key="mon">
<MTGetVar name="week" key="tue">
:
ハッシュの要素数を求める
ハッシュを設定した後の要素数は次の方法で求めます。
<MTGetVar name="count(week)">
name モディファイアに要素数を求める関数名(count)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。
実行結果
7
または、
<MTGetVar name="week" function="count">
と書いても同じです。
ハッシュから要素を削除する
ハッシュから指定したキーの要素を取得し、同時にハッシュから該当要素を削除します。
<MTGetVar name="delete(week)" key="a">
name モディファイアに要素数を求める関数名(delete)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。
実行結果(結果には表示されませんがハッシュのキーが削除されています)
Monday
または、
<MTGetVar name="week" key="a" function="delete">
と書いても同じです。
以上です。
さらに複雑な制御も可能と思われますがとりあえずこの辺で。
Movable Type 4.1 カスタムフィールドの使用方法
Movable Type 4.1 で追加された「カスタムフィールド」の利用方法です。
この機能は以前、CustomFields プラグインとして公開されていたものが、MT4.1 で新たにアドオンとして追加されました。カスタムフィールドを利用すれば、ブログ管理ユーザがブログ記事投稿画面等に任意のフィールドを新たに追加することができます(下は追加例)。

この機能はプラグインとして配布されている頃から有名でしたが、当ブログでは一度も紹介したことがなかったので、今回は気合を入れて、設定方法およびサンプルによる使用例を記してみました。
1.設定方法
ブログ管理画面より「設定」→「カスタムフィールド」をクリック。

「フィールドを作成」をクリック。なお、左のメニューにも「カスタムフィールド」が追加されています。

このような画面が表示されます。

以下、ブログ記事に「関連リンク」というフィールドを追加する例で設定内容を紹介します。
1.1 システムオブジェクト
フィールドを追加するオブジェクトを「ブログ記事」「ウェブページ」「カテゴリ」「フォルダ」より選択します。

追加フィールドは選択したオブジェクトでのみ利用可能になります。
例えば「ブログ記事」を選択すると、ブログ記事投稿・編集画面に追加したフィールドが表示されます。「カテゴリ」を選択すると、カテゴリを新規作成した後、カテゴリの編集画面に追加したフィールドが表示されます。
1.2 名前
フィールドの名前を入力します(必須項目)。ここでは「関連リンク」と入力します。

以前作成したフィールドと同じ名前を設定するとエラーになりますが、後述するベースネームを変更すれば同じ名前を使うこともできます。
1.3 説明
フィールドの説明を入力します。任意のテキストを入力します。

1.4 種類
フィールドの種類を選択します。ここでは「テキスト(複数行)」を選択します。

選択する種類によって後方の「規定値」や「オプション」等の入力内容が変化します。以下、各メニュー選択時の表示をまとめて掲載しておきます。
- テキスト

- テキスト(複数行)

- チェックボックス

- URL

- 日付と時刻

- ドロップダウン

- ラジオボタン

- アイテム

- オーディオ

- ビデオ

- 画像

1.5 必須
フィールドへの値の入力を必須にするかを決定します。

必須にした場合、入力がない状態で保存すると、エラーになります。また、必須に設定すると、各オブジェクトの編集画面上に常に表示されるようになります。

1.6 既定値
フィールドが表示された時に表示あるいは選択される初期値を入力します。

入力すると、ブログ記事投稿時等、該当フィールドに初期値が表示されます。
1.7 ベースネーム
「ベースネーム」は、ブログ記事・ページの「出力ファイル名」、あるいはカテゴリ・フォルダの「ファイル名」と同じで、このフィールドを特定するためにデータベースで使用するものです。基本的に変更する必要はありません。

もし変更する場合は、インストールした Movable Type 内でユニーク(他のフィールドのベースネームと重複しない)な名称にしてください。
1.8 テンプレートタグ
フィールドの値を出力するテンプレートタグを作成します。入力した後、すぐ下の「テンプレートの例」をクリックすれば、値を表示する際に、テンプレートタグをどのように設定すべきかが分かります。

サンプルでは「RelatedLinks」と入力してみました。
なお、「名前」フィールドに半角文字を入力した後、「テンプレートの例」をクリックすると、「名前」フィールドがこのフィールドに反映されるようですが、任意の名称に変更して構いません。
すべて設定したら一番下の「保存」をクリックします。OKであれば下のように登録されます。

必須項目が設定されていないと警告が表示されます。
正常に追加された後、「設定」→「カスタムフィールド」に一覧として表示されます。

2.追加したフィールドの表示
1項の設定で新しいフィールドが追加されました。
サンプルではブログ記事に追加したのでブログ記事投稿・編集画面に表示される筈ですが、デフォルト状態では表示されないため、デフォルトで表示されるための設定をします。
ブログ記事投稿画面右上にある「表示」をクリック。

表示オプションに追加したフィールド(関連リンク)が表示されているので、チェックして、「OK」をクリック。

これでブログ記事投稿画面に「関連リンク」フィールドが表示されました。なかなかいい感じです。

フィールドの種類で「画像」を追加すると、下記のようなフィールドを表示することができます。「imageを選択」をクリックすると画像の選択またはアップロード画面に遷移します。

フィールドの種類で「ラジオボタン」を追加すると、下記の「おすすめ度」のようなフィールドを表示できます。

フィールドの種類で「チェックボックス」を追加すると、下記の「ランダム表示に追加」のようなフィールドを表示できます。ちなみに、チェックされている場合、このフィールドのテンプレートタグには"1"が設定されますので、MTIfタグ等で表示を制御したい場合に有効でしょう。

3.テンプレートの修正
フィールドの内容を表示するためのテンプレートを設定します。
サンプルはブログ記事に表示させているので、「ブログ記事の詳細」に表示するためのタグを追加してみます。

4.フィールドに入力
ブログ記事投稿をしてみます。新しいフィールドにはとりあえず下のように設定してみました。

5.表示
投稿すると下のように表示されました。なかなかいい感じです。

6.フィールドの表示順序
ひとつのオブジェクトに複数のフィールドを表示させると、右下の「フィールドの順序」をクリックすれば、現在表示されているフィールドの順序を入れ替えることができます。

入れ替えるには、入れ替えたいフィールドをドラッグして「保存」をクリックします。

7.注意事項
- 異なるオブジェクトで同一名称のタグ名は設定できません
- 一旦作成したフィールドの種別を変更することはできません
2007.12.15
2項の記述を追加・修正し、6項を新たに追加しました。
Movable Type 4.1 追加タグ一覧
Movable Type 4.1 で新たに追加されるタグ一覧です。公式サイトでもかなり良質なドキュメントがすでに用意されていますが、やや分かりにくい部分について、ドキュメントからの引用で補足してみました。
1.ブロックタグ
MTFor
いわゆる「for ループ」を行うためのブロックタグです。以下のモディファイアで指定された値にもとづいて、ブロック内を繰り返し処理します。
モディファイア(属性)には下記を設定します。
- from(start)モディファイア:繰り返しの初期値を指定
- to(end)モディファイア:繰り返しの最終値を指定
- increment(step)モディファイア:インクリメント(加算)値を指定。省略時は1ずつ増加
- glue:ループ中の区切り文字を指定
fromが1、toが10、incrementなしであれば、1,2,3,4,5,6,7,8,9,10と、fromの値を1つずつ加算しながら、10になるまで繰り返されます。
JavaScript であれば、
for (i=0; i<10; i++) {
// 繰り返したい処理
}
という感じでしょうか。
サンプル
<mt:for var="x" from="5" to="10" glue= " | ">
<mt:if name="__first__"><p>This is my first time through!</p></mt:if>
<p>now x = <mt:var name="x"></p>
<mt:if name="__last__"><p>This is my last time through!</p></mt:if>
</mt:for>
実行結果(見やすいように折り返してます)
<p>This is my first time through!</p>
<p>now x = 5</p> | <p>now x = 6</p> | <p>now x = 7</p> |
<p>now x = 8</p> | <p>now x = 9</p> | <p>now x = 10</p>
<p>This is my last time through!</p>
変数として下記の予約変数を利用することができます。
- __first__:ループの初回のみ実行
- __last__:ループの最後のみ実行
- __odd__:ループの奇数回目に実行
- __even__:ループの偶数回目に実行
- __index__:ループのインデックスを格納
- __counter__:ループ回数を格納
__index__ と __counter__ 変数の違いは、以下のサンプルで確認することができます。
サンプル
<mt:for var="test" from="10" to="20" increment="2">
<p>now test =
<mt:var name="test"> |
__index__: <MTVar name="__index__"> |
__counter__: <MTVar name="__counter__">
</p>
</mt:for>
実行結果
<p>now test = 10 | __index__: 10 | __counter__: 1</p>
<p>now test = 12 | __index__: 12 | __counter__: 2</p>
<p>now test = 14 | __index__: 14 | __counter__: 3</p>
<p>now test = 16 | __index__: 16 | __counter__: 4</p>
<p>now test = 18 | __index__: 18 | __counter__: 5</p>
<p>now test = 20 | __index__: 20 | __counter__: 6</p>
__counter__ は純粋にループ回数のみを格納しますが、__index__ は「開始値+ループ回数」を格納します。
MTIncludeBlock
既存の MTInclude の機能に加え、テンプレートモジュールをインクルードする際、インクルード元のテンプレートからテンプレートモジュールに任意のコンテンツ(変数)を与えるためのタグです。
インクルード元のテンプレート(例えばメインページ)の内容
<MTIncludeBlock module="Some Module" var="contents">
(do something here)
</MTIncludeBlock>
(do something here) の部分に、テンプレートモジュールに渡したいコンテンツを設定します。
テンプレートモジュール Some Moduleの内容
(header stuff)
<MTVar name="contents">
(footer stuff)
<MTVar name="contents"> の部分に、インクルード元から渡されたコンテンツ(この例では「(do something here)という文字列」)を表示します。
メインページでの実行結果
(header stuff)
(do something here)
(footer stuff)
MTSetVars
複数の変数を一括設定するタグです。
記述フォーマットは「変数名=値」で、複数記述することができます。
<MTSetVars>
変数名1=値1
変数名2=値2
変数名3=値3
:
</MTSetVars>
となります。空行や前後にスペースが含まれていても除去されます。値にファンクションタグも利用可能です。
<MTSetVars>
a=1
b=foo
c=<$MTBlogName$>
</MTSetVars>
下のようにMTIncludeBlockタグと併用することで、テンプレートモジュールとの連携が可能です。
インクルード元のテンプレートのサンプル(テンプレートモジュールに渡すパラメータを設定)
<MTIncludeBlock module="banner">
<MTSetVars>
banner_link=http://example.com/
banner_name=advertisement_a
banner_width=728
banner_height=90
</MTSetVars>
</MTIncludeBlock>
bannerテンプレートモジュールのサンプル
<img src="<$mt:getvar name="banner_link"$>"
alt="<$mt:getvar name="banner_name"$>"
width="<$mt:getvar name="banner_width"$>"
height="<$mt:getvar name="banner_height"$>" />
実行結果
<img src="http://example.com/"
alt="advertisement_a"
width="728"
height="90" />
MTIncludeBlockでbannerをインクルードする時、MTIncludeBlockブロック内のMTSetVarsに設定された変数が、bannerテンプレートモジュールに渡されます。
bannerテンプレートモジュールでは、MTGetVarによって指定した変数(banner_xxx)をインクルード元から受け取り、値をそれぞれ埋め込み、変数が展開されたものをインクルード元のテンプレートにわたします。
MTAuthorUserpicAsset
登録ユーザのプロフィール画像リストを表示します。
MTAuthorsブロックタグ内で有効のようで、ブロックタグ内でアイテム関連のテンプレートタグを利用することができます。
サンプル
<ul><mt:Authors>
<mt:AuthorUserpicAsset>
<li>
<img src="<mt:AssetThumbnailURL width="20" height="20">" width="20" height="20" />
<mt:AuthorName>
</li>
</mt:AuthorUserpicAsset>
</mt:Authors></ul>
MTEntryAuthorUserpicAsset
ブログ記事投稿者のプロフィール画像を表示します。
MTEntriesブロックタグ、ブログ記事アーカイブ等で有効で、ブロックタグ内でアイテム関連のテンプレートタグを利用することができます。
サンプル
<ul><mt:Entries>
<mt:EntryAuthorUserpicAsset>
<li>
<img src="<mt:AssetThumbnailURL width="20" height="20">" width="20" height="20" />
</li>
</mt:EntryAuthorUserpicAsset>
</mt:Entries></ul>
MTCommenterUserpicAsset
コメント投稿者のプロフィール画像を表示します。
MTCommentsブロックタグ内で有効のようで、ブロックタグ内でアイテム関連のテンプレートタグを利用することができます。
サンプル
<ul><mt:Comments>
<mt:CommenterUserpicAsset>
<li>
<img src="<mt:AssetThumbnailURL width="20" height="20">" width="20" height="20" />
</li>
</mt:CommenterUserpicAsset>
</mt:Comments></ul>
2.ファンクションタグ
MTNotifyScript
通知スクリプトのファイル名を表示します。
設定例
<mt:CGIPath><mt:NotifyScript>
実行結果
http://・・・/mt-add-notify.cgi
MTCommenterUsername
コメント投稿者名を表示します。
MTCommenterID
コメント投稿者のIDを表示します。
上記2つのタグのサンプル
<mt:Entries>
<h1><mt:EntryTitle></h1>
<mt:Comments>
<a name="comment-<mt:CommentID>"></a>
<p><mt:CommentBody></p>
<cite><a href="/profiles/<mt:CommenterID>"><mt:CommenterUserName></a></cite>
</mt:Comments>
</mt:Entries>
MTCommenterURL
コメント投稿者のURLを表示します。
MTCommenterUserpic
コメント投稿者のプロフィール画像を表示します。
サンプル
<h2>最近コメントしたユーザー</h2>
<mt:Comments>
<div class="userpic" style="float: left; padding: 5px;"><mt:CommenterUserpic></div>
</mt:Comments>
実行結果
<h2>最近コメントしたユーザー</h2>
<div class="userpic" style="float: left; padding: 5px;"><img src="http://yourblog.com/userpics/1.jpg" width="100" height="100" /></div>
MTCommenterUserpicURL
コメント投稿者のプロフィール画像URLを表示します。
サンプル
<img src="<mt:CommenterUserpicURL>" width="100" height="100" />
MTAuthorUserpic
登録ユーザのプロフィール画像を表示を表示します。
サンプル
<ul><mt:Authors>
<mt:AuthorUserpicAsset>
<li>
<mt:AuthorUserpic>
<mt:AuthorName>
</li>
</mt:AuthorUserpicAsset>
</mt:Authors></ul>
MTAuthorUserpicURL
登録ユーザのプロフィール画像URLを表示を表示します。
サンプル
<img alt="" src="<mt:EntryAuthorUserpicURL>" width="100" height="100" />
MTBlogTemplateSetID
ブログで使用しているテンプレートセットを特定するためのIDを出力するファンクションタグです。
サンプル
<body class="<mt:BlogTemplateSetID>">
結果のIDは"mt-blog"等の文字列が表示されます。
MTEntryClassLabel
コンテンツがブログ記事かウェブページかを表示します。
サンプル
<MTSearchResults>
<div class="search-results-container">
</MTBlogResultHeader>
<mt:SetVarBlock name="type"><mt:EntryClassLabel></mt:SetVarBlock>
<mt:If name="$type" eq="Page">
<$MTInclude module="Page Summary"$>
<mt:Else>
<$MTInclude module="Entry Summary"$>
</mt:If>
<MTBlogResultFooter>
</div>
</MTBlogResultFooter>
</MTSearchResults>
上記のサンプルでは"Page"で判定していますが、日本語環境で実行した場合、ブログ記事で実行すると"ブログ記事"、ウェブページで実行すると"ウェブページ"が返却されるようです。
MTEntryAuthorUserpic
ブログ記事投稿者のプロフィール画像を表示します。
実行結果
<img src="http://yourblog.com/userpics/1.jpg" width="100" height="100" />
MTEntryAuthorUserpicURL
ブログ記事投稿者のプロフィール画像URLを表示します。
サンプル
<img src="<mt:EntryAuthorUserpicURL>" width="100" height="100" />
MTCommentLink
投稿されたコメントへのパーマリンク URL を表示を表示します。
同じ結果になるタグ
<$MTEntryPermalink$>#comment-<$MTCommentID$>
と等しい。
MTCategoryCommentCount
カテゴリーへのコメント数を表示します。
サンプル
<ul><mt:Categories>
<li><mt:CategoryLabel> (<mt:CategoryCommentCount>)</li>
</mt:Categories></ul>
3.MTOSとの差分
以下はMTOSとの差分です。MT4.1のドキュメントには掲載されていませんでした。
以下、推測で書いています。間違っていたらすいません。
MTIfBlog
ブログIDを判定
MTIfAuthor
登録ユーザを判定
MTAuthorHasEntry
ユーザがブログ記事を投稿しているかを判定
MTAuthorHasPage
ユーザがウェブページを作成しているかを判定
モディファイア
wrap_text
4.関連記事
Movable Type 4.1 ベータテスト開始
Movable Type 4.1 ベータテストが12月14日より開始されます。
シックス・アパートが、最新ブログ・ソフトウェア「Movable Type 4.1」を発表
「Movable Type 4.1」での最大の強化点は、CMS機能として高いニーズがある「カスタムフィールド機能」を基本機能として標準搭載することです。カスタムフィールド機能を利用することで、ブログ記事やウェブページ作成時の、管理画面の入力項目を、任意に追加・拡張することができるようになり、ウェブサイトの運用・管理の手間を大幅に削減することが可能です。これまでも同様な機能を持つプラグインがありましたが、「Movable Type 4.1」では、システムの基本機能として統合することで、操作性やカスタマイズ性がさらに向上し、CMSとして様々な種類のウェブサイトの制作に対応することが可能になります。
さらに、デザインのカスタマイズ性も向上しています。「Movable Type 4.1」では、ウェブサイトを作成するテンプレートをまとめてテンプレートセットとして管理・設定する機能を新たに提供するほか、ブログ記事を編集するエディタ機能を任意の外部ソフトウェアに変更する機能も追加し、多様なニーズにあわせた柔軟なサイト管理を実現します。
ということで、個人的に 4.1 の注目機能は、「カスタムフィールド機能」と「テンプレートセット」でしょうか。
「テンプレートセット」とは、4.0まではテンプレートを1つずつ編集する必要がありましたが、「Movable Type 4.1」ではウェブサイトを作成するテンプレートをまとめて管理・設定する機能らしいです。
Movable Type 4.1 ベータ版のサイトは下記です。
Movable Type 4.1 では、多くのバグフィクス、パフォーマンスの改善、セキュリティ強化に加え、以下のような機能を提供します。
- ブログ記事などの入力フィールドを拡張する、カスタムフィールド機能
- プラガブルになったテキストエディタで、標準の WYSIWYG エディタ以外のエディタの導入も簡単に
- テンプレートセット登録・設定機能で、ウェブサイトで利用するテンプレートの導入が簡単に
- 管理している全てのブログで共通利用できるグローバルテンプレート機能
- 登録ユーザーのプローフィール画像登録・表示機能
- アップロードしたアイテムの情報変更機能
- テンプレートで使用している MT タグの、リファレンスリンク付きリスト表示機能
- ブログ記事・ウェブページ作成ページのリニューアル
- テンプレートタグの追加と拡張
なお、カスタムフィールド機能は、MTOS(オープンソース・ライセンス版)には含まれません。
