ダイナミック・パブリッシングを利用して、データベース内をキーワード等で検索するテンプレートを作成できます。ウェブサイト内検索を動作させるためには、パラメタ付きリクエストをダイナミック・パブリッシングの対象にしておく必要があります。
* .htaccessなどが適切に設定されている時、静的ページにパラメタ付きリクエストを送ってウェブサイト内検索とすることも可能です。
デバッグモードを有効にすると、管理画面の下部に発行しているSQL文やリクエストパラメタなどが表示されます。デバッグモードを有効にするには、config.jsonのconfig_settingsに以下の記述を追加します。
"debug" : true,
「ページ」モデルの一覧画面に移動します。画面上部の「フィルタ」をクリックして、条件を指定します。以下の例では「タイトル」「本文」に「テーマ」という文字列を含むページを検索するフィルタを作成しています。
フィルタを実行すると、以下の画像のようにページ下部に「Query Parameters」が表示されます。
このうち、_filter_idを除く、「_filter」から始まるパラメタを&で繋ぎます。
_filter=page&_filter_value_title[]=テーマ&_filter_cond_title[]=ct&_filter_value_text[]=テーマ&_filter_cond_text[]=ct
これが、そのまま一覧ページに渡す検索条件のパラメタになります。以下が実際のこのサイト内のドキュメントを当該条件で検索した結果となります。
各パラメタの役割は以下の通りです。
パラメタ | 説明・値 |
---|---|
_filter | 検索するモデル名 |
_filter_value_[カラム名][] | 検索するカラムに対する検索文字列や数値を指定します。配列(末尾に[]を付与)として指定してください。複数の値が渡せます。 |
_filter_cond_[カラム名][] | 検索条件を指定します。ctはcontains(含む)となります。_filter_value_[カラム名][]に渡した値の数分指定の必要があります。 |
_filter_and_or_[カラム名] | 「AND」または「OR」を指定可能です。管理画面のフィルタは常にAND検索となりますが、代わりにORを指定すると、OR検索となります(配列ではなく、1つのみ指定できます)。 |
_filter_and_or | 複数のカラムを検索対象とするとき、AND検索かOR検索かを指定します(配列ではなく、1つのみ指定できます)。 |
パラメタ | 説明 |
---|---|
ct | Contains (含む) |
nc | Not Contains (含まない) |
gt | Greater Than (より大きい) |
lt | Less Than (より小さい) |
ge | Greater than or Equal (以上) |
le | Less than or Equal (以下) |
eq | Equal (等しい) |
ne | Not Equal (等しくない) |
bw | Begin with (から始まる) |
ew | End with (で終わる) |
デフォルトではAND検索となりますが、パラメタを追加することによってOR検索に変更できます。
_filter_and_or=OR
また、カラム毎のAND/OR指定は以下のようにして指定します。以下の例では「タイトル」をOR条件で検索する例です。
_filter_and_or_title=OR
テンプレート変数にマッチした件数やページネーションに利用可能な値が格納されます。また、offsetパラメタ、limitパラメタを追加することでスキップする件数や最大表示件数を指定することができます。詳細は「ページネーション」のページを参照してください。