a-blog cmsでカスタムフィールド検索を「部分一致」にする

以前のブログはこちら

広告

こんにちは。ましじめの田村です。

私が執筆した著書、『現場のプロから学ぶ CSSコーディングバイブル』は、Web制作の現場で役立つテクニックやノウハウをまとめています。
興味を持っていただけた方は、ぜひご覧ください。
https://amzn.to/3A8kNHC

このリンクは Amazon のアフィリエイトプログラムを通じて設定されています。

こんにちは。田村です。

a-blog cmsのカスタムフィールド検索ですが、通常は「完全一致」です。

カスタムフィールドがテキストフィールドのような文字列の場合、「部分一致」にしたい場合ありませんか?

今回は「部分一致」してみたいと思います。
説明は下記に続きますが、先に肝となるコードはこちらです。

<input type="hidden" name="フィールド名@operator" value="lk" >

また、カスタムフィールド検索は「Field_SearchモジュールとURLコンテキスト」を使います。この辺り目を通してもらうと良いかもです。



仕様

ここでは4つのエントリーがあり、それぞれエントリーには「場所:place」という1行テキストのカスタムフィールドがあるとします。

エントリー1
タイトル:事務所
場所:福岡県北九州市小倉北区
エントリー2
タイトル:百貨店
場所:福岡県北九州市小倉北区
エントリー3
タイトル:学校
場所:福岡県北九州市小倉南区
エントリー4
タイトル:病院
場所:福岡県福岡市中央区

ここから「北九州市」という文字が含まれるエントリーを絞り込みたいとします。
結果は3件のエントリーが表示されて欲しいです。



解説

まずは完全一致から

<!-- BEGIN_MODULE Field_Search -->
 <div>
  <div>
    <p>場所</p>
     <input type="text" name="place" value="{place}">
     <input type="hidden" name="field[]" value="place">
   </div>

 <input type="hidden" name="cid" value="%{CID}" >
 <input type="hidden" name="bid" value="%{BID}">
 <button type="submit" name="ACMS_POST_2GET">検索する</button>
</div>


<!-- END_MODULE Field_Search -->

ここで「北九州市」と入力するとどうでしょう。検索結果は0件となりました。
求めている結果は3件です。これは違いますね。

「北九州市」と入力した場合のURLコンテキスト:検索結果0件

/field/place/北九州市/

では完全一致なのか、試しに「福岡県北九州市小倉北区」と入力すると「エントリー1、エントリー2」が絞り込まれます。
完全一致ではあますが、今回求めていたものとは違います。次を見てみましょう。

「福岡県北九州市小倉北区」と入力した場合のURLコンテキスト:検索結果2件

/field/place/福岡県北九州市小倉北区/

部分一致

<!-- BEGIN_MODULE Field_Search -->
 <div>
  <div>
    <p>場所</p>
     <input type="text" name="place" value="{place}">
     <input type="hidden" name="field[]" value="place">
     <input type="hidden" name="place@operator" value="lk" > ←これ
   </div>

 <input type="hidden" name="cid" value="%{CID}" >
 <input type="hidden" name="bid" value="%{BID}">
 <button type="submit" name="ACMS_POST_2GET">検索する</button>
</div>


<!-- END_MODULE Field_Search -->

先ほどとの変更箇所は、{place}に次の一文をを追加しています。

<input type="hidden" name="place@operator" value="lk" >

ここで「北九州市」と入力するとどうでしょう。検索結果は3件となります。
求めていた結果になりました。

「北九州市」と入力した場合のURLコンテキスト:検索結果3件

/field/place/lk/北九州市/

URLがどうなっているかみてください。「lk」が入っていますね。
@operatorを使用すると演算子検索ができるようになります。
演算子はIFブロックで使うeqとかです。あれをURLで使う感じです。

「lk演算子」は「含まれる」という意味ですので該当のカスタムフィールドに「北九州市」が含まれていれるエントリーが合致します。

URLコンテキストを日本語にするとこういう感じでしょうか。

/カスタムフィールド/場所/含まれていれば/北九州市/

といった感じで検索に他の演算子も利用することもできます。
「Field_SearchモジュールとURLコンテキスト」を利用すれば、カスタマイズの幅が広がりますね。

ではまた!



関連するタグ

この記事を書いた人

たむら しょうご

HTML&CSSコーダー

ウェブアクセシビリティ対応、フロントエンド開発、CMSを利用したウェブサイト制作を担当しています。
趣味はガーデニングです。

ましじめのスキルが必要ですか?

遠慮なくご相談ください。我々はあなたのプロジェクトに最善を尽くし、あなたのウェブサイトの制作を強力にサポートいたします。

お問い合わせはこちらから