ホーム > サポート・マニュアル > チュートリアル > カスタムフィールド > カスタムフィールドをキーにしたエントリーの条件検索

チュートリアル

ここでは、カスタムフィールドで入力したデータをさまざまな条件で検索する方法を説明します。(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}>&lt;</option>
			<option value="lte"{price@operator:selected#lte}>&lt;=</option>
			<option value="gt"{price@operator:selected#gt}>&gt;</option>
			<option value="gte"{price@operator:selected#gte}>&gt;=</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}>&lt;</option>
			<option value="lte"{price@operator[0]:selected#lte}>&lt;=</option>
			<option value="gt"{price@operator[0]:selected#gt}>&gt;</option>
			<option value="gte"{price@operator[0]:selected#gte}>&gt;=</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}>&lt;</option>
			<option value="lte"{price@operator[1]:selected#lte}>&lt;=</option>
			<option value="gt"{price@operator[1]:selected#gt}>&gt;</option>
			<option value="gte"{price@operator[1]:selected#gte}>&gt;=</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" />


携帯アクセス解析