PowerCMS™
2025年1月1日購入分よりライセンスの価格を改定いたします。
[ブログ] PowerCMS 6 でのアップデートまとめ を追加しました。
[よくあるご質問] システムログに「タスクを実行するために必要なロックを獲得できませんでした」というログが残っている を追加しました。
[よくあるご質問] 特定のシステムログに絞って確認できますか? を追加しました。

PowerCMS ブログ

ホーム > PowerCMS ブログ > テンプレート作成Tips > MT Studio が提供するテンプレート・タグについて

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
プラグイン
技術情報

Recent Entries