MT4.15ベータ2/MTOS 4.15 ベータ5Bリリースとカスタムフィールドによるブログ記事の並べ替え
MTOS 4.15 ベータ5がリリースされました。
カスタムフィールド関係で機能追加が行われ、カスタムフィールドの値を利用して記事の並べ替えやフィルタリングができるようになっています。
並べ替えは、MTForタグを使えば同じ動作を実現できますが、より簡単にできるようになりました。
1.項目の並べ替え
カスタムフィールドで、ブログ記事に対し、次のような「おすすめ度」というラジオボタンのフィールドを作成します。

各ブログ記事に「おすすめ度」を設定します。

カスタムフィールドを設定ブログ記事を作ります。デフォルトテンプレートでは次のように時系列順で並んでいます。

ブログ記事をおすすめ度順に並べ替えるには、MTEntriesタグに次のsort_byモディファイアを追加します。
<MTEntries sort_by="field:recommend">
:
</MTEntries>
recommendは、カスタムフィールドのベースネームです(テンプレートタグ名ではありません)。
これで降順に表示されるようになりました。

昇順に並べ替えるには、さらにsort_orderモディファイアを追加して次のようにします。
<MTEntries sort_by="field:recommend" sort_order="ascend">
:
</MTEntries>
これで昇順に表示されます。

2.項目のフィルタリング
1項で作成したブログ記事から「おすすめ度2」の記事だけをフィルタリングするには、次のように「field:ベースネーム」モディファイアを設定します。
<MTEntries field:recommend="2">
:
</MTEntries>
これで、「おすすめ度2」の記事だけをフィルタリングして表示します。

mt-csv2customfields v0.02
CSV形式のデータを Movable Type のカスタムフィールドに一括読み込みさせるスクリプト mt-csv2customfields.cgi をバージョンアップしました。
追加機能は次の通りです。
- CSVデータにカテゴリー名(またはサブカテゴリー名)が設定可能
- カテゴリー名が存在しない場合、トップカテゴリーとして新規作成
- CSVデータにタグが設定可能
- タグの複数指定が可能
- 既存のブログ記事タイトルを指定した場合、カスタムフィールドの内容を上書き
最新版のダウンロードと使用方法は以下の記事を参照願います。
カテゴリーリストにカスタムフィールドの画像を表示する
Movable Type のカテゴリーリストに、カスタムフィールドの画像を表示するカスタマイズです。
次のように、カテゴリー別の画像を簡単に与えることができます。

1.カスタムフィールドの作成
カテゴリーにカスタムフィールドを作成します。ここでは CategoryImage という名前のテンプレートタグにします。

2.カテゴリーに画像の追加
各カテゴリーに表示されている「Imageを選択」をクリックして、画像を追加します。

画像を選択した後、必ず保存をクリックしてください。何回か試して正常に表示されないことがあったのですが、どうも保存をクリックするのを忘れていたようです。

3.サブテンプレートの追加
冒頭のサンプルは、デフォルトテンプレートのサイドバーに下記のサブテンプレートを追加しました。階層表示でない、MTCategories タグを久しぶりに使ってみました。
青色部分がカスタムフィールド用タグです。
<mt:IfArchiveTypeEnabled archive_type="Category">
<div class="widget-archive widget-archive-category widget">
<h3 class="widget-header">カテゴリ</h3>
<div class="widget-content">
<ul class="widget-list">
<mt:Categories>
<mt:ifNonZero tag="mt:CategoryCount">
<li class="widget-list-item"><MTCategoryImageAsset><img src="<$MTAssetURL$>" style="vertical-align:middle" /> </MTCategoryImageAsset><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"><MTCategoryImageAsset><img src="<$MTAssetURL$>" style="vertical-align:middle" /> </MTCategoryImageAsset><$mt:CategoryLabel$>
</mt:ifNonZero>
</li>
</mt:Categories>
</ul>
</div>
</div>
</mt:IfArchiveTypeEnabled>
赤色部分は、画像の垂直方向の位置揃えのための style 属性です。サンプルでは img 要素に直接与えてしまっているので、適宜スタイルシートで設定するようにしてください。
mt-csv2customfields
「CSV形式のデータを Movable Type のカスタムフィールドに一括読み込みさせたい」という要望がかなり多いようなので、スクリプト mt-csv2customfields.cgi を作成しました。
CSVファイルを読み込み、新規ブログ記事のカスタムフィールドに登録します。
1.機能
今のところできるのは次の通りです。
- 新規ブログ記事のみ対応
- タイトルの書き込み
- 本文の書き込み
- カテゴリーまたはサブカテゴリーの書き込み。カテゴリーが存在しない場合は新規作成(トップレベルのみ)
- タグの書き込み(複数設定可能)
- カスタムフィールド(テキスト形式)の書き込み
- 複数のカスタムフィールドに対応
- 既存のブログ記事タイトルを指定した場合、カスタムフィールドのみ上書き(他のフィールドの内容は無視)
CSVのフォーマット
CSVデータは次のフォーマットにしてください。
1行目:
タイトル:'title'を設定
本文:'text'を設定
カテゴリー:'category'を設定
タグ:'tags'を設定
カスタムフィールド:カスタムフィールドのベースネームを設定
2行目以降:フィールドに対応したデータ。
カテゴリーは新規のトップカテゴリー(他と重複しない名称)または既存のカテゴリー名(サブカテゴリーであればサブカテゴリー名のみ設定)。
タグは新規のタグも大丈夫で、":"で区切れば複数設定できます。
なお、CSVデータはUTF-8のものしか確認ができておりません。
3.CSVデータのサンプル
title,text,category,tags,test1,test2,test3
たいとる1,てきすとの内容1,カテゴリー1,タグ1:タグ2,カスタムフィールド1の内容1,カスタムフィールド2の内容1,カスタムフィールド3の内容1
たいとる2,てきすとの内容2,カテゴリー2,タグ3:タグ4,カスタムフィールド1の内容2,カスタムフィールド2の内容2,カスタムフィールド3の内容2
たいとる3,てきすとの内容3,カテゴリー3,タグ5:タグ6,カスタムフィールド1の内容3,カスタムフィールド2の内容3,カスタムフィールド3の内容3
4.ライセンス
4.1 商用ライセンスの Movable Type で利用する場合
商用ライセンスの Movable Type で利用する場合は、有償(1000円/1サーバ)とさせて頂きます。お振込み方法につきましては、お問い合わせよりメールにてご連絡ください。
4.2 個人ライセンス(無償)と組み合わせる場合
個人ライセンス(無償)と組み合わせる場合は、無償でご利用ください。
5.インストール
下記のファイルをダウンロードして、展開した中にあるmt-csv2customfields.cgi をアプリケーションディレクトリにアップロードし、CGIが実行可能なパーミッションを変更してください。
たいしたスクリプトではありません。α版ということでお試しください。
- 修正履歴
- v0.01 2008.03.24 初版
- v0.02 2008.04.21 カテゴリーとタグに対応。head / body 要素の重複削除
6.利用方法
ブラウザから mt-csv2customfields.cgi にアクセスすると、次のような画面が表示されるので、ブログのID、ユーザーIDを数字で設定し、CSVファイルを選択して送信をクリックしてください。

正常に実行できれば次のような画面が表示されます。

登録後のブログ記事編集画面です。

カスタムフィールドのテキストエリアに入力した改行をページに反映させる
Movable Type のカスタムフィールドで「テキスト(複数行)」という種類のフィールドを利用する際、テキストエリアへの入力内容に改行や空行を含めても、出力される文字列の改行や空行はすべて除去された状態で出力されてしまいます。
本エントリーでは、この事象を解消する方法を紹介します。
1.問題点
例えば、次のようなカスタムフィールドを作成します。テンプレートタグはとりあえず「EntryData」としておきます。

作成したフィールドで、次のようなテキストを入力します。

このカスタムフィールドを出力する「ブログ記事の概要」のサブテンプレートは次のようにします。
:
<div class="asset-body">
<$MTEntryBody$>
<MTIfNonEmpty tag="EntryData">
<$MTEntryData$>
</MTIfNonEmpty>
</div>
:
このテンプレートで出力されるカスタムフィールドの内容には、ご覧の通り、改行が含まれません。

2.対処方法
改行を含めるには、グローバルモディファイアである、filter モディファイアをカスタムフィールドに適用します。
:
<div class="asset-body">
<$MTEntryBody$>
<MTIfNonEmpty tag="EntryData">
<$MTEntryData filters="__default__"$>
</MTIfNonEmpty>
</div>
:
値に設定されている __default__ は、テキストフィルタとして定義されている予約変数(厳密にはMT::Util::html_text_transformをハンドリングするためのキー名)です。
このように設定することで、カスタムフォールドの出力結果に改行(br 要素や p 要素)が反映されます。

もう少し厳密に言えば、ブログ記事やウェブページの本文・追記のフォーマットで「改行を変換」を選択したものと同じ結果で出力されます。
3.参考記事
カスタムフィールドの入力文字数の制限を変更する
カスタムフィールドの入力文字数の制限を変更する方法を紹介します。
作成したカスタムフィールドに大量の文字を入力した場合、文字数の制限にひっかかる場合があります。文字数の制限を変更すれば作成したカスタムフィールドに希望するだけの文字を入力できるようになります。
これは下記のトラックバックに触発されて書いたものです。ありがとうございました。
ということで、本エントリーにて紹介させて致します。
1.問題点
サンプルとして、トラックバック元記事と同じ、都道府県を選択するラジオボタンをブログ記事に設置したケースで話を進めます。
次のように、新しく作成したカスタムフィールドに、47都道府県をラジオボタンの選択項目として入力します。
が、ブログ記事投稿画面を表示させると、追加した都道府県がすべて表示されません。
これはオプションフィールド用のテーブルの型が varchar(255) となっており、255文字以上の入力が切り捨てられるためです。
2.対処方法
phpMyAdmin を使って、オプションフィールド用のテーブルの型を変更します。
該当のデータベースを表示します。
mt_field の「構造」のアイコンをクリックします。
field_options の「変更」のアイコンをクリックします。
テーブルの変更画面が表示されます。
「種別」を VARCHAR から TEXT に変更し、「長さ/値」を空にします。変更後、右側にある「保存する」をクリックします。
カスタムフィールドのオプション欄を入力し直して(表示されていない部分は保存されていないので)、「保存」をクリックします。
再度、ブログ記事投稿画面を表示します。カスタムフィールドのオプションがすべて表示されるようになりました。
ちなみに、MySQL の文字データには次のようなものがあります。
- varchar型:最大255文字
- text型:最大65535文字
- mediumtext型:最大16777215文字
- longtext型:最大4294967295文字
3.おまけ
都道府県一覧です。カスタムフィールドの入力にお使いください(間違ってたらすいません)。
北海道,青森県,岩手県,宮城県,秋田県,山形県,福島県,東京都,神奈川県,埼玉県,千葉県,茨城県,栃木県,群馬県,山梨県,新潟県,長野県,富山県,石川県,福井県,愛知県,岐阜県,静岡県,三重県,大阪府,兵庫県,京都府,滋賀県,奈良県,和歌山県,鳥取県,島根県,岡山県,広島県,山口県,徳島県,香川県,愛媛県,高知県,福岡県,佐賀県,長崎県,熊本県,大分県,宮崎県,鹿児島県,沖縄県
カスタムフィールドでアップロードした画像をテンプレートタグで表示する
Movable Type 4.1 で追加されたカスタムフィールド機能で、画像(アイテム)をアップロードすると、記事中にはテキストリンクしか表示されないため「なんとかならないでしょうか?」というコメントを多く頂いてます。
その関係で、先日「カスタムフィールドによるアップロード画像をサムネイルで表示するプラグイン VisibleCustomFieldImage」を公開しましたが、Movable Type の公式サイトにテキストリンクではなく、画像を表示する方法が掲載されています。
この方法を使えば、より簡単に画像を表示することができます。
ということで、本エントリーにて具体的な設定方法を情報展開しておきます。
サンプルとして、次のようなカスタムフィールドを作成します。

ブログ記事に表示されたカスタムフィールドを使って、次の画像をアップロードします。

テンプレートモジュール「ブログ記事の概要」に、次のタグを設定します。
<MTIfNonEmpty tag="photo">
<MTphotoAsset><img src="<$MTAssetURL$>" /></MTphotoAsset>
</MTIfNonEmpty>
カスタムフィールドの作成時に指定したテンプレートタグの末尾に「Asset」を追加したテンプレートタグ名がブロックタグとして使えます。サンプルでは、「MTphoto」というタグを作ったので「MTphotoAsset」となります。
そして、このブロックタグの中では、Movable Type 標準のアイテム関連タグが利用できます。
上のタグをテンプレートモジュールの次の位置に設定します。

「てすと」というタイトルで投稿すると、次のように表示されました。
次に、MTAssetThumbnailLink タグでサムネイル指定をしてみます。
<MTIfNonEmpty tag="photo">
<MTphotoAsset><$MTAssetThumbnailLink width="150"$></MTphotoAsset>
</MTIfNonEmpty>
上のタグをテンプレートモジュール次の位置に設定します。

「てすと」というタイトルで投稿すると、次のようにサムネイルが表示されました。
Movable Type 4.1 カスタムフィールドのデータの実体
先日、「Movable Type カスタムフィールドの DB スキーマ」というエントリーを投稿しましたが、「実体がどこにあるか分かりません」という質問を頂きましたので、本エントリーにて紹介致します。
ブログ記事/ウェブページの場合
テーブル名:mt_entry
| フィールド | フィールドの意味 | 値 | 値の意味 |
|---|---|---|---|
| entry_class | クラス | ブログ記事:entry ウェブページ:page | |
| entry_meta | カスタムフィールドデータ | BLOB型(バイナリ) |
カテゴリー/フォルダの場合
テーブル名:mt_plugindata
| フィールド | フィールドの意味 | 値 | 値の意味 |
|---|---|---|---|
| plugindata_id | プラグインデータID | 1,2… | 自動付与 |
| plugindata_data | カスタムフィールドデータ | BLOB型(バイナリ) | |
| plugindata_key | システムオブジェクトのキー情報 | ”category_1" "folder_3"等 | システムオブジェクト+ID |
| plugindata_plugin | プラグイン名 | "CustomFields"固定 |
ということで、カスタムフィールドに設定されたデータは BLOB 型で保存されるので、phpMyAdmin ではそのまま参照することはできません。
カテゴリー/フォルダの場合は次のような感じです。

参考までに、phpMyAdmin での2つのテーブル構造のスクリーンショットも載せておきます。
mt_entry
mt_plugindata
カスタムフィールドによるアップロード画像をサムネイルで表示するプラグイン 0.02
先日公開した「カスタムフィールドによるアップロード画像をサムネイルで表示するプラグイン」をパワーアップして、アップロード時にアイテムのオプション画面をハンドリングするようにしてみました。
これで、カスタムフィールド用のテンプレートタグを使った画像表示でも、サムネイル画像を自動的に生成してブログ記事に表示することができます。
1.プラグインのダウンロード
下記のリンクをクリックしてプラグインをダウンロードします。
- 2008.02.17 v0.03:script error になるバグを改修しました。
プラグイン開発やサポート等にご支援・ご賛同くださる方からの寄付をお待ち申し上げます。
上記の「Make a Donation」のリンクをクリックすると Paypal によるお支払いページにジャンプします。
2.プラグインのアップロード
ダウンロードした VisibleCustomFieldImage.zip を解凍して、中にある VisibleCustomFieldImage.pl を plugins ディレクトリにアップロードします。「VisibleCustomFieldImage.pl」が表示されればOKです。

3.使い方
予め作成している、画像用カスタムフィールドの「imageを選択」をクリック。

「新しい画像をアップロード」をクリック(またはアップロード済の画像を選択して「次へ」をクリック)。

新しい画像をアップロードする場合は「参照」をクリック。

アップロードしたい画像選択後、「アップロード」をクリック。

オプション画面が表示されます(これが今回の追加部分)。
機能はファイルアップロードのオプション画面と同じですが一応掲載しておきます。
- ブログ記事に画像を表示:チェックすればカスタムフィールドに画像を表示します。
- サムネイルを利用:サムネイルを自動生成します(Image::magickがインストールされていないと表示されません)
- ポップアップウィンドウで元の大きさの画像にリンクします。:カスタムフィールドで表示したテキストリンクまたは画像リンクをクリックすると、ポップアップウィンドウで元画像を表示します。
- 位置: カスタムフィールドで表示した画像の位置を指定します。
「完了」をクリックすると、サムネイル画像が管理画面に表示されます。なお、オプションの組み合わせによっては画像の代わりに「表示」というテキストリンクになる場合もあります。

ブログ記事を投稿すると、予めテンプレートに設定していたカスタムフィールドのテンプレートタグ部分にサムネイル画像が表示されます。

アイテムの一覧を表示すると、サムネイル画像やポップアップがすべて管理対象になっています。

5.ライセンス
MTOSにはカスタムフィールドはありませんが、先のことを考えてデュアルライセンスにしておきます。
5.1 MT4.1個人ライセンス/MT4.1商用ライセンスと組み合わせる場合
- 無料で利用できます。
- 改変・再配布は自由ですが、改変して再配布する場合、原作者のクレジットを必ず残してください。
5.2 MTOSと組み合わせる場合
- 無料で利用できます。
- GPLv2に従います。
2008.02.17
0.03 にバージョンアップしました。
Movable Type カスタムフィールドの DB スキーマ
Movable Type 4.1 のカスタムフィールドの DB スキーマについてご質問を頂きましたので、本エントリーにて示します。
テーブル名:mt_field
| フィールド | フィールドの意味 (対応する項目) | 値 | 値の意味 (対応する項目) |
|---|---|---|---|
| field_id | mt_field内でユニークなID | 1,2… | 自動付与 |
| field_basename | ベースネーム | 名前が英数字であればそのまま利用、全角の場合は_1,_2… | |
| field_blog_id | カスタムフィールドを利用するブログID | ||
| field_default | 既定値 | ||
| field_description | 説明 | ||
| field_name | 名前 | ||
| field_obj_type | システムオブジェクト | entry | ブログ記事 |
| page | ウェブページ | ||
| category | カテゴリ | ||
| folder | フォルダ | ||
| field_options | オプション([種類]に依存) | ||
| field_required | 必須 | 0 | 必須でない |
| 1 | 必須 | ||
| field_tag | テンプレートタグ | ||
| field_type | 種類 | text | テキスト |
| textarea | テキスト(複数行) | ||
| checkbox | チェックボックス | ||
| url | URL | ||
| datetime | 日付と時刻 | ||
| select | ドロップダウン | ||
| radio | ラジオボタン | ||
| asset | アイテム | ||
| asset.audio | オーディオ | ||
| asset.video | ビデオ | ||
| asset.image | 画像 | ||
phpMyAdmin のスクリーンショットも掲載しておきます。

