PowerCMS™

PowerCMS ブログ

ホーム > PowerCMS ブログ > カスタムオブジェクトをカスタムフィールドの値で検索する

2012年10月03日

カスタムオブジェクトをカスタムフィールドの値で検索する

PowerCMSではブログ記事やウェブページをカテゴリ等を指定してダイナミック検索する機能が含まれていますが、カスタムオブジェクトを動的に検索したいケースがあるかと思います。Enterpriseエディション又はMovable Type Advanced+PowerCMSの場合は、PowerSearchプラグインを使って複雑な複数条件指定をテンプレートと設定のみで実現できます。

このエントリでは、Standard版、Professional版でも動作可能なDynamicMTMLを利用したカスタムサーチの実現方法についてご紹介します。

SearchCustomObjectFieldプラグインのインストール

オプションプラグイン(options)のSearchCustomObjectFieldプラグインをpluginsディレクトリにインストールします。このテンプレート・タグは、下記のように使います。

<mt:SearchCustomObjectField class="book" field="bookauthor"
    separator="," multi="1" query="野田,純生" and_or="AND">
マッチしたカスタムオブジェクトのループ
</mt:SearchCustomObjectField>
モディファイア
classクラス名
multi複数キーワードを対象とする場合1
separator複数キーワードを対象とする場合の区切り文字
query検索キーワード
and_orAND又はOR
limit件数
offset何件目からを検索対象とするか

より具体的な例をご紹介します。例として「グループ会社」というカスタムオブジェクト(GroupCompany)を作成し、ベースネームが「groupcompanyaddress」というカスタムフィールド(テキスト形)を作成します。

続いて、検索フォームを作成します。

<form action="search.html">
第1条件:<input type="text" value="" name="q[]" />
第2条件:<input type="text" value="" name="q[]" />
<input type="radio" name="and_or" value="AND" /> AND
<input type="radio" name="and_or" value="OR" /> OR
<input type="submit" value="検索!" />
</form>

検索を実行すると、下記のようなリクエストURLへ遷移します。

search.html?q[]=東京&q[]=名古屋&and_or=OR

このリクエストを処理するテンプレートは以下のようになります。複数の同一キーのパラメタを受け取るためにMTQueryLoopブロックタグを利用しています。

<MTDynamicMTML>
<mt:QueryLoop key="q" glue="," setvar="query"><mt:var name="q"></mt:QueryLoop>
<mt:Query key="and_or" setvar="and_or">
<mt:SearchCustomObjectField class="groupcompany"
        field="groupcompanyaddress" separator=","
        multi="1" query="$query" and_or="OR">
    <MTCustomObjectName>...
</mt:SearchCustomObjectField>
</MTDynamicMTML>

以下は、複数キーワードをスペースで区切って検索する例です。検索語をスペースで分割するために、MTSplitVarsブロックタグを利用しています。

<MTDynamicMTML>
<mt:Query key="q" setvar="q">
<form action="search.html">
検索ワード(スペース区切り):<input type="text" value="<mt:var name="q" escape="html"" name="q" />
<input type="radio" name="and_or" value="AND" /> AND
<input type="radio" name="and_or" value="OR" /> OR
<input type="submit" value="検索!" />
</form>

<MTSplitVars delimiter=" " text="$q" glue="," name="value" setvar="query"><mt:Var name="value"></MTSplitVars>

<mt:SearchCustomObjectField class="groupcompany"
        field="groupcompanyaddress" separator=","
        multi="1" query="$query" and_or="OR">
    <MTCustomObjectName>...
</mt:SearchCustomObjectField>
</MTDynamicMTML>

カテゴリー
PowerCMS 3
テンプレート作成Tips
技術情報

Recent Entries