2012年08月09日
様々な条件を指定したカスタム検索をテンプレートのみで実装する
PowerCMS ver.3.14で、Enterpriseエディションに含まれるPowerSearchプラグインがパワーアップしました。これまでプラグイン開発が必要だったカスタム検索がテンプレートの設定のみで可能になります(プラグインによる拡張については以前のブログ記事で紹介しました)。
例えばカテゴリ配下のブログ記事を検索する場合はmt-estraier.cgiに以下のようなパラメタを追加します。
mt-estraier.cgi?limit=10&offset=1&blog_id=1&query=検索文字列&parent=カテゴリ名
テンプレートには以下のように add_attr、add_condition モディファイアを追加します。
<MTEstraierResults add_attr="parent" add_condition="STROREQ">
〜
</MTEstraierResults>
文書ドラフトの属性に追加した属性であれば検索条件に指定することができるため、例えば加えてカスタムフィールドの値によるフィルタリングを指定することができます。
以下の例は、ブログ記事カスタムフィールド「MTEntryCustom」を指定し、その値を検索条件に追加する文書ドラフトテンプレートの例です。
@uri=<$MTEntryPermalink$>
@title=<$MTEntryTitle is_draft="1"$>
@cdate=<$MTEntryDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$>
@mdate=<$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$>
@suffix=html
@blog_id=<$MTBlogID$>
@entry_id=<$MTEntryID$><MTIf tag="EntryCategory">
parent=<$MTEntryCategory is_draft="1"$>
<MTIfArchiveTypeEnabled type="Category">parentUrl=<$MTEntryLink type="Category"$></MTIfArchiveTypeEnabled></MTIf><MTIf tag="EntryCustom">
entry_custom=<MTEntryCustom is_draft="1"></MTIf>
<$MTEntryTitle is_draft="1"$>
<$MTEntryBody is_draft="1"$>
<$MTEntryMore is_draft="1"$>
<$MTEntryKeywords is_draft="1"$>
この時、cgiに渡すパラメタは以下のようになります。
mt-estraier.cgi?limit=10&offset=1&blog_id=1&query=検索文字列&entry_custom=カスタムフィールドの値&parent=カテゴリ名
複数指定の場合、テンプレートの add_attr、add_condition を配列で指定します。
<MTEstraierResults add_attr="parent","entry_custom" add_condition="STREQ","STREQ">
〜
</MTEstraierResults>
完全一致の場合 add_condition モディファイアに渡す値は "STREQ" となりますが、その他様々な条件の指定が可能です。
※条件の指定
- STREQ : 指定した文字列と一致する。
- STRNE : 指定した文字列と一致しない。
- STRINC : 指定した文字列を含む。
- STRBW : 指定した文字列で始まる。
- STREW : 指定した文字列で終わる。
- STRAND : 指定した文字列の全てのトークンを含む。
- STROR : 指定した文字列の一つ以上のトークンを含む。
- STROREQ : 指定した文字列の一つ以上のトークンと一致する。
- STRRX : 指定した文字列の正規表現に合致する。
- NUMEQ : 数値や日付が指定したものと等しい。
- NUMNE : 数値や日付が指定したものと等しくない。
- NUMGT : 数値や日付が指定したものより大きい。
- NUMGE : 数値や日付が指定したものと同じかより大きい。
- NUMLT : 数値や日付が指定したものより小さい。
- NUMLE : 数値や日付が指定したものと同じかより小さい。
複数の条件を指定するには add_attr メソッドを複数呼び出します。この場合すべての条件にマッチするAND条件指定になります。
また、表示順の指定も可能になりました(これまでの仕様はスコア順で、任意の表示順を指定するにはプラグインを書く必要がありました。 スコアとは、各文書に指定した検索語がどのくらい含まれるかという指標です。)。set_order、order_conditionモディファイアによって、テンプレートのみで指定することができるようになりました。MTQueryタグを使えば、さらに検索パラメタでの表示順指定も可能です。
<MTEstraierResults set_order="entry_custom" order_condition="NUMA" add_attr="parent" add_condition="STROREQ">
〜
</MTEstraierResults>
order_condition モディファイアに渡せる値は以下のいずれかとなります。
- STRA : 文字列(辞書順)の昇順。
- STRD : 文字列(辞書順)の降順。
- NUMA : 数値または日付の昇順。
- NUMD : 数値または日付の降順。
(検索クエリに関わらず)条件指定のみでフィルタリングする
cgiへのパラメタ no_query=1 もしくは テンプレートにモディファイア no_query="1" を指定することで、検索クエリに関わらず条件指定のみでフィルタリングすることが可能です。
<MTEstraierResults no_query="1" add_attr="parent","entry_custom" add_condition="EQ","EQ">
〜
</MTEstraierResults>
mt-estraier.cgi?limit=10&offset=1&blog_id=1&no_query=1&entry_custom=カスタムフィールドの値&parent=カテゴリ名
- カテゴリー
- PowerCMS 3
- テンプレート作成Tips
コメントを投稿する