ホーム > サポート・マニュアル > チュートリアル > カスタムフィールド > カスタムフィールドをキーにしたエントリーの条件検索
ここでは、カスタムフィールドで入力したデータをさまざまな条件で検索する方法を説明します。(v1.3.0より)
検索とURLコンテキスト
a-blog cmsでは、いま表示しているページがWebサイトのどこにいるか、どのような状態であるかをURL上のパスとして表現しています。(これを「URLコンテキスト」といいます。)
フォームから検索して表示された検索結果のページも同様に、フォームから送信された条件の情報がURLコンテキストに表現されています。
そのため、任意の条件の検索結果を表示したい場合は、その条件の情報が表現されているURLコンテキストのパスに直接アクセスすれば、フォームで検索した検索結果と同様の表示が得られることになります。
例えば以下のURLは、
http://example.com/search/field/price/100/300/
「searchカテゴリーの、priceというフィールドの値が100または300」の情報を表示します。検索フォームで100または300と条件を指定してフォームで送信しなくても、直接上記のURLにアクセスすれば、条件に合った情報が表示されます。
これは、a-blog cmsがURLを「URLコンテキスト」として今いるページの場所や状態を表現しているためです。
カスタムフィールドの例
「price」というカスタムフィールドをエントリーフィールドとして /themes/適用するテーマ/admin/entry/edit.html に作成したとします。
以下のソースは、/themes/適用するテーマ/admin/entry/edit.html のカスタムフィールド部分です。
<table class="entryFormTable">
<tr>
<th>価格</th>
<td>
<input type="text" name="price" value="{price}" size="10" />
<input type="hidden" name="field[]" value="price" />
</td>
</tr>
</table>
このようなカスタムフィールドをキーにしてエントリーを検索したい場合、検索の条件指定は以下のA〜Gの7通りあります。
A 簡単な検索
合致する条件を一つ指定する検索です。指定した条件に合致するエントリーが表示されます。
URLコンテキストの例
- 「100」を指定した場合
- http://example.com/field/price/100/
<form action="" method="post">
<!-- 宣言 -->
<input type="hidden" name="field[]" value="price" />
<p>
価格
<label for="input-radio-price-100">
<input type="radio" name="price" value="100"{price:checked#100} id="input-radio-price-100" />100
</label>
<label for="input-radio-price-200">
<input type="radio" name="price" value="200"{price:checked#200} id="input-radio-price-200" />200
</label>
<label for="input-radio-price-300">
<input type="radio" name="price" value="300"{price:checked#300} id="input-radio-price-300" />300
</label>
</p>
<p>
<input type="hidden" name="cid" value="%{CID}" />
<input type="hidden" name="bid" value="%{BID}" />
<input type="submit" name="ACMS_POST_2GET" value="search" />
</p>
</form>
B 簡単な検索 [複数条件・or検索]
合致する条件を複数指定する検索です。指定した条件のいずれかに合致する(=or検索)エントリーが表示されます。
URLコンテキストの例
- 「100」と「200」を条件指定した場合(「100」または「200」)
- http://example.com/field/price/100/200/
<form action="" method="post">
<!-- 宣言 -->
<input type="hidden" name="field[]" value="price" />
<p>
価格
<label for="input-checkbox-price-100">
<input type="checkbox" name="price[]" value="100"{price:checked#100} id="input-checkbox-price-100" />100
</label>
<label for="input-checkbox-price-200">
<input type="checkbox" name="price[]" value="200"{price:checked#200} id="input-checkbox-price-200" />200
</label>
<label for="input-checkbox-price-300">
<input type="checkbox" name="price[]" value="300"{price:checked#300} id="input-checkbox-price-300" />300
</label>
</p>
<p>
<input type="hidden" name="cid" value="%{CID}" />
<input type="hidden" name="bid" value="%{BID}" />
<input type="submit" name="ACMS_POST_2GET" value="search" />
</p>
</form>
C 演算子検索
演算子で条件を指定する検索です。条件に合致するエントリーが表示されます。
URLコンテキストの例
- 「300以下」と条件指定した場合
- http://example.com/field/price/lte/300/
<form action="" method="post">
<!-- 宣言 -->
<input type="hidden" name="field[]" value="price" />
<!-- 演算子 -->
<input type="hidden" name="price@operator" value="lte" />
<p>
価格
<select name="price">
<option value="">上限なし</option>
<option value="300"{price:selected#300}>300円以下</option>
<option value="200"{price:selected#200}>200円以下</option>
<option value="100"{price:selected#100}>100円以下</option>
</select>
</p>
<p>
<input type="hidden" name="cid" value="%{CID}" />
<input type="hidden" name="bid" value="%{BID}" />
<input type="submit" name="ACMS_POST_2GET" value="search" />
</p>
</form>
演算子部分の記述
<input type="hidden" name="カスタムフィールド名@operator" value="演算子" />
name属性
カスタムフィールド名の後ろに「@operator」を記述します。
value属性
演算子を記述します。
| 演算子 | 条件 | 意味 |
|---|---|---|
| eq | = | 等しい |
| neq | != | 等しくない |
| gt | > | より大きい |
| gte | >= | 以上 |
| lt | < | より小さい |
| lte | <= | 以下 |
| lk | LIKE | 含まれる |
| nlk | NOT LIKE | 含まれない |
| re | REGEXP | 指定した正規表現に合致する |
| nre | NOT REGEXP | 指定した正規表現に合致しない |
| em | EMPTY | 値が空(何も入っていない) |
| nem | NOT EMPTY | 値が空(何も入っていない)ではない |
URLコンテキストの例
- 「テスト」を含む文字列と条件指定した場合
- http://example.com/search.html/field/カスタムフィールド名/lk/%25テスト%25/
D 演算子検索 [複数条件・and検索]
複数の演算子で条件を指定する検索です。すべての条件に合致する(=and検索)エントリーが表示されます。
URLコンテキストの例
- 「300以上」「100以下」と条件指定した場合(「300以上」かつ「100以下」)
- http://example.com/field/price/gte/300/lte/100/
<form action="" method="post">
<!-- 宣言 -->
<input type="hidden" name="field[]" value="price" />
<!-- 演算子 -->
<input type="hidden" name="price@operator[0]" value="gte" />
<input type="hidden" name="price@operator[1]" value="lte" />
<p>
価格
<select name="price[]">
<option value="">下限なし</option>
<option value="100"{price[0]:selected#100}>100円以上</option>
<option value="200"{price[0]:selected#200}>200円以上</option>
<option value="300"{price[0]:selected#300}>300円以上</option>
</select>
</p>
<p>
価格
<select name="price[]">
<option value="">上限なし</option>
<option value="300"{price[1]:selected#300}>300円以下</option>
<option value="200"{price[1]:selected#200}>200円以下</option>
<option value="100"{price[1]:selected#100}>100円以下</option>
</select>
</p>
<p>
<input type="hidden" name="cid" value="%{CID}" />
<input type="hidden" name="bid" value="%{BID}" />
<input type="submit" name="ACMS_POST_2GET" value="search" />
</p>
</form>
演算子部分の記述
条件の数だけinput要素を記述します。
<input type="hidden" name="カスタムフィールド名@operator[0]" value="演算子" /> <input type="hidden" name="カスタムフィールド名@operator[1]" value="演算子" />
name属性
「@operator」の後の[]の中に0からの通し番号を記述します。
value属性
演算子を記述します。(→演算子の種類は「3. 演算子検索」の項を参照)
E 演算子選択単数
条件の値を入力し、かつ演算子を指定する検索です。条件に合致するエントリーが表示されます。
URLコンテキストの例
- 「200ではない(!=)」と条件指定した場合
- http://example.com/field/price/neq/200/
<form action="" method="post">
<!-- 宣言 -->
<input type="hidden" name="field[]" value="price" />
<p>
価格
<select name="price@operator">
<option value="eq"{price@operator:selected#eq}>=</option>
<option value="neq"{price@operator:selected#neq}>!=</option>
<option value="lt"{price@operator:selected#lt}><</option>
<option value="lte"{price@operator:selected#lte}><=</option>
<option value="gt"{price@operator:selected#gt}>></option>
<option value="gte"{price@operator:selected#gte}>>=</option>
<option value="lk"{price@operator:selected#lk}>LIKE</option>
<option value="nlk"{price@operator:selected#nlk}>NOT LIKE</option>
<option value="re"{price@operator:selected#re}>REGEXP</option>
<option value="nre"{price@operator:selected#nre}>NOT REGEXP</option>
<option value="em"{price@operator:selected#em}>EMPTY</option>
<option value="nem"{price@operator:selected#nem}>NOT EMPTY</option>
</select>
<input type="text" name="price" value="{price}" size="10" />
円
</p>
<p>
<input type="hidden" name="cid" value="%{CID}" />
<input type="hidden" name="bid" value="%{BID}" />
<input type="submit" name="ACMS_POST_2GET" value="search" />
</p>
</form>
F 演算子、結合子選択 [複数条件]
条件の値を入力し、かつ演算子を指定する検索です。複数の条件をand検索かor検索で条件に合致するエントリーが表示されます。
URLコンテキストの例
- 「300以上」「または(or)」「150以下」と条件指定した場合
- http://example.com/field/price/gte/300/or/lte/150/
<form action="" method="post">
<!-- 宣言 -->
<input type="hidden" name="field[]" value="price" />
<input type="hidden" name="price[0]" />
<input type="hidden" name="price[1]" />
<input type="hidden" name="price@connector[0]" />
<input type="hidden" name="price@connector[1]" />
<input type="hidden" name="price@operator[0]" />
<input type="hidden" name="price@operator[1]" />
<p><!--
<label for="input-radio-price-connector-and-0">
<input type="radio" name="price@connector[0]" value="and"{price@connector[0]:checked#and} id="input-radio-price-connector-and-0" />and
</label>
<label for="input-radio-price-connector-or-0">
<input type="radio" name="price@connector[0]" value="or"{price@connector[0]:checked#or} id="input-radio-price-connector-or-0" />or
</label>-->
<br />
価格
<select name="price@operator[0]">
<option value="">選択しない</option>
<option value="eq"{price@operator[0]:selected#eq}>=</option>
<option value="neq"{price@operator[0]:selected#neq}>!=</option>
<option value="lt"{price@operator[0]:selected#lt}><</option>
<option value="lte"{price@operator[0]:selected#lte}><=</option>
<option value="gt"{price@operator[0]:selected#gt}>></option>
<option value="gte"{price@operator[0]:selected#gte}>>=</option>
<option value="lk"{price@operator[0]:selected#lk}>LIKE</option>
<option value="nlk"{price@operator[0]:selected#nlk}>NOT LIKE</option>
<option value="re"{price@operator[0]:selected#re}>REGEXP</option>
<option value="nre"{price@operator[0]:selected#nre}>NOT REGEXP</option>
<option value="em"{price@operator[0]:selected#em}>EMPTY</option>
<option value="nem"{price@operator[0]:selected#nem}>NOT EMPTY</option>
</select>
<input type="text" name="price[0]" value="{price[0]}" size="10" />
円
</p>
<p>
<label for="input-radio-price-connector-and-1">
<input type="radio" name="price@connector[1]" value="and"{price@connector[1]:checked#and} id="input-radio-price-connector-and-1" />and
</label>
<label for="input-radio-price-connector-or-1">
<input type="radio" name="price@connector[1]" value="or"{price@connector[1]:checked#or} id="input-radio-price-connector-or-1" />or
</label>
<br />
価格
<select name="price@operator[1]">
<option value="">選択しない</option>
<option value="eq"{price@operator[1]:selected#eq}>=</option>
<option value="neq"{price@operator[1]:selected#neq}>!=</option>
<option value="lt"{price@operator[1]:selected#lt}><</option>
<option value="lte"{price@operator[1]:selected#lte}><=</option>
<option value="gt"{price@operator[1]:selected#gt}>></option>
<option value="gte"{price@operator[1]:selected#gte}>>=</option>
<option value="lk"{price@operator[1]:selected#lk}>LIKE</option>
<option value="nlk"{price@operator[1]:selected#nlk}>NOT LIKE</option>
<option value="re"{price@operator[1]:selected#re}>REGEXP</option>
<option value="nre"{price@operator[1]:selected#nre}>NOT REGEXP</option>
<option value="em"{price@operator[1]:selected#em}>EMPTY</option>
<option value="nem"{price@operator[1]:selected#nem}>NOT EMPTY</option>
</select>
<input type="text" name="price[1]" value="{price[1]}" size="10" />
円
</p>
<p>
<input type="hidden" name="cid" value="%{CID}" />
<input type="hidden" name="bid" value="%{BID}" />
<input type="submit" name="ACMS_POST_2GET" value="search" />
</p>
</form>
G チェックボックスを使用した複数条件指定
チェックボックスで複数の条件指定する検索です。複数の条件をand検索かor検索で条件に合致するエントリーが表示されます。
URLコンテキストの例
- 「または(or)」で「100未満」「100」「空ではない」「300超」と条件指定した場合
- http://example.com/field/price/or/lt/100/100/or/nem//or/gt/300/
<form action="" method="post">
<p>
<!-- 宣言 -->
<input type="hidden" name="field[]" value="price" />
<input type="hidden" name="price[0]" />
<input type="hidden" name="price[1]" />
<input type="hidden" name="price[2]" />
<input type="hidden" name="price[3]" />
<input type="hidden" name="price[4]" />
<input type="hidden" name="price@operator[0]" />
<input type="hidden" name="price@operator[1]" />
<input type="hidden" name="price@operator[2]" />
<input type="hidden" name="price@operator[3]" />
<input type="hidden" name="price@operator[4]" />
<input type="hidden" name="price@connector[0]" />
<input type="hidden" name="price@connector[1]" />
<input type="hidden" name="price@connector[2]" />
<input type="hidden" name="price@connector[3]" />
<input type="hidden" name="price@connector[4]" />
<!-- 演算子 -->
<input type="hidden" name="price@operator[0]" value="lt" />
<input type="hidden" name="price@operator[1]" value="eq" />
<input type="hidden" name="price@operator[3]" value="eq" />
<input type="hidden" name="price@operator[4]" value="gt" />
<!-- 結合子 -->
<input type="hidden" name="price@connector" value="and" />
<!-- 値 -->
<label for="input-radio-price-connector-and">
<input type="radio" name="price@connector" value="and"{price@connector:checked#and} id="input-radio-price-connector-and" />and
</label>
<label for="input-radio-price-connector-or">
<input type="radio" name="price@connector" value="or"{price@connector:checked#or} id="input-radio-price-connector-or" />or
</label>
<br />
<label for="input-checkbox-price-0">
<input type="checkbox" name="price[0]" value="100"{price[0]:checked#100} id="input-checkbox-price-0" />100未満
</label>
<label for="input-checkbox-price-1">
<input type="checkbox" name="price[1]" value="100"{price[1]:checked#100} id="input-checkbox-price-1" />100
</label>
<label for="input-checkbox-price-2">
<input type="checkbox" name="price@operator[2]" value="nem" id="input-checkbox-price-2"{price@operator[2]:checked#nem} />空ではない
</label>
<label for="input-checkbox-price-3">
<input type="checkbox" name="price[3]" value="300"{price[3]:checked#300} id="input-checkbox-price-3" />300
</label>
<label for="input-checkbox-price-4">
<input type="checkbox" name="price[4]" value="300"{price[4]:checked#300} id="input-checkbox-price-4" />300超
</label>
</p>
<p>
<input type="hidden" name="cid" value="%{CID}" />
<input type="hidden" name="bid" value="%{BID}" />
<input type="submit" name="ACMS_POST_2GET" value="search" />
</p>
</form>
結合子について
チェックボックスの複数条件指定は、基本的に条件の数だけ結合子を指定する必要があります。
<input type="hidden" name="price@connector[0]" value="and" /> <input type="hidden" name="price@connector[1]" value="and" /> <input type="hidden" name="price@connector[2]" value="and" /> <input type="hidden" name="price@connector[3]" value="and" /> <input type="hidden" name="price@connector[4]" value="and" />
以下のように結合子を簡略化して記述することもできます。
<input type="hidden" name="price@connector" value="and" />
このドキュメントと関連している内容のエントリー
- 関連度 3 : カスタムフィールドをキーにしたエントリーの表示順設定
- 関連度 2 : カスタムフィールドの検索に複雑な条件を指定したい
- 関連度 1 : カスタムフィールドグループの追加時に必要な記述
- 関連度 1 : ユニットグループ機能を使ってレイアウトする
- 関連度 1 : ダイレクト編集機能を使った更新
ドキュメントの内容に関するお知らせフォーム
内容に誤り・現行バージョンと異なる部分がありましたら、下記のフォームよりお知らせください。



