a-blog cms カスタムフィールド検索でチェックボックスが空の場合に絞り込む

2022-06-06T07:33:23.849Z
a-blog cms

こんにちは田村です。
カスタムフィールド検索でチェックボックスが空の場合に絞り込みたい場合がありました。

「カスタムフィールドの検索とは?」という方はこの辺りを参考にするとよさそうです。
カスタムフィールドの検索
カスタムフィールドの値で検索する
カスタムフィールドを検索に入らないようにする

ざっくりと「カスタムフィールドの検索とは?」
Field_Searchモジュール + URLコンテキストを利用して表示したい要素を変えると言う感じですね。

では、カスタムフィールドが空の場合どのように検索すると良いでしょうか。

早速見てみましょう。

実装

カスタムフィールドが空の場合次のように演算子を利用します。

<option value="em"{カスタムフィールド名@operator:selected#em}>未チェック</option>


具体的にはmy_checkbox_fieldというカスタムフィールドだった場合、次のコードになります。

<option value="em"{my_checkbox_field@operator:selected#em}>未チェック</option>


URLコンテキストは次のようになります。
https://blog.masizime.com/search/field/my_checkbox_field/em/

このように演算子を利用することで「空の場合」を検索することが出来ます。
演算子はだいたいIFブロックと同じイメージでいいと思います。
また、公式ドキュメントとしてはカスタムフィールドの検索の「演算子部分の記述」のあたりを見ると良さそうです。

全体的なコードとしては次に形でしょうか。

<!-- BEGIN_MODULE Field_Search -->
	 <div>
		<select name="my_checkbox_field">
			<option value=""<!-- BEGIN_IF [{my_checkbox_field}/em] --> selected="selected"<!-- END_IF -->>選択なし</option>
			<option value="em"{my_checkbox_field@operator:selected#em}>未チェック</option>
			<option value="true"{my_checkbox_field:selected#true}>チェック済み</option>
		</select>
		<input type="hidden" name="field[]" value="my_checkbox_field">
		</div>
	<!-- END_MODULE Field_Search -->
							




もうすこし説明

カスタムフィールド検索で表示する場合次の3パターンが考えれられます。

1.「選択なし」 = 全てが表示されてる状態
2.「チェック済み」 = my_checkbox_field にチェックが入っている状態
3.「チェックなし」 = my_checkbox_fieldが空の場合

この場合、カスタムフィールド検索のURLコンテキストとしては次が想定できそうです。
1.「選択なし」 = https://blog.masizime.com/search/
2.「チェック済み」 = https://blog.masizime.com/search/field/my_checkbox_field/true/
3.「チェックなし」 = https://blog.masizime.com/search/field/my_checkbox_field//

カスタムフィールドは次のようにしてみましょう。

<option value=""{my_checkbox_field#}>未チェック</option>

しかし、「チェックなし」のURLは正しく表示することが出来ません。
https://blog.masizime.com/search/field/my_checkbox_field//

ここで空を意味する演算子emを利用してみましょう。valueに入れることで利用出来ます。

<option value="em">未チェック</option>これでカスタムフィールドが空のものが絞り込めました。

https://blog.masizime.com/search/field/my_checkbox_field/em/

ですが、まだ少し足りません。この状態だと画面がリロードしたらselectの値が「選択なし」に戻ってしまいます。

<option value="em"{my_checkbox_field@operator#em}>未チェック</option>

@operatorを利用します。これでリロードしても現在URLコンテキストが指定されているという状態を維持できます。

と言った形で空の場合も検索することがきました。
最後にもう一度全体的なコードですが次になります。

	<!-- BEGIN_MODULE Field_Search -->
	 <div>
		<select name="my_checkbox_field">
			<option value=""<!-- BEGIN_IF [{my_checkbox_field}/em] --> selected="selected"<!-- END_IF -->>選択なし</option>
			<option value="em"{my_checkbox_field@operator:selected#em}>未チェック</option>
			<option value="true"{my_checkbox_field:selected#true}>チェック済み</option>
		</select>
		<input type="hidden" name="field[]" value="my_checkbox_field">
		</div>
	<!-- END_MODULE Field_Search -->
							



以上
a-blog cms カスタムフィールド検索でチェックボックスが空の場合に絞り込むでした。