PowerCMS ではダイナミックパブリッシングを利用して高速に動作する検索機能を備えています。この検索機能では記事/ウェブページの検索が可能です。また、この機能を利用することによってカスタムフィールドや拡張フィールドの値を検索対象にすることができます。ここでは、キーワード検索、タグ検索、検索結果のフィード配信といった検索機能全般について説明します。
注意事項
- WEB サーバーに PHP が必要です。
- PHP からデータベースに接続・参照できる必要があります。
- Copy2Public による転送機能とは併用できません。
検索機能を利用するための準備
検索機能はダイナミックパブリッシングを利用するため、ウェブサイト/ブログの設定でダイナミックパブリッシングを有効にする必要があります。
DynamicMTML Bootstrapper テンプレートの作成
検索機能を利用するウェブサイト/ブログで DynamicMTML Bootstrapper という名前のインデックス・テンプレートを作成します。出力ファイル名は「.mtview.php」、公開の設定を「スタティック(既定)」にしてください。
※ このテンプレートは PowerCMS で提供されるテーマを適用することで自動的に生成されます。
検索結果テンプレートの作成
検索機能を利用するウェブサイト/ブログで「検索結果」のためのインデックス・テンプレートを作成します。それぞれ出力ファイル名は dynamic/search.html
としてください。この2つのテンプレートについては公開の設定を「ダイナミック」にしてください。
※ これらのテンプレートは PowerCMS で提供されるテーマを適用することでインストールされます。
※ 出力ファイル名を他の名前に変更することも可能です。その場合、DynamicMTML Bootstrapper 及びプラグインの設定を変更する必要がありますので、特にファイル名を指定する理由がない場合は dynamic/search.html
としてください。
検索クエリー
PowerCMS のダイナミック検索では、特定のカテゴリに属するコンテンツを対象とした検索や、フィールドによる検索結果の表示順指定が可能です。検索クエリに指定できるパラメータは search.html, feed.xml 共に同じです。
パラメータ |
解説 |
blog_id |
検索対象とするブログの ID を指定します。blog_id を指定しなかった場合すべてのブログを対象に検索を行います(複数のブログを明示的に指定することはできません)。 |
include_blogs |
検索対象とするブログの ID をカンマ区切りで指定します。all を指定するとすべてのブログを検索対象にします。複数の値をチェックボックス等で指定する場合は name 属性に「include_blogs[]」と指定します。 |
exclude_blogs |
検索対象から除外するブログの ID をカンマ区切りで指定します。 include_blogs 属性と同様の方法で複数指定が可能です。 |
category |
検索対象とするカテゴリの ID を指定します。 |
categories |
複数カテゴリを指定する場合にカテゴリの ID を渡します。categories[]=1&categories[]=2&categories[]=3 のように配列で渡すか categories=1,2,3 のようにカンマで区切って渡します。 |
categories_and_or |
「and」を渡せば、categories パラメータにカテゴリの ID が複数渡されたときにカテゴリの AND 検索になります。「or」を渡すか、何も渡さなければ OR 検索になります。 |
tag |
tag=1とした場合、タグ検索となります。 |
sort_order |
検索結果の表示順を指定します。ascend (昇順)、descend (降順 - デフォルト) が指定できます。 |
sort_by |
検索結果の表示順を何をキーにしてソートするかを指定します。authored_on または created_on (作成日)、modified_on (更新日)、title (タイトル)、 text (本文)、text_more (追記)、excerpt (概要)、keywords (キーワード)、author_id (投稿者 ID) が指定できます。 |
省略した場合、 authored_on (作成日) をキーとしてソートします。 |
offset |
検索結果の先頭を n 番目にするかを指定します。省略した場合、1件目から表示します。 |
limit |
検索結果を offset で指定した件数分表示します。省略した場合、各ブログのプラグイン設定で指定した数値分表示します。 |
date |
日付を指定して絞り込みを行う場合に対象とするフィールドを指定します。 authored_on, created_on (作成日)、 modified_on (更新日) が指定できます。 |
from |
日付を指定して絞り込みを行う場合に、開始日を yyyy-mm-dd 形式で指定します。 |
to |
日付を指定して絞り込みを行う場合に、終了日を yyyy-mm-dd 形式で指定します。 |
from_y, from_m,from_d |
年月日をそれぞれ指定して日付の絞り込みを行う場合に、開始年,月,日をそれぞれ yyyy,mm,dd 形式で指定します。 |
to_y, to_m,to_d |
年月日をそれぞれ指定して日付の絞り込みを行う場合に、終了年,月,日をそれぞれ yyyy,mm,dd 形式で指定します。 |
class |
「記事」「ウェブページ」を指定して検索を行う場合に「entry」または「page」を指定します。 |
and_or |
キーワード欄に入力されたキーワードを、AND 条件で検索するか OR 条件で検索するかを指定します。or を指定すれば OR 条件に、and または特に指定がなければ AND 条件で検索されます。また、OR 条件で検索される場合、キーワードはスペースで区切られて認識されます。 |
検索キャッシュ
PowerCMS のダイナミック検索は、高速化とサーバー負荷軽減のためのファイルキャッシュ機能を備えています。検索結果は自動的にキャッシュされ、同一条件による次回以降の検索を高速にします。
キャッシュを有効にするためには powercms_files/cache ディレクトリにウェブサーバーから書き込み可能なパーミッションを設定する必要があります。
キャッシュを有効にするには
ウェブサイト/ブログの「設定」メニュー内「全般」から、「ビルド結果をキャッシュする」にチェックすることで有効になります (この設定を変更した場合、再構築が必要です)。
キャッシュをクリアするには
検索キャッシュは当該のテンプレートが更新された時に自動的に削除されます。明示的にキャッシュをクリアするにはウェブサイト/ブログのテンプレート一覧画面右、ショートカットから「ダイナミックキャッシュのクリア」を選択して実行してください。
キャッシュの有効期限を変更するには
キャッシュの有効期限は、ウェブサイト/ブログの「設定」メニュー内「全般」から、「ビルド結果のキャッシュ有効期限(秒)」に設定することができます (この設定を変更した場合、再構築が必要です)。
PHP へのメモリ割当について
PowerCMS のダイナミック検索でメモリ不足によるエラーが起きる場合は、PHP に対するメモリの割り当てを見直すことをお勧めします。php.ini の memory_limit の項をご確認ください。検索関連のテンプレート・タグ
AltSearch プラグインで利用できるテンプレートタグ
MTAltSearchPath, MTAltSearchFeedPath, MTAltSearchLimit 以外のテンプレート・タグはダイナミックパブリッシング専用です。これら3つの項目はウェブサイト/ブログのプラグインの設定で指定できます。
ブロックタグ
- MTAltSearchResults
-
検索結果をループ出力します。MTAltSearchResults 内では、ブロックタグ MTEntries の中で利用できるファンクションタグがそのまま使えます。
- MTYears
-
ブログに登録されている最も古い記事/ウェブページの公開日 (authored_on) から最も新しい記事/ウェブページの公開日を含む年をループで出力します。このタグとファンクションタグ「MTYear」を利用することで、記事/ウェブページの日付範囲指定をする時の年指定が可能です。このタグにモディファイア「select_name」として「from_y」または「to_y」を指定することで、ブロックタグ「MTIfCurrentYear」の内容を処理するかどうかが変わります。
- MTIfCurrentYear
-
<select name="from_y">としたループの中では、MTYear の値が最も古い記事/ウェブページの公開日の年と一致するときにタグの内容を処理し、<select name="to_y"> としたループの中では、MTYear の値が最も新しい記事/ウェブページの公開日の年と一致するときにタグの内容を処理します。
日付の範囲指定をする場合の典型的な開始年を指定するドロップダウンメニューを作成するテンプレート・タグは以下のようになります。
<select name="from_y">
<MTYears select_name="from_y">
<option value="<$MTYear$>"<MTIfCurrentYear> selected="selected"</MTIfCurrentYear>><$MTYear$></option>
</MTYears>
</select>
- MTAltSearchMetadatas
-
検索結果に関するヒット件数やページ送りのための情報等をループ出力します。
- MTIfAltSearchMetaDatasHeader
-
MTAltSearchMetadatas ループの最初のループ実行時にタグの内容を処理します。
- MTIfAltSearchMetaDatasFooter
-
MTAltSearchMetadatas ループの最後のループ実行時にタグの内容を処理します。
- MTIfAltSearchResultCurrent
-
ページ送りが有効な場合、ループの回数が現在表示しているページと一致する場合にタグの内容を処理します。
ページ送りの中で現在のページのリンクを外した例
- MTAltSearchPageCounter
-
MTAltSearchMetadatas ループの中で利用します。ページ送りの番号を数字で出力します。
- MTIfAltSearchResultPrev
-
MTAltSearchMetadatas ループの中で利用します。ページ送りの際に、ひとつ前の検索結果ページが存在する場合にタグの内容を処理します。
- MTIfAltSearchResultNext
-
MTAltSearchMetadatas ループの中で利用します。ページ送りの際に、ひとつ次の検索結果ページが存在する場合にタグの内容を処理します。
- MTIfAltSearchQuery
-
検索語 (query) に何らかの文字列が指定されている場合にタグの内容を処理します。
- MTIfAltSearchModeIsCategory
-
カテゴリ (category パラメータ) が指定されている場合にタグの内容を処理します。
- MTIfAltSearchModeIsTag
-
タグ (tag パラメータ) が1 (tag=1) の場合にタグの内容を処理します。
- MTIfAltSearchDate
-
検索条件に日付の範囲が指定されている場合にタグの内容を処理します。
- MTIfAltSearchSort_by
-
ソート順 (sort_by パラメータ) が指定されている場合にタグの内容を処理します。
- MTIfAltSearchSort_order
-
ソート順 (sort_order パラメータ) が指定されている場合にタグの内容を処理します。
- MTIfAltSearchMatchQuery
-
検索語 (query パラメータ) が value モディファイアの値と部分一致する場合にタグの内容を処理します。
例:特定のクエリーに対して特定の内容を出力する例
<MTIfAltSearchMatchQuery value="PCMS">
もしかして PowerCMS?
</MTIfAltSearchMatchQuery>
- MTIfAltSearchCurrentCategory
-
カテゴリ (category パラメータ) が指定されている場合に、MTCategories ループ等の中でカテゴリの ID が検索対象のカテゴリ ID と一致する時にタグの内容を処理します。
- MTIfAltSearchNoneMatch
-
MTAltSearchMetadatas ループの中で利用します。検索リクエストにマッチするものが何もなかった場合にタグの内容を処理します。
- MTIfAltSearchParam
-
URL 文字列の中で name モディファイアのパラメータに指定されている値が value モディファイアの値と一致する場合タグの内容を処理します。
<MTIfAltSearchParam name="sort_by" value="modified_on">更新日</MTIfAltSearchParam>順に検索しました。
name モディファイアで指定したパラメータに渡された値を like、eq、ne、lt、gt、le、ge モディファイアの値と比較することができます。
- like モディファイア (like モディファイアの値を正規表現として扱い、それにマッチするときに真を返します)
- eq モディファイア (eq モディファイアの値に一致するときに真を返します)
- ne モディファイアを記述した場合 (ne モディファイアの値に一致しないときに真を返します)
- lt モディファイア (lt モディファイアの値よりも小さいときに真を返します)
- gt モディファイア (gt モディファイアの値よりも大きいときに真を返します)
- le モディファイア (le モディファイアの値のときに真を返します)
- ge モディファイア (ge モディファイアの値のときに真を返します)
<MTIfAltSearchParam name="sort_by" eq="modified_on">更新日</MTIfAltSearchParam>順に検索しました。
<MTIfAltSearchParam name="query" like="/p(:?ower)?cms/i"><a href="https://www.powercms.jp/">PowerCMS のウェブサイト</a>もご覧ください。</MTIfAltSearchParam>
正規表現の修飾子として s と i が使用できます。修飾子を用いない場合、デリミタ “/” は省略できます。
パラメータに複数の値が渡されている場合は、
- いずれかの値が like モディファイアの値にマッチするとき
- いずれかの値が eq モディファイアの値に一致するとき
- いずれの値も ne モディファイアの値に一致しないとき
- いずれかの値が lt モディファイアの値よりも小さいとき
- いずれかの値が gt モディファイアの値よりも大きいとき
- いずれかの値が le モディファイアの値以下のとき
- いずれかの値が ge モディファイアの値以上のとき
にタグの内容を処理します。例えば次のように書いた場合、include_blogs のいずれかの値に「2,3」が含まれているとタグの内容を処理します。
<MTIfAltSearchParam name="include_blogs" like="(^|,)2,3(,|$)">...</MTIfAltSearchParam>
- MTIfAltSearchDate
-
検索条件に日付の絞り込みが指定されている場合にタグの内容を処理します。
- MTIfAltSearchFrom
-
検索条件に日付の絞り込みが指定されている場合、開始日 (from) が指定されている場合にタグの内容を処理します。
- MTIfAltSearchTo
-
検索条件に日付の絞り込みが指定されている場合、終了日 (to) が指定されている場合にタグの内容を処理します。
- MTIfAltSearchAnd_or
-
検索条件に AND 条件または OR 条件が (and_or) 指定されている場合にタグの内容を処理します。
- MTIfAltSearchModeIsCategories
-
categories パラメータに値が渡されていたらタグの内容を処理します。
- MTIfAltSearchCurrentCategories
-
MTCategories ループ等の中でコンテキストに設定されているカテゴリの ID が、categories パラメータに渡されている値の中にあればタグの内容を処理します。
- MTIfAltSearchCategories_and_or
-
categories_and_or パラメータに「and」か「or」が渡されていればタグの内容を処理します。
ファンクションタグ
- MTAltSearchCurrent
-
MTAltSearchMetadatas ループの中で利用します。ページ送りの中で現在のページが何ページ目にあたるか(数値)を出力します。
- MTAltSearchMatch
-
MTAltSearchMetadatas ループの中で利用します。検索条件にマッチした記事/ウェブページのトータル件数(数値)を出力します。
- MTAltSearchPrev
-
MTAltSearchMetadatas ループの中で利用します。ページ送りの中で「ひとつ前」のページの offset 値(数値)を出力します。
- MTAltSearchNext
-
MTAltSearchMetadatas ループの中で利用します。ページ送りの中で「ひとつ次」のページの offset 値(数値)を出力します。
- MTAltSearchPages
-
MTAltSearchMetadatas ループの中で利用します。検索結果が(現在の offset, limit 設定の場合)全部で何ページあるか(数値)を出力します。
- MTAltSearchLast
-
MTAltSearchMetadatas ループの中で利用します。現在のページで表示されている最後の項目がトータルでマッチした何件目にあたるか(数値)を出力します。
- MTAltSearchResultNumber
-
MTAltSearchResults ループの中で利用します。MTAltSearchResults ループの何番目を実行しているか(数値)を出力します。
- MTAltSearchQuery
-
検索語を HTML エスケープして出力します。モディファイア pass=”1” を指定することで、HTML エスケープを無効にできます。
例: 検索結果に関する情報の出力例
<p>キーワード「<$MTAltSearchQuery$>」にマッチする <$MTAltSearchMatch$> 件の記事/ウェブページが見つかりました。</p>
<p> (うち <$MTAltSearchOffset$> 件から <$MTAltSearchLast$> 件を表示しています)</p>
<p>現在のページ : <$MTAltSearchCurrent$> / <$MTAltSearchPages$>ページ</p>
- MTAltSearchParam
-
name モディファイアで指定したパラメータに渡された値を HTML エスケープして出力します。モディファイア pass=”1” を指定することで、HTML エスケープを無効にできます。
- MTAltSearchResultOffset
-
MTAltSearchMetadatas ループの中で利用します。ページ送りのn番目のページの offset 値(現在の offset, limit 設定の場合)を出力します。
- MTAltSearchCategoryLabel
-
検索条件にカテゴリ (category パラメータ) が指定されている場合、検索条件で指定されたカテゴリ名を出力します。
- MTAltSearchCategoryId
-
検索条件にカテゴリ (category パラメータ) が指定されている場合、検索条件で指定されたカテゴリ ID を出力します。
- MTAltSearchBlogId
-
ウェブサイト/ブログ ID (blog_id パラメータ) が指定されている場合に、ウェブサイト/ブログの ID を出力します。
- MTAltSearchSort_by
-
検索条件にソート条件 (フィールド名 = sort_by パラメータ) が指定されている場合、検索条件で指定されたソート条件 (フィールド名) を出力します。
- MTAltSearchSort_order
-
検索条件にソート条件 (昇順|降順 = sort_order パラメータ) が指定されている場合、検索条件で指定されたソート条件 (ascend|descend) を出力します。
- MTAltSearchPath
-
検索結果テンプレートの出力ファイル名 (デフォルトでは dynamic/search.html, ウェブサイト/ブログの AltSearch プラグイン設定で指定できます) を出力します。
- MTAltSearchAnd_or
-
検索条件に AND/OR 条件が and または or で指定されている場合、その内容を出力します。
- MTAltSearchCategoryIDs
-
categories パラメータに渡されたカテゴリの ID をカンマで連結して返します。glue モディファイアで連結文字を任意に変えることができます。
- MTAltSearchCategories_and_or
-
categories_and_or パラメータに「and」か「or」が渡されていた場合、その値を返します。
- MTAltSearchFeedPath
-
検索フィードテンプレートの出力ファイル名 (デフォルトではdynamic/feed.xml, 各ブログの AltSearch プラグイン設定で指定できます) を出力します。
- MTAltSearchLimit
-
デフォルトの検索結果件数 (limit 値=各ブログの AltSearch プラグイン設定で指定できます) を出力します。
- MTAltSearchOffset
-
検索条件に検索結果の表示開始件数 (offset パラメータ) が指定されている場合、表示開始件数 (offset) を出力します。
- MTAltSearchDate
-
検索条件に日付の絞り込みが指定されている場合、対象となるフィールド名 (authored_on または created_on、modified_on) を出力します。
- MTAltSearchFrom
-
検索条件に日付の絞り込みが指定されている場合、開始日を yyyy-mm-dd 形式で出力します。
- MTAltSearchTo
-
検索条件に日付の絞り込みが指定されている場合、終了日を yyyy-mm-dd 形式で出力します。
- MTAltSearchResultPermalink
-
検索結果が「記事」や「ウェブページ」であるかどうかに関わらず、ページへのパーマリンクを出力します。
- MTYear
-
MTYears ループの中で各年を YYYY 形式で出力します。
モディファイア
- hilight
- 検索結果表示文字列中の検索語をハイライト (strong タグでマークアップ) します。
- remove_js
- HTML の script タグを消去します。