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

| コメント(0) | トラックバック(0)

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

続き(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 );

トラックバック(0)

トラックバックURL: http://junnama.alfasado.net/cgi/mt/mt-tb.cgi/800

コメントする

Facebook

Twitter

このブログ記事について

このページは、Junnama Nodaが2014年4月11日 10:54に書いたブログ記事です。

ひとつ前のブログ記事は「PHPerのための Movable Type 講座(その2)」です。

次のブログ記事は「ITのクラウド化と広告(印刷・出版)のWeb化で起こっていることが何だか似ているかもしれない件」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.2.6