2014年12月26日
MT Studio が提供するテンプレート・タグについて
昨日公開したMT Studio 及び StudioPlayerで利用可能なテンプレート・タグをご紹介します。コマンド・タグと呼ばれるサーバーでの処理を行うタグの他、PowerCMSに含まれているタグのうち、開発に有用なデバッグ用のテンプレートタグなども含まれています。
ブロックタグ
Perlでのみ有効なタグ
MTCMSContext
ブログ記事 / ウェブページ / カテゴリの編集画面で管理画面のテンプレートの中で利用します。各テンプレート内で、MTEntry / MTPage / MTCategory 関連のタグが利用できるようになります(管理画面専用)。
MTIfComponent
plugin または component モディファイアで指定したプラグインがインストールされている場合内容を出力します。
<MTIfComponent component="DynamicMTML">
<!-- do something -->
</MTIfComponent>
MTIfModule
module モディファイアで指定したPerlモジュールが利用可能な場合内容を出力します。
<MTIfModule module="XML::Parser">
XML::Parser がインストールされています。
</MTIfModule>
MTPerlScript
ブロック内に記述されたPerlコードを実行します。MTタグが含まれている場合実行の前にビルドされます。
<MTPerlScript print="1" foo="bar">
sub {
my ( $ctx, $args, $cond ) = @_;
return $args->{ foo } . ':blog:<MTBlogId>';
}
</MTPerlScript>
=>bar:blog:1
PHPでのみ有効なタグ
MTPHPScript
ブロック内に記述されたPHPコードを実行します。MTタグが含まれている場合実行の前にビルドされます。
<MTPHPScript echo="1" foo="bar">
echo $args[ 'foo' ] . ':blog:<MTBlogId>';
</MTPHPScript>
=> bar:blog:1
Perl、PHPで動作するブロックタグ
MTCacheProperty
nameモディファイアでキーを指定してキャッシュされた値を出力します。キーに指定されたキャッシュにヒットしなかった場合、テンプレートをビルドしてキャッシュに保存しつつ、ビルドした結果を出力します。
MTClearContext
ブロック内のコンテキストをリセットし、インデックスアーカイブとして評価します。
<MTClearContext>
インデックスアーカイブとして評価
</MTClearContext>
MTCountGroupBy
オブジェクトをカウントします。model モディファイアでオブジェクトを column モディファイアでカラム名を指定します(author オブジェクトは指定できません)。
<MTCountGroupBy model="entry" not_null="1" column="keywords" sort_by="count" sort_order="descend">
<MTIf name="__first__"><ul></MTIf>
<li>(<$MTCountGroupCount$>)<$MTCountGroupValue escape="html"$></li>
<MTIf name="__last__"></ul></MTIf>
</MTCountGroupBy>
MTCSSCompressor
タグで囲まれた部分の CSS を圧縮します。
MTEvalScript
スタティック(管理画面)、ダイナミック(PHP)それぞれの実行タイミングに応じて MTPerlScript、MTPHPScript のいずれかを実行します。
MTFileInfo
mt_fileinfo テーブルを読み込み、ループ出力します。blog_id、blog_ids、include_blogs、exclude_blogs モディファイアが指定可能です。 ループの中では、mtVar にカラム名を渡して取得することができます。
<MTFileInfo blog_id="1">
<mt:var name="archive_type"> =>Index、Individual等
</MTFileInfo>
MTFileInfoLoop
タグ MTFileInfo のエイリアス(別名)です。
MTHTMLCompressor
タグで囲まれた部分の HTML を圧縮します。
MTIfCookie
name モディファイアで指定した名前の Cookie を mtIfタグのモディファイア(eq、like、ge、ne等)を使って評価します。
<MTIfCookie name="session_id" eq="foo">
# session_idクッキーが foo の場合に出力される
</MTIfCookie>
MTIfEntryIsinCategory
エントリーのコンテキストの中で、現在セットされているカテゴリ(のコンテキスト)にブログ記事が含まれている場合に出力されます。
MTIfHeader
name モディファイアで指定した名前の HTTPヘッダ(リクエストヘッダ)を mtIfタグのモディファイア(eq、like、ge、ne等)を使って評価します。
<MTIfHeader name="User-Agent" like="WebKit">
# User-Agentヘッダに「WebKit」を含む時に出力される
</MTIfHeader>
MTIfLanguage
ユーザーの言語設定を mtIfタグのモディファイア(eq、like、ge、ne等)を使って評価します。
<MTIfLanguage language="ja">
# ユーザーの言語が日本語の時に出力される
</MTIfHeader>
MTIfProperty
MTSetProperty(Block)、MTCachePropertyタグでセットしたキャッシュを name属性を指定して取得し、mtIfタグのモディファイア(eq、like、ge、ne等)を使って評価します。
MTIfRegexMatch
nameモディファイアで指定した変数が、regexモディファイアで指定した正規表現にマッチする場合、テンプレートを出力します。
<MTIfRegexMatch name="foo" regex="/^bar/i">
# 正規表現にマッチする場合に出力される
</MTIfRegexMatch>
MTIfRequestMethod
HTTPリクエストメソッドを mtIfタグのモディファイア(eq、like、ge、ne等)を使って評価します。
<MTIfRequestMethod eq="POST">
# POSTリクエストの時に出力される
</MTIfRequestMethod>
MTIfTheURLFound
url モディファイアで指定した URL にファイルが存在する場合に内容を出力します。target_dynamic を指定するとダイナミックパブリッシングで該当のページが存在するかどうかをチェックします。target_outlink を指定することで外部サーバーの URL をチェックします。通常は DynamicMTML と併用してリンク切れ防止のために使用します。 URLがブログパスを含む場合は、HTTPリクエストを発行せず、ファイルの存在をチェックします。
<MTIfTheURLFound url="http://alfasado.net/" target_outlink="1">
# http://alfasado.net/ が有効なレスポンスを返した場合に出力される
</MTIfTheURLFound>
MTIfUserCan
現在のユーザーが permission モディファイアで指定した権限を有している場合内容を出力します。
<MTIfUserCan permission="edit_all_posts">
# すべてのブログ記事の編集権限を持っているユーザーの場合に出力される
</MTIfUserCan>
MTIfUserRole
現在のユーザーが role モディファイアで指定した権限を有している場合内容を出力します。include_superuser モディファイを指定した場合、現在のユーザーがシステム管理者の場合強制的に内容を出力します。
<MTIfUserRole role="ライター" include_superuser="1">
# ライター権限を有するか、システム管理者の場合に出力される
</MTIfUserRole>
MTIfValidateMagic
magic_token HTTPパラメーターがあるかどうかを調べ、それが現在のユーザーに対して有効な場合にテンプレートを出力します。
MTIfValidToken
MTGetOnetimeToken ファンクションタグでワンタイムトークンを発行し、トークンが nameモディファイアで指定したパラメタと比較して(初期値は「magic_token」)一致する場合に内容を出力します。ワンタイムトークンの有効期間(秒)は環境変数 OnetimeTokenTTL で mt-config.cgi に指定します(初期値は600秒=10分)。
<input type="hidden" name="magic_token" value="<MTGetOnetimeToken>" />
<MTIfValidToken name="magic_token">
# 上記を含んだフォームからポストした場合に出力される
</MTIfValidToken>
MTJSCompressor
タグで囲まれた部分の JavaScript を圧縮します。
MTSetContext
インデックスアーカイブやその他のアーカイブでブロックタグで囲んだ部分のコンテキストをモディファイアで指定したものにセットします。
<MTSetContext category_id="n"></MTSetContext>
<MTSetContext category="Foo"></MTSetContext>
<MTSetContext current_timestamp="YYYYMMDDhhmmss"></MTSetContext>
<MTSetContext current_timestamp_end="YYYYMMDDhhmmss"></MTSetContext>
<MTSetContext author="junnama"></MTSetContext>
<MTSetContext entry_id="n"></MTSetContext>
<MTClearContext>インデックスアーカイブとして評価</MTClearContext>
MTSetPropertyBlock
MTSetVarBlock タグと同じような働きをします。nameモディファイアで指定した変数に、value属性で指定した値をセットします。MTSetVarBlock タグとの違いは一点、変数はテンプレートが評価された後も保持されるという点です。セットした値を取り出すには、MTGetProperty タグで取得できます。
ファンクションタグ(コマンドタグ)
Perlでのみ有効なタグ
MTCreateObject
model モディファイアと values モディファイアを指定してオブジェクトをデータベースに保存します。既存オブジェクトの idを指定すると上書き保存されます。 logging モディファイアを指定するとシステムログにメッセージを保存します。 このタグを無効にするには、環境変数 AllowCreateObject entry,page のように許可するオブジェクトをmt-config.cgi に指定してください。author、permissionを指定することはできません。
以下の例はブログ記事を作成して再構築するテンプレートの例です。
<MTIfRequestMethod eq="POST">
<MTIfValidateMagic>
<MTIfUserCan permission="publish_post" blog_id="1">
<MTSetHashVar name="entry">
<MTSetVar name="title" value="記事のタイトル">
<MTSetVarBlock name="text">
ここから記事の本文です。
</MTSetVarBlock>
<MTSetVar name="status" value="2">
<MTSetVar name="blog_id" value="3">
<MTSetVar name="author_id" value="1">
</MTSetHashVar>
<MTCreateObject model="entry"
values="$entry"
logging="1"
callbacks="1"
need_result="permalink"
setvar="entry_link" />
<MTRebuild url="$entry_link" blog_id="3">
</MTIfUserCan>
</MTIfValidateMagic>
</MTIfRequestMethod>
MTRebuild
url モディファイアと blog_id モディファイアを指定して、ページを再構築します。
<$MTRebuild url="http://www.powercms.jp/index.html" blog_id="1"$>
MTRebuildBlog
blog_id または blog_ids(カンマで区切られたブログの ID)モディファイアと archivetype(カンマで区切られた)モディファイア(省略時はすべてが対象となります)を指定してブログを再構築します。RebuildTriggerBackgroundTasks 環境変数を指定すると、バックグラウンドで再構築処理を行います(この設定は FastCGI 環境では無効になります)。
MTRebuildIndexByBlogId
blog_id または blog_ids(カンマで区切られたブログの ID)モディファイアを指定してブログのインデックスアーカイブを再構築します。RebuildTriggerBackgroundTasks 環境変数を指定すると、バックグラウンドで再構築処理を行います(この設定は FastCGI 環境では無効になります)。
<$MTRebuildIndexByBlogID blog_id="45"$>
MTRebuildIndexById
template_id(カンマで区切られたインデックステンプレートの ID)モディファイアを指定してインデックスアーカイブを再構築します。RebuildTriggerBackgroundTasks 環境変数を指定すると、バックグラウンドで再構築処理を行います(この設定は FastCGI 環境では無効になります)。
<$MTRebuildIndexById template_id="18,19"$>
MTRunCallbacks
name 属性にコールバック名を指定して、コールバックを呼び出します。コールバックに明示的に引数を渡すことはできません。
(MT::App::CMS::)take_downを呼び出すテンプレートは以下のようになります。
<MTRunCallbacks name="take_down">
MTSetUserRole
author_id、blog_id、role(ロール名)または role_idモディファイアを指定してユーザーにロールを割り当てます。
<MTSetUserRole role="ライター" author_id="2" blog_id="2">
Perl、PHPで動作するコマンドタグ
MTThrowSQL
queryモディファイアに SQL文を渡して実行します。このタグを使うためには mt-config.cgi に環境変数 AllowThrowSQL 1 を指定する必要があります(デフォルトでは無効)。
MTSendMail
toモディファイア、subjectモディファイア、bodyモディファイアを指定してMTからメールを送信します。
<MTSendMail to="foo@example.com" subject="Subject" body="Body">
# または
<MTSetVar name="options{To}" value="foo@example.com">
<MTSetVar name="Bcc[0]" value="bar@example.com">
<MTSetVar name="Bcc[1]" value="baz@alfasado.jp">
<MTSetVar name="options{Bcc}" value="$Bcc">
<MTSendMail subject="Subject" body="Body" options="$options">
MTCopyFileTo
fromモディファイアと toモディファイアを指定してサーバー上のファイルをコピーします。環境変数 CanWriteTo、CanReadFrom に許可するパス(前方一致)をカンマ区切りで指定することができます。環境変数 PathToRelative に1を指定すると、ブログのファイルパスに指定した値を足したパスに調整します。need_resultモディファイアを指定すると成功した時に「1」を返します。
MTCopyDirectoryTo
fromモディファイアと toモディファイアを指定してサーバー上のディレクトリをコピーします。環境変数 CanWriteTo、CanReadFrom に許可するパス(前方一致)をカンマ区切りで指定することができます。環境変数 PathToRelative に1を指定すると、ブログのファイルパスに指定した値を足したパスに調整します。need_resultモディファイアを指定すると成功した時に「1」を返します。
MTMoveFileTo
fromモディファイアと toモディファイアを指定してサーバー上のファイルを移動します。環境変数 CanWriteTo、CanReadFrom に許可するパス(前方一致)をカンマ区切りで指定することができます。環境変数 PathToRelative に1を指定すると、ブログのファイルパスに指定した値を足したパスに調整します。need_resultモディファイアを指定すると成功した時に「1」を返します。
MTMoveDirectoryTo
fromモディファイアと toモディファイアを指定してサーバー上のディレクトリを移動します。環境変数 CanWriteTo、CanReadFrom に許可するパス(前方一致)をカンマ区切りで指定することができます。環境変数 CanWriteTo、CanReadFrom に許可するパス(前方一致)をカンマ区切りで指定することができます。環境変数 PathToRelative に1を指定すると、ブログのファイルパスに指定した値を足したパスに調整します。need_resultモディファイアを指定すると成功した時に「1」を返します。
MTWriteToFile
toモディファイア(またはfileモディファイア)、valueディファイア(またはcontentモディファイア)を指定して、サーバー上のファイルに書き込みます。環境変数 CanWriteTo に許可するパス(前方一致)をカンマ区切りで指定することができます。環境変数 PathToRelative に1を指定すると、ブログのファイルパスに指定した値を足したパスに調整します。appendモディファイアと glueモディファイアを指定すると、glueモディファイアの値を区切り文字として追記モードとなります。 need_resultモディファイアを指定すると成功した時に「1」を返します。
<MTWriteToFile to="/path/to/file.txt" content="foo" glue="\n" append="1">
MTReadFromFile
fromモディファイア(またはfileモディファイア)を指定して、サーバー上のファイルを読み込んで出力します。環境変数 CanReadFrom に許可するパス(前方一致)をカンマ区切りで指定することができます。環境変数 PathToRelative に1を指定すると、ブログのファイルパスに指定した値を足したパスに調整します。need_resultモディファイアを指定すると成功した時に「1」を返します。
MTRemoveFile
fileモディファイアを指定して、サーバー上のファイルを削除します。環境変数 CanWriteTo に許可するパス(前方一致)をカンマ区切りで指定することができます。環境変数 PathToRelative に1を指定すると、ブログのファイルパスに指定した値を足したパスに調整します。need_resultモディファイアを指定すると成功した時に「1」を返します。
MTRemoveDirectory
fileモディファイアを指定して、サーバー上のディレクトリを削除します。環境変数 CanWriteTo に許可するパス(前方一致)をカンマ区切りで指定することができます。環境変数 PathToRelative に1を指定すると、ブログのファイルパスに指定した値を足したパスに調整します。need_resultモディファイアを指定すると成功した時に「1」を返します。
MTCustomHandler
idモディファイアまたは nameモディファイア(titleモディファイア)を指定して、カスタムハンドラを実行します。ステータスが有効になっている必要があります。定期バッチを順番を指定して実行する、等の用途に利用できます。
MTRedirect
urlモディファイアに指定したURLへリダイレクトします。
通常のファンクションタグ
MTAssetThumbnailFile
アイテム(画像)のコンテキストで、サムネイルのファイルパスを表示します。 convert2base64モディファイアと組み合わせて、Data URI schemeを利用した画像のインライン埋め込み等に利用します。
MTBuild
テンプレートタグをそのまま解釈します。つまり、何もしません。グローバルモディファイアをブロックに指定する時に利用できます。
MTBuildLink
リンクを組み立てます。IfTheUrlFoundモディファイアを指定すると、リンク先が存在するときのみリンクを組み立てて出力します。
<MTBuildLink tag="WebSiteURL" prefix="<li>" postfix="</li>"
attribute='target="_blank"'
labelTag="WebSiteName"
labelModifier='escape\="html"'
IfTheUrlFound="1">
<MTBuildLink url="http://alfasado.net/"
html='<li><a href="http://alfasado.net/" target="_blank">Alfasado Inc.</a></li>'
IfTheUrlFound="1">
# リンクが存在する場合、以下のように出力されます。
<li><a href="http://ウェブサイトURL/" target="_blank">Webサイト名</a></li>
<li><a href="http://alfasado.net/" target="_blank">Alfasado Inc.</a></li>
MTClearCookie
動的ページ(MT::App)、ダイナミックパブリッシング、またはDynamicMTMLで利用します。nameモディファイアを指定して、クッキーをクリアします。reloadモディファイアを指定すると、クッキーをクリアしたあと、リロードします。
MTCookieDump
開発用のタグです。動的ページ(MT::App)、ダイナミックパブリッシング、またはDynamicMTMLで利用します。現在のクッキーをダンプして表示します。
MTCountGroupCount
MTCountGroupBy ブロックタグ内でグループ化された値の数を出力します。
MTCountGroupValue
MTCountGroupBy ブロックタグ内でグループ化された値を出力します。
MTCustomHandlerName
カスタムハンドラで「スクリプトを実行しない」(つまり、MTMLモード)の時、カスタムハンドラ名を出力さいます。
MTCustomHandlerTitle
MTCustomHandlerName のエイリアス(別名)です。
MTDeleteProperty
nameモディファイアを指定して、MTSetProperty等でセットしたキャッシュを削除します。nameモディファイアを省略すると、キャッシュを全削除します。
MTDeveloperScript
mt-app.cgi (MT::App::Developer)のファイル名を返します。環境変数 DeveloperScript でファイル名は変更できます。
MTEnvDump
開発用のタグです。サーバーの環境変数をダンプして表示します。
MTGetCookie
nameモディファイアを指定して Cookieを出力します。
MTGetEnv
nameモディファイアを指定して、特定のサーバー環境変数を出力します。
MTGetEpoc
Unixタイムスタンプを出力します。
MTGetHeader
nameモディファイアを指定してHTTPリクエストヘッダを出力します。
MTGetOnetimeToken
ワンタイムトークンを発行します。遷移先にパラメタとして渡すことでMTIfValidTokenで、トークンの妥当性をチェックできます。ワンタイムトークンの有効期間(秒)は環境変数 OnetimeTokenTTL で mt-config.cgi に指定します(初期値は600秒=10分)。
MTGetProperty
MTSetPropertyタグ(MTSetPropertyBlockタグ)、setpropertyモディファイアで設定された値を name属性を指定して取り出すことができます。
MTGetURLMtime
URLの更新タイムスタンプを表示します。target_outlinkモディファイアを指定すると、外部サーバーへのHEADリクエストを発行します(MTの管理配下のページの場合は、ファイルの更新日時を取得して返します)。
MTLog
message、level、catgory、blog_idモディファイアを指定して、システムログを保存します。 levelモディファイアは次の数字で指定します。INFO(1)、WARNING(2)、ERROR(4)、SECURITY(8)、DEBUG(16)、省略時は16となります。echoモディファイアを指定すると同時にメッセージを画面出力します。
MTMagicToken
現在のユーザーのマジックトークン(セッションID)を表示します。
MTQuery2Log
$app->query_stringをログに保存します。ポストリクエストのパラメタのデバッグ等に利用可能です。
MTQueryDump
開発用のタグです。URLパラメタをダンプして表示します。
MTRequestMethod
HTTPリクエストメソッド(GET/POST等)を出力します。
MTSetColumns2Vars
stashモディファイアにblog、category、entryのいずれかを指定して(もしくはcustomobjectやcampaign等)、オブジェクトのカラムの値をテンプレート変数(MTVar)にセットします。
MTSetCookie
name、valueモディファイアを指定してクッキーをセットします。path、domain、expires、secureモディファイアが追加で指定可能です。reloadモディファイアをつけると、クッキーをセットした後リロードします。
MTSetFields2Vars
MTSetColumns2Varsのエイリアス(別名)です。
MTSetProperty
MTSetVarタグと同じような働きをします。nameモディファイアで指定した変数に、value属性で指定した値をセットします。MTSetVarタグとの違いは一点、変数はテンプレートが評価された後も保持されるという点です。MTSetVarBlock 相当の MTSetPropertyBlock タグもあります。セットした値はMTGetPropertyタグで取得可能です。
MTSpeedMeter
テンプレートのビルドに要した時間を計測します。 SpeedMeterDebugScope環境変数に「Log(デフォルト)」「Screen(ビルドした結果に出力する)」「None(何もしない)」を設定可能です。Screenを指定した場合、prefix,suffixモディファイアを指定可能です(メッセージの前後に挿入されるテキストを指定)。
<MTSpeedMeter
name="ブログ記事の一覧">
<MTEntries>...</MTEntries>
</MTSpeedMeter>
「Log」の場合、以下のメッセージがシステムログに保存されます。
'ブログ記事の一覧'をビルドしました。処理時間: 1.0230250358581543
MTTranslate
phraseモディファイアで指定した文章を翻訳します。ログイン中のユーザーの場合はユーザーの「言語設定」で指定した言語、それ以外の場合はWebブラウザから要求されたAccept-Languageヘッダーを見て翻訳します。use_cookieモディファイアにクッキー名を指定して、クッキーの値で言語を指定することも可能です。componentモディファイアで翻訳ファイルのプラグインIDを指定できます(デフォルトはCore)。
<MTTranslate phrase="Hi,[_1], Welcome to [_2]"
params="$user_name","$website_name"
component="プラグインID"
use_cookie="language">
MTVarDump
MTのテンプレート変数(MTVar)をダンプして出力します。
グローバルモディファイア
convert2base64
ファイルのフルパスを指定して、base64エンコードした結果を表示します。Data URI schemeを利用した画像のインライン埋め込み等に利用します。
outiftheurlfound
チェックするURLをモディファイアに渡して、リンク先が存在する時のみ値を出力します。
<MTDynamicMTML>
<MTSetvarBlock name="link"><a href="http://example.com/foo.html">リンクテキスト</a></MTSetvarBlock>
<MTVar name="$link" outiftheurlfound="http://example.com/foo.html">
</MTDynamicMTML>
# リンク先が存在するときのみ出力されます。
setproperty
setvarモディファイアと同じような働きをします。モディファイアで指定した変数に、ビルドした結果をセットします。setvarモディファイアとの違いは一点、変数はテンプレートが評価された後も保持されるという点です。セットした値を取り出すには、MTGetProperty タグで取得できます。
- カテゴリー
- テンプレート作成Tips
- プラグイン
- 技術情報
コメントを投稿する