アルファサード株式会社 代表取締役 野田 純生のブログ


PHPerのための Movable Type 講座(その3)


公開日 : 2014-04-11 10:54:48


ここまできたら、後少しなので、とっとと書き切ってしまいたいじゃん!

続き(class MTDatabase 完結編)。

escape

文字列をエスケープします。MTのダイナミックパブリッシングでは、スタティックパブリッシング(Perl)のMT::Objectにあたるものがないので、ADODBを利用してSQLを実行するケースが多くあります(DynamicMTMLには(完全ではないですが)MT::Object互換のメソッドがあります)。

WHERE文に渡す文字列などはこのようにエスケープを行います。ユーザーが入力した文字列で処理するようなケースは稀だと思いますが、テンプレートタグから渡されるモディファイアの値などが主に対象になります。

$str = $mt->db()->escape( $str );

fetch_placements

カテゴリIDのリストを渡して、Placementレコードの配列を得ます。Placement(mt_placement)とは、記事とカテゴリ、ページとフォルダの関連づけを保存するテーブルです。id、entry_id、category_id、blog_id、is_praimary(主カテゴリかどうか)のみで構成されるシンプルな構造になっています。

$cat_ids = array( 1, 2, 3 );
$args = array( 'category_id' => $cat_ids );
fetch_placements( $args );

fetch_objecttags

Objecttag(mt_objecttag)レコードの配列を返します。Objecttagとは、記事、ページやアイテム等と「タグ」の関連づけを保存するテーブルです。

$tag_list = array( 1, 2 );
$ot = $mt->db()->fetch_objecttags( array(
        'tag_id' => $tag_list,
        'datasource' => 'entry',
        'blog_id' => $blog_id));

fetch_comments

Comment(コメント=mt_comment)オブジェクトの配列を返します。 $argsには、以下の例のように記事IDを渡すほか、MTCommentsテンプレートタグで利用できるモディファイア(limit、offset、sort_orderなど)が指定可能です。

$args = array( 'entry_id' => $entry_id );
$comments = $mt->db()->fetch_comments( $args );

fetch_comment_replies

コメントIDを指定して、そのコメントへの返信(Reply)コメントの配列を返します。$argsには sort_order が指定できますが、ソートキーは指定できません(日付順となります)。

$args = array( 'comment_id' => 1 );
$comments = $mt->db()->fetch_comment_replies( $args );

cache_categories

記事IDのリストを渡して、カテゴリ情報をキャッシュします。 他のキャッシュ系のメソッドでもそうですが(cache_permalinks等)、キャッシュが有効なのはリクエストが終了するまでの間です(Memcachedのようにリクエストをまたがったキャッシュは保持されない)。 MTのテンプレートによって、記事リストが複数の箇所に配置されていたりすると、都度SQLを発行することになるため、一度表示に使ったらキャッシュされる、というようになっています。

$mt->db()->cache_categories( array( 1, 2, 3 ) );

update_archive_link_cache

これも内部的なキャッシュです。日付アーカイブのリンク情報をキャッシュします。

$args = array( 'blog_id' => $blog_id,
                     'archive_type' => 'Monthly' );
$mt->db()->update_archive_link_cache( $args );

fetch_session

IDを指定して単一のSession(mt_session)オブジェクトを返します。session_kindが'CO'のセッションが対象となります。

$mt->db()->fetch_session( $session_id );

※このページには'CO'の説明がないですね。lib/MT/Session.pmのドキュメントによれば

Cached Object records store cache data of objects via MT::Cache::Session class. Cache of the template module is the default use of the kind.

キャッシュオブジェクト、つまり、テンプレートモジュールのキャッシュなんかの値がこれにあたります。

fetch_unexpired_session

第一引数にセッションのID(又はIDの配列)、第二引数に秒を指定して、有効なセッションレコードの配列を返します(戻り値は単一ID指定の際も配列)。fetch_sessionと同じくsession_kindが'CO'のセッションが対象となります(と、いうか、fetch_sessionの中から。fetch_unexpired_sessionをコールしている)。

$mt->db()->fetch_unexpired_session( array( $sess1, $sess2 ),
                                                        86400 );

update_session

セッションIDと値を指定して、Sessionレコードを更新します。

$mt->db()->update_session( $session_id, $value );

remove_session

セッションIDを指定して、セッションレコードを削除します。

$mt->db()->update_session( $session_id );

flush_session

session_kindが'CO'のセッションレコードをすべて削除します。このメソッドに引数はありません。

$mt->db()->flush_session();

get_latest_touch

オブジェクトの最終更新日を返します。MTの場合(に限らずですが)、オブジェクトは単一のレコードのみで構成されている訳ではないので(コメントやカテゴリなど複数のレコードの組み合わせで構成されている)、mt_touchというテーブルがあり、オブジェクトの更新時に、Touchオブジェクトのmodified_onを更新するような仕組みになっています。もちろん、オブジェクトが対応しているかどうかは実装次第です。主に、テンプレートモジュールキャッシュの更新タイミングの制御に利用されているようです。

$mt->db()->get_latest_touch( $blog_id, 'author' );

This module is used to store and retrieve the last modification timestamp for any registered object type. This is primarily utilized by the module caching layer of Movable Type, where caches can expire based on changes to entries, pages, categories, etc. Timestamps stored to the 'modified_on' column are in UTC time.

fetch_template_meta

メソッド名からすると、カステムフィールドの配列を読み込むような感じにとれなくもないですが、違うようです。MTIncludeタグの中で、テンプレートをロードするのに使われています。戻り値は、単一のTemplate(mt_template)オブジェクトです。

$blog_id = 1;
$load_type = 'identifier';
$load_name = 'main_index';
$is_global = FALSE;
$tmpl = $mt->db()->fetch_template_meta( $load_type, $load_name,
                                                              $blog_id, $is_global );


このブログを書いている人
野田純生の写真
野田 純生 (のだ すみお)

大阪府出身。ウェブアクセシビリティエバンジェリスト。 アルファサード株式会社の代表取締役社長であり、現役のプログラマ。経営理念は「テクノロジーによって顧客とパートナーに寄り添い、ウェブを良くする」。 プロフィール詳細へ