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

PowerCMS ブログ

ホーム > PowerCMS ブログ > DynamicMTML > New DynamicMTML(PHPによるMovable Typeの拡張)-1

2010年12月25日

New DynamicMTML(PHPによるMovable Typeの拡張)-1

Power CMS for MT2.05で新しくなったDynamicMTMLについて2回に分けてご紹介します(無償配布版について現在公開の準備中です)。

今回のバージョンでは静的HTML内のMTMLのビルドに留まらず、PHPによるアプリケーション開発のための様々な仕組みや機能を拡充しています。

DynamicMTMLで何ができるかについては過去のエントリーもご参考にお読みください。

この仕組みよって、例えば下記のような仕組みが簡単に導入可能になります。

はじめに

DynamicMTML は mod_rewrite を利用してコンテンツへのリクエストを Dynamic Site Bootstrapper(mtview.php) に処理させることで、静的ファイルに記述された MTML をダイナミックパブリッシングエンジンを用いて動的ビルドすることの出来る Movable Type の拡張です(MTMLだけでなくPHPによる動的コードを同時に実行することも可能です)。また、PHP以外にPerlのエンジンによってテンプレートを処理することも可能です。

DynamicMTMLの概要

動作環境

  • Movable Type5.04以降
  • PHPによるダイナミックパブリッシングが動作する環境
  • mod_rewriteが有効で.htaccessによる設定が可能な環境

設定

mt-config.cgiに下記のディレクティブを指定することが出来ます。

DisableCompilerWarnings 1
# テンプレート保存画面のエラーを非表示にします。(PHPのみに対応したプラグインを作成する際に必要に応じて設定してください)
DynamicForceCompile 1
# 常にSmartyのテンプレートをコンパイルします。
PowerCMSFilesDir /path/to/powercms_files
# powercms_filesディレクトリを任意の場所に設定します。
UserSessionTimeoutNoCheck 1
# $app->user()を呼び出す時にUserSessionTimeoutの値を無視します。
DynamicIncludeStatic 1
# スタティックファイル中のPHPコードを実行します。
AllowMagicQuotesGPC 1
# magic_quotes_gpcをOffにしません(magic_quotes_gpcが有効でこの設定が0の時、DynamicMTMLがmagic_quotes_gpcをOffにします)。
DynamicPHPFirst 1
# DynamicMTMLの実行時にMTMLよりも先にPHPコードを実行します。

概要

静的ファイルが存在する時場合、存在するファイルがテキストファイルの場合(mime_typeがtext/foo もしくはapplication/xhtml+xmlの場合)の場合に、ファイルの中にMTタグを含んでいればファイル内のMTタグをダイナミックパブリッシングエンジンで処理して処理結果を返します。ファイル内のMTタグの有無に関わらず、ファイル内にPHPのコードが記述されていれば、PHPのコードもあわせて実行されます(DynamicIncludeStatic環境設定が有効な場合)。静的ファイルが存在しない場合は、MTのダイナミックパブリッシングに処理が渡されます。

処理の各ポイントでコールされるコールバックに対応したプラグインによる拡張が可能です。

データベースへの接続に失敗した時の処理の継続

コールバックプラグインによって例えば別のデータベースへ接続をリトライして処理を継続することができます。また、キャッシュが有効な場合は(ブログの全般設定で設定)キャッシュが存在すればキャッシュを、キャッシュがない場合でも静的ファイルが存在する場合にはファイルの内容を返すことができます。この時、ファイル内のMTタグは下記のルールで処理されます。

<MTNonDynamicMTML>
    この中はそのまま出力されます。    
</MTNonDynamicMTML>
<MTDynamicMTML>
    この中は出力されません。
</MTDynamicMTML>

MTDynamicMTML及びMTNonDynamicMTMLタグを解釈した後、結果に残っているMTタグはブラウザに返される前に削除されます。

接続のリトライや別のデータベースへの接続方法(レプリケーション先のDBの利用等)についてはinit_request, mt_init_exception コールバックプラグインの例を参照してください。

テンプレート・タグ

DynamicMTML環境ではダイナミックパブリッシングに対応した全てのテンプレートタグが利用可能ですが(Power CMS for MTの基本機能はすべてダイナミックパブリッシングにも対応しています)、DynamicMTMLプラグインによっていくつかのタグが利用可能になります。MTMLを出力するためのいくつかのタグ以外はすべてPerl/PHPの両方に対応しています。

MTDynamicMTML(ブロックタグ)

静的ファイル出力のテンプレートに記載した場合、このタグ(閉じタグを含む)及びタグの中のテキストがビルドされずそのままファイルに出力されます。このタグの内部に記述されたMTMLはダイナミックパブリッシング処理される時にビルドされます。

MTNonDynamicMTML(ブロックタグ)

静的ファイル出力のテンプレートに記載した場合、このタグの中のテキストをビルドした結果を<MTNonDynamicMTML>〜</MTNonDynamicMTML>で囲んだ形でファイルに出力されます。このタグの中身はダイナミックパブリッシング処理される時には出力されず、DBへのアクセスに失敗した時等に(MT::get_instanceに失敗した時)に出力されます。

MTRawMTML(ブロックタグ)

静的ファイル出力のテンプレートにのみ記載できます。タグの中のテキストがビルドされずそのままファイルに出力されます。

MTIfLogin(ブロックタグ)

ユーザーのログインcookieから、有効なユーザーである場合に出力されます。ユーザーが有効な時、このタグの内部でMTAuthor関連のMTMLが利用可能です。

MTClientAuthorBlock(ブロックタグ)

ユーザーがログインしている時、ユーザー(MT::Authorオブジェクト)のコンテキストをセットします。

MTLoginAuthorCTX(ブロックタグ)

MTClientAuthorBlockのエイリアスです。

MTIfUserHasPermission(ブロックタグ)

ユーザーがログインしている時、ユーザーがpermissionモディファイアで指定した権限(例:comment)を持っている時に出力されます。

MTIfUserAgent(ブロックタグ)

wantsモディファイア、likeモディファイアを指定してユーザーエージェント情報による分岐を行います。 詳細については$app->get_agent()の項を参照してください。

例:  
<MTIfUserAgent wants="keitai">
    DoCoMo, AU, SoftBankの携帯キャリアからのアクセスの場合出力されます。
</MTIfUserAgent>
<MTIfUserAgent wants="SmartPhone">
    Android,BlackBerry,iPhone(iPod touch),iPad,Palm,Opera Miniからのアクセスの場合出力されます。
</MTIfUserAgent>
<MTIfUserAgent like="Safari">
    ユーザーエージェント情報に「Safari」を含む場合に出力されます。
</MTIfUserAgent>
MTSearchEntries(ブロックタグ)

targetで指定したカラムにquery文字列を含むエントリーを出力します。
カラム名を省略した場合はタイトル、本文、続き、概要及びキーワードが対象となります。
operator(省略時はLIKE)を指定することで検索条件を指定できます。
例えば operator="=" target="title" query="Movable Type" はタイトルが「Movable Type」と完全一致するエントリーをロードします。

利用できるモディファイア

query検索文字列
blog_idブログID
include_blogs対象とするブログIDを列記(カンマ区切り)または"all" "children" "siblings"が指定可能です。
exclude_blogs対象外とするブログIDを列記(カンマ区切り)します。
target検索対象とするカラムを指定します。
operatorSQLの条件式を記載します。デフォルトはLIKEです。
classentry(デフォルト)もしくはpage
sort_by表示順に指定するカラム名
sort_order表示順(descendもしくはascend)
lastn表示数
offsetオフセット値(何件目から読み込むか)
unique同じテンプレート内で使用したMTSearchEntriesブロックで出力したエントリーを除いて出力します。
not_entry_idIDを指定した単一のエントリーを除いて出力します。
MTQueryLoop(ブロックタグ)

keyモディファイアで指定したクエリー文字列の配列をvar[key]にセットしてループ出力します。

例:
<MTQueryLoop key="foo" glue=","><mt:var name="foo" escape="html"></MTQueryLoop>

このテンプレートは request_url?foo[]=bar&foo[]=buz リクエストの時「bar,buz」を出力します。

MTSetQueryVars(ブロックタグ)

リクエストのクエリー文字列の配列をvarにセットします。

例:
<MTSetQueryVars><mt:var name="foo" escape="html">,<mt:var name="bar" escape="html"></MTSetQueryVars>

このテンプレートは request_url?foo=1&bar=2 リクエストの時「1,2」を出力します。

MTSplitVars(ブロックタグ)

textモディファイアで指定した文字列をdelimiterモディファイアで指定した文字列で分割してvar[value](valueはnameモディファイアで指定可能です)にセットしてループ出力します。

MTReferralKeywords(ブロックタグ)

Google, bing, MSN, Yahoo!, gooからの流入の際(又はサイト内検索'パラメタ名はquery')に検索されたキーワードの配列をvar[keyword]にセットしてループ出力します。

MTML(ファンクションタグ)

静的ファイル出力のテンプレートにのみ記載できます。tagモディファイアで指定したMTタグにparamsモディファイアで指定したパラメタを付けてMTタグとして出力します。

例:
<MTML tag="MTIfUserHasPermission" params='permission="comment"'>
    <MTBlogName escape="html">にコメントできます。
<MTML tag="MTElse">
    <MTBlogName escape="html">にコメントできません。
<MTML tag="/MTIfUserHasPermission">

このテンプレートは下記のように出力され、ダイナミックパブリッシング時に処理されます。

<MTIfUserHasPermission permission="comment">
    [ブログ名]にコメントできます。
<MEElse>
    [ブログ名]にコメントできません。
</MTIfUserHasPermission>
MTMTML(ファンクションタグ)

MTMLのエイリアスです。

MTRawMTMLTag(ファンクションタグ)

MTMLのエイリアスです。

MTQuery(ファンクションタグ)

keyモディファイアで指定したクエリー文字列を出力します。

MTReferralKeyword(ファンクションタグ)

Google, bing, MSN, Yahoo!, gooからの流入の際(又はサイト内検索'パラメタ名はquery')に検索されたキーワード(フレーズ)を出力します。

MTUserAgent(ファンクションタグ)

ユーザーエージェントを判別する文字列を返します。rawモディファイアを指定するとHTTP_USER_AGENT情報をそのまま出力します。
詳細については$app->get_agent()の項を参照してください。

MTCurrentArchiveURL(ファンクションタグ)

現在のページのURLからクエリ文字列を削除したURLをhttpからのフルパスで出力します。

MTCurrentArchiveFile(ファンクションタグ)

現在のページのサーバー上のファイルパスをフルパスで出力します。

MTEntryStatusInt(ファンクションタグ)

エントリーのステータスを数字で返します。

MTAuthorLanguage(ファンクションタグ)

ユーザーの言語(例:ja)を出力します。

MTTrans(ファンクションタグ)

phraseモディファイア及びparamsモディファイアに指定された文字列を元に現在のユーザーの言語に応じて翻訳された文字列を出力します。

* PluginName/php/l10n/以下に l10n_ja.php(または他の言語) ファイルを設置し、配列$Lexiconにテーブルを登録することで言語ファイルを拡張することができます。

highlightingsearchword(モディファイア)

Google, bing, MSN, Yahoo!, gooからの流入の際(又はサイト内検索'パラメタ名はquery')に検索されたキーワードを渡されたパラメタのclass名を付けたstrongタグでマークアップします。

例:
    <MTEntryBody highlightingsearchword="match-words">

検索キーワードが<strong class="match-words">〜</strong>でマークアップされます。

make_seo_basename(モディファイア)

文字列からURLに利用できる文字のみを先頭から指定文字分抽出してURLエンコードした文字列basenameを返します。URLに利用できない文字は'_'に置換されます。

例:
    <$MTEntryTitle make_seo_basename="50"$>
「Movable Typeへようこそ」=>「Movable_Type%e3%81%b8%e3%82%88%e3%81%86%e3%81%93%e3%81%9d」
trimwhitespace(モディファイア)

余分な空白を削除してソースを軽量化します。

intval(モディファイア)

文字列を数値化します。

テンプレートタグの例

# 本文欄をキーワードで検索する(/foo.html?q=keyword)
<mt:dynamicmtml>
<mt:query key="q" escape="html" setvar="query">
<mt:if name="query">
    <mt:query key="limit" intval="1" setvar="limit">
    <mt:unless name="limit">
        <mt:setvar name="limit" value="20">
    </mt:unless>
    <mt:searchentries target="text" query="$query" lastn="$limit" count="1">
    <mt:if name="__first__">
    <div class="search-entry widget">
        <h3 class="widget-header">Serarch result for '<$mt:var name="query"$>'(<mt:var name="__entries_count__"> entries match).</h3>
            <ul>
    </mt:if>
                <li><a href="<$mt:entrypermalink$>"><$mt:entrytitle escape="html"$></a></li>
    <mt:if name="__last__">
            </ul>
            <mt:if name="__entries_count__" gt="$limit">
                <p><a href="<mt:CurrentArchiveUrl>?q=<$mt:var name="query" escape="url"$>&amp;limit=<mt:var name="__entries_count__">">More</a></p>
            </mt:if>
    </mt:if>
    </mt:searchentries>
</mt:if>
</mt:dynamicmtml>
# 検索エンジンからの流入時に本文に検索ワードを含むブログ記事を10件リストアップして表示する(検索ワードをハイライト表示する)
<mt:dynamicmtml>
<mt:archivetype setvar="archive_type">
<mt:if name="archive_type" eq="Individual">
<$mt:entryid setvar="me"$>
</mt:if>
<mt:if name="archive_type" eq="Page">
<$mt:pageid setvar="me"$>
</mt:if>
<$mt:setvar name="entries_max" value="10"$>
<$mt:setvar name="entries_counter" value="0"$>
<mt:referralkeywords trimwhitespace="1">
<mt:if name="entries_counter" lt="$entries_max">
    <mt:searchentries target="text" query="$keyword" unique="1" lastn="$entries_max" not_entry_id="$me" highlightingsearchword="1">
        <mt:unless name="entries_counter">
<div class="related-entry widget">
    <h3 class="widget-header">Your serarch keyword '<$mt:referralkeyword escape="html"$>'?</h3>
        <ul>
        </mt:unless>
        <mt:if name="entries_counter" lt="$entries_max">
            <li><a href="<$mt:entrypermalink$>"><$mt:entrytitle escape="html"$></a></li>
        </mt:if>
        <$mt:setvar name="entries_counter" value="1" op="+"$>
    </mt:searchentries>
</mt:if>
</mt:referralkeywords>
        <mt:if name="entries_counter"></ul>
</div>
</mt:if>
</mt:dynamicmtml>
# PC向けにはスタティックページを返し、携帯・スマートフォンからのアクセスの際には別テンプレートを動的処理する
<mtml tag="mt:IfUserAgent" params='wants="keitai"'>
    <mt:dynamicmtml>
        <$mt:include module="携帯用テンプレート"$>
    </mt:dynamicmtml>
<mtml tag="mt:else">
<mtml tag="mt:IfUserAgent" params='wants="SmartPhone"'>
    <mt:dynamicmtml>
        <$mt:include module="スマートフォン向けテンプレート"$>
    </mt:dynamicmtml>
<mtml tag="mt:else">
    <$mt:include module="PC向けテンプレート"$>
<mtml tag="/mt:else">
<mtml tag="/mt:IfUserAgent">
<mtml tag="/mt:else">
<mtml tag="/mt:IfUserAgent">
# 権限のあるユーザーにEditリンクを表示する
<mt:dynamicmtml>
<mt:IfUserHasPermission permission="edit_all_posts">
    <$mt:setvar name="can_post" value="1"$>
<mt:Else>
    <mt:IfUserHasPermission permission="publish_post">
        <$mt:entryAuthorId setvar="entry_author_id"$>
        <$mt:AuthorId setvar="client_author_id"$>
        <mt:if name="entry_author_id" eq="client_author_id">
           <$mt:setvar name="can_post" value="1"$> 
        </mt:if>
    </mt:IfUserHasPermission>
</mt:Else>
</mt:IfUserHasPermission>
<mt:if name="can_post">
    <p>
        <a href="<$mt:CGIPath$><$mt:AdminScript$>?__mode=view&amp;_type=entry&amp;id=<$mt:entryid$>&amp;blog_id=<$mt:blogid$>">Edit</a>
    </p>
</mt:if>
</mt:dynamicmtml>

クラス DynamicMTML

今回のバージョンでDynamicMTMLはPHPのクラスとして定義され、PHPを利用したMTベースのウェブアプリケーションを作成・拡張するための様々な仕組みが追加されました。

    require_once ( 'dynamicmtml.php' );
    $app = new DynamicMTML();
    $app->configure( $mt_config );
    $app->init_plugin_dir();
    $app->run_callbacks( 'init_request' );
    ...

クラスの取得

DynamicMTML環境下では下記で取得可能です。

    global $app または $app = $ctx->stash('bootstrapper')

MT::App互換のメソッド

$app->login()

「username」および「password」パラメーターを探して、ユーザーの認証情報をチェックします。usernameとpasswordが有効なものである場合、mt_sessionテーブルにセッション情報を保存してログインcookieを設定します。return_urlパラメーターが指定されている場合、ログイン処理の後リダイレクトします。

$app->logout()

ログインcookieをクリアします。sessid付きのリクエストの場合、sessidの値を削除したURLへリダイレクトします。

$app->send_http_header($content_type,[$ts,$length])

クライアントにHTTPヘッダーを送信します。引数$content_typeが指定されている場合には、Content-Typeヘッダーを指定された値に設定します。無指定の場合には、デフォルトで"text/html"になります。$ts(Unixタイムスタンプ)を指定するとLast-Modifiedヘッダ、ETagヘッダを、$lengthを指定するとContent-Lengthヘッダを送信します。

$app->user_cookie()

ユーザーのログインcookieに用いられているcookie名の文字列を返します。

$app->user()

ログイン中のユーザーを表すオブジェクトを返します。通常はMT::Authorオブジェクトです。

$app->blog()

アクティブなアプリケーションが実行されているMT::Blogオブジェクトを返します。

$app->current_magic()

アクティブなユーザーの「マジック・トークン」を返します。

$app->make_magic_token()

ランダムな文字でできた「マジック・トークン」文字列を新規生成します。

$app->validate_magic()

magic_tokenパラメーターがあるかどうかを調べ、それが現在のユーザーに対して有効かどうかをチェックします(ユーザーが未定義の場合は0を返します)。有効な場合に1を返します。無効な場合は0が返ります。たとえば次のように呼び出します。

    if (! $app->validate_magic() ) {
        echo 'Error:Invalid request.';
        exit();
    }
$app->mode()

__modeパラメタの値を返します。なければ'default'が返ります。

$app->session()

アクティブなユーザーのセッション・オブジェクトを返します。

$app->static_path()

アプリケーションのスタティックURL(例:/path/to/mt-static/)を返します。

$app->cookie_val($name)

指定されたcookieの値を返します。

$app->delete_param($param)

リクエストから指定されたパラメーターの値をクリアします。

$app->is_secure()

アプリケーションへのリクエストがセキュアな(HTTPSによる)接続によって送られたものである場合に1を返します。

$app->param($name)

リクエストからクエリー・パラメーターを取得します。

$app->query_string()

(GETリクエストの場合のみ)アクティブなリクエストのクエリー文字列を返します。

$app->request_method()

アクティブなHTTPリクエストのメソッドを返します。通常はGETかPOSTのいずれかです。

$app->redirect($url)

クライアントを$urlというURLにリダイレクトします。$urlが絶対URLでない場合には、その前に「$app->base」の値が付加されます。デフォルトでは、このリダイレクトはLocationヘッダーと「302 Redirect」というレスポンスによって行われます。

$app->base()

アプリケーションのプロトコルとFQDNです。たとえば、アプリケーションの完全なURIがhttp://www.foo.com/mt/mt.phpの場合、このメソッドは"http://www.foo.com"を返します。

$app->path()

ディレクトリURLのパス部分です。たとえば、完全なURIがhttp://www.foo.com/mt/mt.htmlの場合、このメソッドは"/mt/"を返します。

$app->log($msg[,$args])

ログにメッセージ$msgを追記します。ログ・エントリーには「$app->remote_ip」を用いて、アプリケーションを実行しているクライアント(つまりHTTPリクエストを行ったブラウザー)のIPアドレスが付加されます。第2匹数$argsで$args['level'],$args['class']の指定が可能です。

$app->remote_ip()

クライアントのIPアドレスを返します。

$app->config($configname)

$confignameで指定したMTの環境設定の値を返します。

$app->build_tmpl($ctx,$text[,$params])

指定した $ctx から $text をビルドした結果を返します。 $params['archive_type'], $params['blog'], $params['basename'], $params['fileinfo']の指定が可能です($paramを省略した場合、現在のブログのインデックス・テンプレートとしてビルドします)。

class DynamicMTMLのその他のメソッド

$app->can_do($ctx,$permission)

アクティブなユーザーが$ctxにセットされたブログに対して$permissionで指定された権限を持っている場合に1を返します。Perl APIとの違いは、$permissionに渡す値がpermission(create_post,edit_templates等)である点です。

$app->plugin_get_config_value($component,$key[,$blog_id])

プラグイン$componentのプラグイン設定$keyを返します。

$app->escape($string,[$urldecode])

($urldecodeが指定されている場合はデコードしてから)$mt->db()->escape($string)を呼び出して結果を返します。

$app->get_agent($wants,$like)

Android,BlackBerry,iPhone(iPod touch),iPad,Palm,Opera Mini($wantsに'Smartphone'を指定した場合はこのいずれかの場合に1を返します),DoCoMo,AU,SoftBank($wantsに'Keitai'を指定した場合はこのいすれかの場合に1を返します)のいずれかの値を返します。これら以外の場合は'PC'が返ります。
第二引数$likeが指定されている場合、HTTP_USER_AGENTに$likeで指定した文字列が含まれている時に1、含まれていない時に0を返します。

$app->delete_params($array)

リクエストから配列$arrayで指定された複数のパラメーターの値をクリアします。

$app->include_exclude_blogs($ctx,$args)

ブロックタグに渡された$ctxと$args(include_blogs(blog_ids), exclude_blogsモディファイアから)複数のブログを対象とするためのSQLを生成して返します。

例:
$include_exclude_blogs = $app->include_exclude_blogs( $ctx, $args );
if (! $include_exclude_blogs ) $ctx->error( '' );
require_once 'class.mt_entry.php';
$where = " entry_blog_id {$include_exclude_blogs} "
       . " AND entry_class = 'entry' "
       . " AND entry_status = 2 ";
$extra = array(
    'limit' => 10,
    'offset' => 0,
); 
$_entry = new Entry;
$entries = $_entry->Find( $where, false, false, $extra );
$app->do_conditional($ts)

HTTPヘッダの情報と$tsを比較して、コンテンツが更新されていない場合は304 Not Modifiedヘッダを返してクライアントキャッシュを使わせます。

$app->moved_permanently($url)

301 Moved Permanentlyヘッダをつけて$urlへリダイレクトします。

$app->file_not_found($msg)

error.php,error.htmlの順でファイルを探してファイルが存在すればその内容を、存在しなければステータス404 File Not Foundをつけて文字列$msg(省略時"404 File Not Found.")を返します。

$app->access_forbidden($msg)

error.php,error.htmlの順でファイルを探してファイルが存在すればその内容を、存在しなければステータス 403 Access Forbiddenをつけて文字列$msg(省略時"403 Access Forbidden.")を返します。

$app->service_unavailable($msg)

error.php,error.htmlの順でファイルを探してファイルが存在すればその内容を、存在しなければステータス503 Service Unavailableをつけて文字列$msg(省略時"503 Service Unavailable.」")を返します。

$app->non_dynamic_mtml($content);

$contentの中の<MTDynamicMTML>〜</MTDynamicMTML>ブロックを削除して<MTNonDynamicMTML>〜</MTNonDynamicMTML>の中のコンテンツをアクティブにします。これらの処理の後最終的にMTタグは削除され、その結果を返します。

$app->is_valid_author($ctx,$author,$password[,$permission])

$ctx,$author(MT::Authorオブジェクト又は文字列username),$password情報から正しいユーザーかどうかを判別し、正当なユーザーの場合に1を返します。

$app->get_mime_type($extension)

拡張子から判断してmime_type情報を返します。拡張子がhtmlでユーザーエージェントがDoCoMo2.0を含む場合は'application/xhtml+xml'を、該当するものが見つけられなかったときは'text/plain'を返します。

$app->stash($key[,$val])

$keyを指定して値$valをキャッシュします。第二引数を省略した場合はキャッシュした値を取得します。

$app->cache($key[,$val])

$app->stash()へのエイリアスです。

$app->run_callbacks($callbackname,$mt,$ctx,$args,$content)

$callbacknameを指定してコールバックを呼び出します。/mt/plugins/PluginName/php/callbacks/以下にpluginname_callbackname.phpのような名前でファイルを設置することで呼び出すことが出来ます(実行順はプラグイン名の昇順)。
ビルド処理の後で呼ばれたコールバックでは第4引数$contentにビルドされた結果が含まれているため、&$contentとして値を受け取ることでコンテンツの内容を変更することが可能です。

コールバックプラグインについては別のエントリで取り上げます。

dynamicmtml.util.php

dynamicmtml.util.phpは携帯サイト作成やSEO,LPO等に利用可能ないくつかの関数をサポートしています。

    require_once('dynamicmtml.util.php');
    $res = some_function($param1,$param2);
get_agent($wants,$like)

$app->get_agent($wants,$like)と同様です。

get_param($param)

$app->param($param)と同様です。

convert2thumbnail($text[,$type],$embed[,$link,$dimension])

テキスト中に含まれている画像を$typeで指定したフォーマットに(省略の場合はauto(自動判別))変換して$embedで指定したピクセル値の画像に変換し、テキスト中のパスを書き換えます。$dimensionで'width'または'height'(省略の場合'width')を、$linkに数値指定がある場合、画像を$linkピクセルの画像へのリンクにします。

path2url($input_uri,$site_url[,$url])

HTMLソースの中のリンク先URL文字列と$site_url(ブログのサイトURL)からhttpから始まるフルURLを生成して返します。起点となるページのURLが分かっている場合、第3引数$urlで起点となるページのURLを指定します。

referral_site()

HTTP_REFERERから流入元サイトのプロトコルとFQDNを返します(例:http://www.google.co.jp/)。

referral_search_keyword($ctx[,$array])

Google,Yahoo!,bing,msn,goo及びサイト内検索からの流入時にHTTP_REFERERから検索ワードを抽出します。第二引数$arrayを指定した場合、検索キーワードの配列を代入します。

make_seo_basename($title,$length)

$titleからURLに利用できる文字のみを先頭から$length文字抽出してURLエンコードした文字列basenameを返します。URLに利用できない文字は'_'に置換されます。

引き続き次回のエントリではコールバックプラグインのしくみと作成方法についてご紹介します。


カテゴリー
DynamicMTML
PowerCMS 2
プラグイン
技術情報

Recent Entries