はじめての DynamicMTML #05 - MTSearchEntries (1) 動的にブログ記事を検索する

今回は、DynamicMTML を利用して、動的にブログ記事を検索する MTSearchEntries の使い方を紹介します。 MTSearchEntries MTSearchEntries は、target モディファイアで指定したカラムに query モディファイアで指定した文字列を含むエントリーを出力するブロックタグです。MTSearchEntries タグ内では、MTEntry系のファンク...

今回は、DynamicMTML を利用して、動的にブログ記事を検索する MTSearchEntries の使い方を紹介します。

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

詳細に入る前に、まずはサンプルを見てみましょう。

MTSearchEntries のサンプル

最初のサンプルでは、「はじめての DynamicMTML ブログ」の中から、「DynamicMTML」という用語を含む記事をリストアップしてみます。

このブログには、現時点では以下のブログ記事が存在します。

タイトル本文
1 ブログ記事#01 これはブログ「はじめての DynamicMTML ブログ」の1つめの記事です。
2 ブログ記事#02 これはブログ「はじめての DynamicMTML ブログ」の2つめの記事です。
3 ブログ記事#03 3つめの記事です。

つまり、この中から「DynamicMTML」という用語を含むブログ記事を検索すると、最初の2つの記事がリストアップされるはずです。

そこで、以下の MTML を書いた静的な HTML ファイル mtsearchentries.html を「はじめての DynamicMTML ブログ」のサイトパスにアップロードしてみます。

  • はじめての DynamicMTML ブログ
    http://www.tinybeans.info/first_dynamic/blog1/mtsearchentries.html
<!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 にアクセスすると次のように表示されました。成功ですね。

startup-dymtml-16

モディファイア

MTSearchEntries に指定できるモディファイアは以下の通りです。

query

検索文字列を指定します。この query モディファイアに渡す値を動的に変更すれば、一つのテンプレートで様々なブログ記事を出力することができます。

このモディファイアについては、MTQuery タグや MTReferralKeywords タグなどを組み合わせると便利です。その方法については、後日紹介します。

また、後の operator でも説明する通り、MTSearchEntries の検索は、operator モディファイアを指定しない限り、デフォルトは「LIKE」検索になります。

LIKE 検索の場合、MTSearchEntries タグの内部では、query 文字列を「%」で挟んだ状態で処理されます。つまり、「query="dynamicmtml"」と指定した場合は、「%dynamicmtml%」として処理されます。この「%」は、任意の0文字以上の文字列という意味です。

さて、LIKE 検索をもう少し便利に使うためには、この「%」の他に以下のことを知っておくと便利かもしれません。

  • % : 任意の0文字以上の文字列
  • _ : 任意の1文字
  • 大文字と小文字は区別されない

例えば、「Movable Type」「MovableType」「Movable Typo」という表記ゆれがあったとします。この両方を検索でヒットさせたい場合は query モディファイアは次のように指定します。

query="Movable%Typ_"

blog_id

リストアップするブログを限定する場合に、そのブログの ID を指定します。ブログ内のテンプレートであれば、以下のように渡す方法が考えられます。

<mt:BlogID setvar="blog_id">
<mt:SearchEntries query="DynamicMTML" blog_id="$blog_id">
</mt:SearchEntries>

include_blogs(blog_ids)

対象とするブログ ID をカンマ区切りで列記するか、「all」「children」「siblings」 が指定可能です。

exclude_blogs

対象外とするブログ ID をカンマ区切り列記します。

target

検索対象とするカラムを指定します。指定できるカラムは以下の通りです。

  • title(タイトル)
  • keywords(キーワード)
  • excerpt(概要)
  • text(本文)
  • text_more(続き)

一つのカラムを指定する場合は「title」のように指定すればOKです。

複数のカラムを指定する場合は「entry_keywords||entry_text」の書式で指定します。この場合の検索は、指定した「いずれか」のカラムから用語を探す「OR検索」になります。

operator

SQL の比較演算子を指定します。指定できる演算子は次の通りです。デフォルトは「LIKE」です。

  • LIKE(デフォルト:あいまい検索)
  • NOT LIKE(含まない)
  • IS NULL(NULLである)
  • IS NOT NULL(NULLでない)
  • >(より大きい)
  • <(より小さい)
  • >=(以上)
  • <=(以下)
  • !=(等しくない)
  • =(等しい)

class

entry (デフォルト) か page を指定します。ここで page を指定すると、ウェブページを検索します。MTSearchEntries が MTSearchPages として動くイメージです(あくまでイメージですのでタグを条件分岐等して書き換える必要はありません)。

なお、ブログ記事・ウェブページ、両方を対象にしたい場合は、「class="*"」と指定します。

category

カテゴリ名を指定します。

category_id

カテゴリ ID を指定します。class モディファイアで page を指定した場合は、この category_id モディファイアにフォルダ ID を指定できるようです。

tag

タグ名を入力します。

status

公開状態を表す数字を指定します。指定できる数字は次の通りです。すべてのブログ記事を対象にする場合は「*」を指定します。

  • 1(未公開(原稿))
  • 2(公開:デフォルト)
  • 4(日時指定)

sort_by

表示順の基準となるカラム名を指定します。デフォルトは「authored_on」となります。指定する際 entry_ を頭に付ける必要はありません。

  • authored_on (公開日・初期値)
  • author_id (作成ユーザー ID)
  • basename (出力ファイル名)
  • created_on (作成日)
  • excerpt (概要)
  • title (ブログ記事のタイトル)
  • comment_count (コメントの件数)
  • ping_count (トラックバックの件数)
  • text (本文)
  • text_more (続き)
  • title (ブログ記事のタイトル)
  • modified_on (変更日時)

sort_order

表示順 (descend もしくは ascend)を指定します。descend は「新→古」の順で ascend は「古→新」の順です。

lastn

最大表示数を指定します。

MTEntries タグなどと違って、「lastn="0"」を指定すると、何も表示されなくなってしまいます。無制限に表示したい場合は、lastn を設定しなければOKです。

offset

何件目から読み込むかを指定します。例えば、値に 5 を指定すると、最新5件のブログ記事を除いてリストアップします。lastn モディファイアと組み合わせて使います。

unique

同じテンプレート内で使用した MTSearchEntries ブロックで出力したエントリーを除いて出力します。

not_entry_id

ID を指定した単一のエントリーを除いて出力します。

MTVar にセットされる値

MTSearchEntries タグ内では、以下の値が MTVar にセットされます。

  • __first__: ループの最初
  • __counter__: ループの何回目か
  • __odd__: 奇数回目の出力
  • __even__: 偶数回目の出力
  • __last__: ループの最後

以上です。次回から、MTSearchEntries を使ったサンプルを紹介していきたいと思います。

Published 2011-12-17
Updated 2019-06-25