Liquid Snippets by ALSEL
🔍 コレクション/検索中級

サイドバー検索モーダル

画面右側からスライドインする検索パネル。商品・コレクション・ブログ記事・ページを対象とした予測検索(オートコンプリート)に対応し、管理画面の設定で検索対象を切り替えられる。

用途
ストアのヘッダーに検索ボタンを配置し、クリックで右側からこのモーダルを展開。ユーザーが入力開始と同時に関連商品やページが候補として出現する検索体験を実装する。
設置場所
snippets/offcanvas-search.liquid に配置し、theme.liquid のヘッダー内、または header セクションから `{% render 'offcanvas-search' %}` で呼び出す。管理画面の「テーマ設定」で search_collections、search_articles、search_pages の有効化を確認しておく。
注意点
予測検索はカスタム JavaScript(predictive-search コンポーネント)に依存するため、別途 assets 内にそのスクリプトが必須。管理画面で「検索を有効にする」がオンになっていないと検索結果が表示されないため、Settings > Searchboard を確認する。RTL 言語対応の判定に `request.locale.iso_code` を使っているので、多言語ストアの場合は言語コード値を検証しておく。
タグ:searchpredictive-searchmodalheaderoffcanvasjs-component

コード

72 行 / liquid
{% liquid
  assign resources_type = 'query,product'
  
  if settings.search_collections
    assign resources_type = resources_type | append: ',collection'
  endif
  if settings.search_articles
    assign resources_type = resources_type | append: ',article'
  endif
  if settings.search_pages
    assign resources_type = resources_type | append: ',page'
  endif
%}

<div
  id="offcanvas-search"
  class="offcanvas-search offcanvas offcanvas-end" 
  tabindex="-1" 
  aria-labelledby="offcanvas-search-label">
  <predictive-search 
    class="predictive-search"
    data-img-orientation="{{ settings.product_img_orientation }}"
    data-img-border="{{ settings.product_img_border }}"
    data-show-quick-view="{{ settings.search_show_quick_view }}"
    data-quick-view-btn-color="{{ settings.search_quick_view_btn_color }}"
    data-resources-type="{{ resources_type }}">
    <div class="offcanvas-header">
      <h2 id="offcanvas-search-label" class="offcanvas-title">
        {{ 'general.search.title' | t }}
      </h2>
      <button class="btn-close" type="button" data-bs-dismiss="offcanvas" aria-label="{{ 'general.accessibility.close' | t }}">
        {% render 'svg-icons', icon: 'x' %}
      </button>
    </div> 
    <div class="offcanvas-body">
      <form action="{{ routes.search_url }}" class="search-form mb-6" method="get" role="search">
        <input name="options[prefix]" type="hidden" value="last">
        <div class="form-control-wrapper">
          <input
            class="form-control"
            type="search"
            name="q"
            value="{{ search.terms | escape }}"
            role="combobox"
            aria-expanded="false"
            aria-owns="predictive-search-results"
            aria-controls="predictive-search-results"
            aria-haspopup="listbox"
            aria-autocomplete="list"
            aria-label="{{ 'general.search.input_label' | t }}"
            placeholder="{{ 'general.search.input_label' | t }}"
            autocorrect="off" 
            autocomplete="off" 
            autocapitalize="off"
            spellcheck="false">
          <button type="submit" class="btn btn-link" aria-label="{{ 'general.search.btn_label' | t }}">
            {% render 'svg-icons', icon: 'search', size: 20, class: '' %}
          </button>
        </div>
        <div id="predictive-search" tabindex="-1"></div>
        <span id="predictive-search-status" class="visually-hidden" role="status"></span>
      </form>
      <div class="search-empty pt-4 pb-11 text-center" {% if settings.rtl_langs contains request.locale.iso_code %}hidden{% endif %}>
        {{ 'general.search.empty_html' | t }} 
        <button class="btn btn-outline-primary" type="button" data-bs-dismiss="offcanvas">
          {{ 'general.search.continue_shopping' | t }}
        </button>
      </div>
    </div>
  </predictive-search>
</div>

出典・ライセンス

License:
MIT

このコードは kondasoft 著作の MIT ライセンスソースです。 原本の著作権は kondasoft が保有します。日本語訳は ALSEL によるものです。

関連項目

🔍 コレクション/検索初級

ページネーションの表示

ページネーションUI(前へ・次へ、ページ番号)を paginate オブジェクトから描画するスニペット。デフォルトのページネーション形式で複数ページに分割したコンテンツをナビゲートできる。

📁 shopify-code-snippets·MIT·6
🔍 コレクション/検索初級

ページネーションの現在位置表示

コレクションや検索結果の一覧ページで、現在のページ番号と全ページ数を表示する。Shopify の多言語対応翻訳キーを使用して、言語ごとに自動で表記を切り替える。

📁 shopify-code-snippets·MIT·6
🔍 コレクション/検索中級

検索結果のペジネーション比較

検索結果を paginate タグで複数パターン分割して表示するテンプレート。デフォルトペジネーションと window_size:1 オプション指定の両方の書き方を示しており、ページネーション動作の違いを検証するサンプルコード。

📁 theme-tools·MIT·12
🔍 コレクション/検索初級

検索結果のページネーション設定

検索結果を paginate タグでページ分割し、複数の window_size 設定を並べて出力する方法。28件単位のペーグネーションと、ウィンドウサイズを明示的に指定した設定の2パターンを示している。

📁 theme-tools·MIT·12
🔍 コレクション/検索初級

コレクションページの商品ギャラリー

コレクション内の商品を3列のテーブルレイアウトで表示するテンプレート。各商品にサムネイル、タイトル、価格(セール時は定価を取消線)を表示し、ページネーションに対応する。

📁 liquid·MIT·20
🔍 コレクション/検索初級

コレクションページの商品一覧

コレクション内の商品を一覧表示し、商品画像・タイトル・説明文・価格帯をカード状に並べる。ページネーション機能で20件ごとに分割表示する。

📁 liquid·MIT·23