今回は、DynamicMTML を利用して、動的にブログ記事を検索する MTSearchEntries の使い方を紹介します。 MTSearchEntries MTSearchEntries は、target モディファイアで指定したカラムに query モディファイアで指定した文字列を含むエントリーを出力するブロックタグです。MTSearchEntries タグ内では、MTEntry系のファンク...
今回は、DynamicMTML を利用して、動的にブログ記事を検索する MTSearchEntries の使い方を紹介します。
MTSearchEntries は、target モディファイアで指定したカラムに query モディファイアで指定した文字列を含むエントリーを出力するブロックタグです。MTSearchEntries タグ内では、MTEntry系のファンクションタグが使えます。
MTSearchEntries タグで利用できるモディファイアは以下の通りです(詳細は後述します)。
query : 検索文字列
blog_id : ブログID
include_blogs : 対象とするブログIDを列記(カンマ区切り)または
"all" "children" "siblings"が指定可能です。
exclude_blogs : 対象外とするブログIDを列記(カンマ区切り)します。
target : 検索対象とするカラムを指定します。
operator : SQLの条件式を記載します。デフォルトはLIKEです。
class : entry(デフォルト)もしくはpage
category : カテゴリ名
category_id : カテゴリID
tag : タグ
status : 数字もしくは'*'(すべて)
sort_by : 表示順に指定するカラム名
sort_order : 表示順(descendもしくはascend)
lastn : 表示数
offset : オフセット値(何件目から読み込むか)
unique : 同じテンプレート内で使用したMTSearchEntries
ブロックで出力したエントリーを除いて出力します。
not_entry_id : IDを指定した単一のエントリーを除いて出力します。
README.ja.md at master from alfasado/DynamicMTML - GitHub
詳細に入る前に、まずはサンプルを見てみましょう。
最初のサンプルでは、「はじめての DynamicMTML ブログ」の中から、「DynamicMTML」という用語を含む記事をリストアップしてみます。
このブログには、現時点では以下のブログ記事が存在します。
タイトル | 本文 | |
---|---|---|
1 | ブログ記事#01 | これはブログ「はじめての DynamicMTML ブログ」の1つめの記事です。 |
2 | ブログ記事#02 | これはブログ「はじめての DynamicMTML ブログ」の2つめの記事です。 |
3 | ブログ記事#03 | 3つめの記事です。 |
つまり、この中から「DynamicMTML」という用語を含むブログ記事を検索すると、最初の2つの記事がリストアップされるはずです。
そこで、以下の MTML を書いた静的な HTML ファイル mtsearchentries.html を「はじめての DynamicMTML ブログ」のサイトパスにアップロードしてみます。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>MTSearchEntries | <$mt:BlogName$></title>
</head>
<body>
<h1>MTSearchEntries サンプル</h1> <h2>「DynamicMTML」という言葉を含むブログ記事一覧</h2>
<mt:SearchEntries query="DynamicMTML">
<mt:If name="__first__"><ul></mt:If>
<li><mt:EntryTitle></li>
<mt:If name="__last__"></ul></mt:If>
</mt:SearchEntries>
</body>
</html>
これの HTML にアクセスすると次のように表示されました。成功ですね。
MTSearchEntries に指定できるモディファイアは以下の通りです。
検索文字列を指定します。この query モディファイアに渡す値を動的に変更すれば、一つのテンプレートで様々なブログ記事を出力することができます。
このモディファイアについては、MTQuery タグや MTReferralKeywords タグなどを組み合わせると便利です。その方法については、後日紹介します。
また、後の operator でも説明する通り、MTSearchEntries の検索は、operator モディファイアを指定しない限り、デフォルトは「LIKE」検索になります。
LIKE 検索の場合、MTSearchEntries タグの内部では、query 文字列を「%」で挟んだ状態で処理されます。つまり、「query="dynamicmtml"」と指定した場合は、「%dynamicmtml%」として処理されます。この「%」は、任意の0文字以上の文字列という意味です。
さて、LIKE 検索をもう少し便利に使うためには、この「%」の他に以下のことを知っておくと便利かもしれません。
例えば、「Movable Type」「MovableType」「Movable Typo」という表記ゆれがあったとします。この両方を検索でヒットさせたい場合は query モディファイアは次のように指定します。
query="Movable%Typ_"
リストアップするブログを限定する場合に、そのブログの ID を指定します。ブログ内のテンプレートであれば、以下のように渡す方法が考えられます。
<mt:BlogID setvar="blog_id">
<mt:SearchEntries query="DynamicMTML" blog_id="$blog_id">
</mt:SearchEntries>
対象とするブログ ID をカンマ区切りで列記するか、「all」「children」「siblings」 が指定可能です。
対象外とするブログ ID をカンマ区切り列記します。
検索対象とするカラムを指定します。指定できるカラムは以下の通りです。
一つのカラムを指定する場合は「title」のように指定すればOKです。
複数のカラムを指定する場合は「entry_keywords||entry_text」の書式で指定します。この場合の検索は、指定した「いずれか」のカラムから用語を探す「OR検索」になります。
SQL の比較演算子を指定します。指定できる演算子は次の通りです。デフォルトは「LIKE」です。
entry (デフォルト) か page を指定します。ここで page を指定すると、ウェブページを検索します。MTSearchEntries が MTSearchPages として動くイメージです(あくまでイメージですのでタグを条件分岐等して書き換える必要はありません)。
なお、ブログ記事・ウェブページ、両方を対象にしたい場合は、「class="*"」と指定します。
カテゴリ名を指定します。
カテゴリ ID を指定します。class モディファイアで page を指定した場合は、この category_id モディファイアにフォルダ ID を指定できるようです。
タグ名を入力します。
公開状態を表す数字を指定します。指定できる数字は次の通りです。すべてのブログ記事を対象にする場合は「*」を指定します。
表示順の基準となるカラム名を指定します。デフォルトは「authored_on」となります。指定する際 entry_ を頭に付ける必要はありません。
表示順 (descend もしくは ascend)を指定します。descend は「新→古」の順で ascend は「古→新」の順です。
最大表示数を指定します。
MTEntries タグなどと違って、「lastn="0"」を指定すると、何も表示されなくなってしまいます。無制限に表示したい場合は、lastn を設定しなければOKです。
何件目から読み込むかを指定します。例えば、値に 5 を指定すると、最新5件のブログ記事を除いてリストアップします。lastn モディファイアと組み合わせて使います。
同じテンプレート内で使用した MTSearchEntries ブロックで出力したエントリーを除いて出力します。
ID を指定した単一のエントリーを除いて出力します。
MTSearchEntries タグ内では、以下の値が MTVar にセットされます。
以上です。次回から、MTSearchEntries を使ったサンプルを紹介していきたいと思います。