Movable Typeの記述の迷いどころ・・・

らら
らら

はじめに

よく、変数・連想配列のコピーでsetvar かvalueかで・・・

その他メモも含めてまとめておくことに。。

記述方法の違い

大文字小文字はMovable Type 3.x まではありMovable Type 4以降は区別なし

mt:Varとmt:varは同じ、どちらの記述もOK

MT と mt:のちがいもない。

MTVarとmt:varは同じ、どちらの記述もOK

前後の$は省略可能・・

ただし、mtの変数の$は必要です。前だけあって、後ろなしとかはエラー


<$mt:Var name=""$>

XHTMLのなごり・・XHTMLでなければ/なし


<mt:Var name="" />

MTの変数名では-ハイフンは使えません。_アンダーバーとかで対応しましょう。 

MTGetVarは非推奨になったのでMTVarで統一したほうがよいでしょう。

現在のMTVarはMTSetVarとしても使えます。ただし、opオプションの場合はMTSetVarを使う必要があります。面倒。。

JavascriptとMTタグ

変数の代入

Javascript


	var str_a;
	var str_b;
	str_a = "12345678901234567890";
	str_b = str_a;
	console.log(str_a);
	console.log(str_b);

MTタグ


	<mt:Var name="str_a" value="12345678901234567890">
	<mt:Var name="str_a" setvar="str_b">
	<mt:Var name="str_a">
	<mt:Var name="str_b">

条件分岐

Javascript


	var str_a;
	str_a = "company";
	if(str_a == "company") {
	} else if(str_a == "recruit") {
	} else {
	}

MTタグ


	<mt:Var name="str_a" value="company">
	<mt:If name="str_a" eq="company">
	<mt:ElseIf name="str_a" eq="recruit">
	<mt:else>
	</mt:if>

条件分岐(変数同士比較)

Javascript


	var str_a;
	var str_cmp1;
	var str_cmp2;
	str_a = "company";
	str_cmp1 = "company";
	str_cmp2 = "recruit";
	if(str_a == str_cmp1) {
	} else if(str_a == str_cmp2) {
	} else {
	}

MTタグ


<mt:Var name="str_a" value="company">
<mt:Var name="str_cmp1" value="company">
<mt:Var name="str_cmp2" value="recruit">
<mt:If name="str_a" eq="$str_cmp1">
<mt:ElseIf name="str_a" eq="$str_cmp2">
<mt:else>
</mt:if>

比較演算子

MTの比較用 その他の言語 意味
eq= == 左項の値が右項の値に等しいとき真になる
gt= 左項の値が右項の値より大きいときに真になる
ge= >= 左項の値が右項の値以上のときに真になる
lt= 左項の値が右項の値より小さいときに真になる
le= <= 左項の値が右項の値以下のとき真になる
ne= != 左項の値が右項の値と異なるときに真になる

メモ

mt:EntryTitleタグを直接ifする場合はtag="MTタグ名"で比較できます。


	<mt:If tag="EntryTitle" eq="ブログについて">
	</mt:If>

MTタグを他の変数へコピーする場合も、MTタグに直接 setvarすればコピーできます。


<mt:EntryTitle setvar="title">
<mt:Var name="title">

↑と同じ


<mt:SetVarBlock name="title"><mt:EntryTitle></mt:SetVarBlock>

ループ

Javascript


	for(var i =i;i <= 12;i++){
		console.log(i);
	}

MTタグ


	<mt:For var="i" from="1" to="12" increment="1">
		<mt:Var name="i">
	</mt:For>
	<mt:Var name="i">のかわりに<mt:Var name="__index__">でもOK

メモ

MTFor,MTLoop,MTEntries,MTPages,MTContentsなど、ループ処理で使える共通変数

__first__ループ出力の最初である場合 true (1) となります。<mt:If name="__first__">true</mt:if>
__last__ループ出力の最後である場合 ture (1) となります。<mt:If name="__last__">true</mt:if>
__odd__ループ出力の奇数回目の場合 ture (1) となります。<mt:If name="__odd__">true</mt:if>
__even__ループ出力の偶数回目の場合 ture (1) となります。<mt:If name="__even__">true</mt:if>
__index__ループのインデックスを格納します。<mt:Var name="__index__">
__counter__ループした回数を格納します。<mt:Var name="__counter__">

配列

Javascript


	var str_a = [];
	str_a[0] = "1番目";
	str_a[1] = "2番目";
	str_a[2] = "3番目";
	for (var i = 0; i < str_a.length; i++) {
		console.log(str_a[i]);
	}
	str_b = str_a;
	str_b.forEach((value, index, array) => {
		console.log(value);
	});

MTタグ

配列の移送は、setvarでなく、valueなので注意・・いつもはまります。。


	<mt:Var name="str_a">
	<mt:Var name="str_a" function="push" value="1番目">
	<mt:Var name="str_a" function="push" value="2番目">
	<mt:Var name="str_a" function="push" value="3番目">
	<mt:Var name="str_a" function="count" setVar="len_cnt">
	<mt:For var="i" from="0" to="$len_cnt" increment="1">
		<mt:Var name="str_a" index="$i">
	</mt:For>
	<mt:Var name="str_b" value="$str_a">
	<mt:Loop name="str_b">
		<mt:Var name="__value__">
	</mt:Loop>

メモ

配列セットは下記でも動く・・


	<mt:Var name="str_a[0]"  value="1番目">
	<mt:Var name="str_a[1]"  value="2番目">
	<mt:Var name="str_a[2]"  value="3番目">

個別で参照


	<mt:Var name="str_a[1]">

連想配列 ハッシュ

Javascript


	var str_a = {};
	str_a["日本語1"] = "データ1";
	str_a["日本語2"] = "データ2";
	str_a["日本語3"] = "データ3";
	for (var key in str_a) {
		console.log("key:" + key);
		console.log("data:" + str_a[key]);
	}

MTタグ


	<mt:Var name="str_a" key="日本語1" value="データ1">
	<mt:Var name="str_a" key="日本語2" value="データ2">
	<mt:Var name="str_a" key="日本語3" value="データ3">
	<mt:loop name="str_a">
		<mt:Var name="__key__">
		<mt:Var name="__value__">
	</mt:loop>

メモ

連想配列も同じ


	<mt:Var name="str_a{日本語1}" value="データ1">
	<mt:Var name="str_a{日本語2}" value="データ2">
	<mt:Var name="str_a{日本語3}" value="データ3">

個別で参照


	<mt:Var name="str_a{日本語1}">

上記のように配列・連想配列にして下記のように/で区切りたい場合

データ2/データ3/データ1

下記でOKです。


	<mt:loop name="str_a" glue="/"><mt:GetVar name="__value__" /></mt:loop>

MTSetHashVarを使った場合


	<mt:SetHashVar name="str_a">
	<mt:Var name="日本語1" value="データ1">
	<mt:Var name="日本語2" value="データ2">
	<mt:Var name="日本語3" value="データ3">
	</mt:SetHashVar>

MTSetVarが必要な例


	<mt:Var name="line_cnt" value="1">
	<mt:Contents content_type="コンテンツタイプ名">
		<mt:SetVar name="line_cnt" op="+" value="1">
	</mt:Contents>
	<mt:Var name="line_cnt">

この場合は


	<mt:Contents content_type="コンテンツタイプ名">
		<mt:Var name="__counter__">
	</mt:Contents>

MTVarとMTSetVarのopの違い

Javascript


	var line_cnt;
	line_cnt = line_cnt + 1;

MTタグ


	<mt:SetVar name="line_cnt" op="+" value="1">

MTVarはline_cntに結果を入れません。

Javascript


	var line_cnt;
	line_cnt + 1;

MTタグ


	<mt:Var name="line_cnt" op="+" value="1">

MTVarはMTタグ、HTMLタグが入れられない・・

その場合は、mt:SetVarBlockを使う


<mt:SetVarBlock name="bl_str"><mtタグ></mt:SetVarBlock>
<mt:SetVarBlock name="bl_str"><div><mtタグ></div></mt:SetVarBlock>

値を取得するにはMTVarでOKです。

グローバル・モディファイアリファレンス

本家から抜粋です。正式は本家を参照してください。

https://www.movabletype.jp/documentation/appendices/modifiers/

capitalize 1 を指定すると、モディファイアを付与したファンクションタグの値に含まれる単語の最初の文字を大文字に変更し、残りの文字を小文字に変換します。
cat モディファイアを付与したファンクションタグの値の最後に、指定された値を追加します。
count_characters 1 を指定すると、モディファイアを付与したファンクションタグの値に含まれる文字数 (空白を含む) をファンクションタグの値の代わりに出力します。
count_paragraphs 1 を指定すると、モディファイアを付与したファンクションタグの値に含まれる行数 (空白行を含まない) をファンクションタグの値の代わりに出力します。
count_words 1 を指定すると、モディファイアを付与したファンクションタグの値に含まれる単語の数をファンクションタグの値の代わりに出力します。
decode_html 1 を指定すると、モディファイアを付与したファンクションタグの値に含まれるすべての HTML エンティティをデコードします。
decode_xml 1 を指定すると、モディファイアを付与したファンクションタグの値に含まれるすべての XML エンティティをデコードします。
dirify 1 を指定すると、モディファイアを付与したファンクションタグの値をファイル名や検索用に適したものに変換します。
encode_html 1 を指定すると、モディファイアを付与したファンクションタグの値に含まれる HTML をエスケープします。
encode_js 1 を指定すると、モディファイアを付与したファンクションタグの値を JavaScript の文字列として利用できるように適切にエスケープ処理をおこないます。
encode_json MT6.2 1 を指定すると、モディファイアを付与したファンクションタグの値を JSON として扱えるようにエスケープします。
encode_sha1 1 を指定すると、モディファイアを付与したファンクションタグの値を sha1 16進数に変換して出力します。
encode_url 1 を指定すると、モディファイアを付与したファンクションタグの値を URL での利用に合わせたフォーマットにエンコードします。
encode_xml 1 を指定すると、モディファイアを付与したファンクションタグの値を XML フォーマットに適した形式にエンコードします。
escape モディファイアを付与したファンクションタグの値を、指定した値に応じて、エンコードします。
filters モディファイアを付与したファンクションタグの値に対して、テキストフォーマットを適用します。
indent モディファイアを付与したファンクションタグの値の行頭に、モディファイアで指定した数の半角スペースを挿入します。
lower_case 1 を指定すると、モディファイアを付与したファンクションタグの値を小文字 (abc...) に変換します。
ltrim 1 を指定すると、モディファイアを付与したファンクションタグの値の先頭に含まれる空白文字を削除します。
mteval MT4.2 1 を指定すると、モディファイアを付与したファンクションタグの値に含まれるテンプレートタグを実行します。
nl2br モディファイアを付与したファンクションタグの値に含まれる改行を br 要素に置き換えます。
nofollowfy 1 を指定すると、モディファイアを付与したファンクションタグの値に含まれる anchor 要素に値が nofollow の rel 属性を挿入します。
numify MT4.2 1 を指定すると、モディファイアを付与したファンクションタグの値に含まれる数字を3桁ごとにカンマで区切ります
regex_replace モディファイアを付与したファンクションタグの値に対して、正規表現を利用して検索文字列を置換文字列で置き換えます。
remove_html 1 を指定すると、モディファイアを付与したファンクションタグの値に含まれるすべての HTML タグを除去します。
replace モディファイアを付与したファンクションタグの値に対して、検索文字列を置換文字列で置き換えます。
rtrim 1 を指定すると、モディファイアを付与したファンクションタグの値の最後に含まれる空白文字を削除します。
sanitize モディファイアを付与したファンクションタグの値に対して、HTML の除去フィルターを適用します。
setvar MT4.1 このモディファイアを設定したブロックタグまたはファンクションタグは結果が出力されず、setvar で指定された名前の変数にその結果が保存されます。
space_pad モディファイアを付与したファンクションタグの値の文字数が space_pad で指定された値を下回る場合、先頭から余白を空白文字で埋めます。
spacify モディファイアを付与したファンクションタグの値について、一文字ずつの間にモディファイアで指定した文字を挿入します。
spam_protect 1 を指定すると、モディファイアを付与したファンクションタグの値に含まれる一部の記号を数値文字参照に変換します。
sprintf モディファイアを付与したファンクションタグの値を printf 記法のフォーマットで整形します。
string_format モディファイアを付与したファンクションタグの値を printf 記法のフォーマットで整形します。
strip モディファイアを付与したファンクションタグの値に含まれる、1つ以上の連続する半角空白文字をモディファイアで指定した内容に置き換えます。
strip_linefeeds 1 を指定すると、モディファイアを付与したファンクションタグの値から改行コードを除きます。
strip_tags 1 を指定すると、モディファイアを付与したファンクションタグの値から、HTML タグを取り除きます。
trim 1 を指定すると、モディファイアを付与したファンクションタグの値の先頭と最後に含まれる空白文字を削除します。
trim_to モディファイアを付与したファンクションタグの値の先頭から trim_to で指定した文字数の文字を取り出します。
upper_case 1 を指定すると、モディファイアを付与したファンクションタグの値を大文字 (ABC...) に変換します。
wrap_text MT4.1 モディファイアを付与したファンクションタグの値を、wrap_text で指定したバイト数で改行して出力します。
zero_pad モディファイアを付与したファンクションタグの値の文字数が zero_pad で指定された値を下回る場合、先頭から余白を 0 で埋めます。

グローバル・モディファイア例

zero_pad

コード


	<mt:Contents content_type="コンテンツタイプ名">
		<div id="data_<mt:Var name="__counter__" zero_pad="6">">
		</div>
	</mt:Contents>

結果


	<div id="data_000001">
	</div>
	<div id="data_000002">
	</div>

encode_html

コード


<mt:SetVarBlock name="testhtml">
	<div>12345678</div>
	<div>12345678</div>
	<div>12345678</div>
</mt:SetVarBlock>
<mt:Var name="testhtml" encode_html="1">

結果

&の後の空白は都合上いれています。実際は空白はありません。


	& lt;div& gt;12345678& lt;/div& gt;
	& lt;div& gt;12345678& lt;/div& gt;
	& lt;div& gt;12345678& lt;/div& gt;

strip_linefeeds

コード


<mt:SetVarBlock name="testhtml">
	<div>12345678</div>
	<div>12345678</div>
	<div>12345678</div>
</mt:SetVarBlock>
<mt:Var name="testhtml" strip_linefeeds="1">

結果


	<div>12345678</div>	<div>12345678</div>	<div>12345678</div>

remove_html

コード


<mt:SetVarBlock name="testhtml">
	<div>12345678</div>
	<div>12345678</div>
	<div>12345678</div>
</mt:SetVarBlock>
<mt:Var name="testhtml" remove_html="1">

結果


	12345678
	12345678
	12345678

regex_replace

コード


<mt:SetVarBlock name="testhtml">
	<div>12345678</div>
	<div>12345678</div>
	<div>12345678</div>
</mt:SetVarBlock>
<mt:Var name="testhtml" regex_replace="/^[\ \t\r\n]+/mg","">

結果


<div>12345678</div>
<div>12345678</div>
<div>12345678</div>

複数組み合わせ

コード


<mt:SetVarBlock name="testhtml">
	<div>12345678</div>
	<div>12345678</div>
	<div>12345678</div>
</mt:SetVarBlock>
<mt:Var name="testhtml" remove_html="1" regex_replace="/^[\ \t\r\n]+/mg","" strip_linefeeds="1">

結果


123456781234567812345678

使用例


<mt:pagebody remove_html="1" regex_replace="/^[\ \t\r\n]+/mg","" strip_linefeeds="1" trim_to="120+...">

capitalize

コード


<mt:Var name="str_a" value="company">
<mt:Var name="str_a" capitalize="1">

結果


Company

trim_toのバージョン違い

Movable Type 5.1 以降では、trim_to に "N+文字列" (N は文字数) と指定すると、取り出した文字に加えて +以降に指定された文字列を連結して出力します。例えば、trim_to="5+..." と指定すると、"サンプルの文章です" という文章は "サンプルの..." となります。

Movable Type 6.0.4 以降では、負の値を指定した場合は、文字列の末尾から N 文字 (N は文字数) を取り除き、残った部分を取り出します。例えば、trim_to="-5" と指定すると、"サンプルの文章です" という文章は、"サンプル" となります。

Movable Type 5.1以前


<mt:Var name="str_a" value="12345678901234567890">
<mt:Var name="str_a" count_characters="1" setvar="len_cnt">
<mt:Var name="str_a" trim_to="10"><mt:If name="len_cnt" gt="10">...</mt:If>

Movable Type 5.1以降


<mt:Var name="str_a" value="12345678901234567890">
<mt:Var name="str_a" trim_to="10+...">

5.1以前の書き方だと。こんな表記も・・


<mt:Var name="str_a" value="12345678901234567890">
<mt:Var name="str_a" count_characters="1" setvar="len_cnt">
<mt:Var name="str_a" trim_to="10"><mt:If name="len_cnt" gt="10"><a href="url">続きを見る</a></mt:If>

その他

MTの記事のエクスポート時は、カスタムフィールドの値を取得できない。

MTは、ウェブページのみのインポート・エクスポートはない。

同様にコンテンツタイプ・コンテンツデータのインポート・エクスポートはない。

この辺り、プラグインではなく、標準機能にしてほしい。また、外部プラグインもいくつか存在するが、同一プラグインでないとバックアップデータはそのまま

使用できないので注意

あと、記事・ウェブページ・コンテンツデータの複製も標準にしてほしい・・・記事・コンテンツデータはオフィシャルのプラグインがありますが

ここにインストールする必要があります。バージョンアップの管理も手動です。

さいごに

いろんな言語やっているとわかりませーん。Cライクな言語なら・・まだ・・・

おいすおいすぅ

関連記事