🔍 コレクション/検索中級
検索結果ページのレイアウト
検索キーワード入力フォームと検索結果の商品一覧を表示するセクション。検索実施時の結果数表示、ページネーション、レスポンシブグリッドレイアウトに対応する。
用途
search テンプレートに配置して、ストアの検索ページ全体を構成する。モバイル・タブレット・デスクトップで表示列数を自動調整できる。
設置場所
sections/search-main.liquid に配置し、templates/search.liquid で `{% section 'search-main' %}` で呼び出す。
注意点
検索フォームの `name="type" value="product"` は商品のみの絞込なので、ブログ記事やページも検索対象にしたい場合は該当行を削除する。ページネーションが機能するには snippet/pagination.liquid が存在している必要がある。テーマカスタマイザーの「ブレークポイント」設定値(モバイル・タブレット・デスクトップ)は実装の Bootstrap クラス名(row-cols-*)と連動しているため、別のグリッドシステムを使う場合は class 属性の prepend 部分を書き換える。
コード
178 行 / liquid<section
id="search-main-{{ collection.id }}"
class="
search-main
{{ section.settings.pt | prepend: 'pt-' }}
{{ section.settings.pb | prepend: 'pb-' }}
">
<header class="section-header text-center mb-9">
<div
class="container"
style="max-width: 600px;">
<h1 class="title mb-4 {{ section.settings.header_title_font_size }}">
{% if search.performed %}
{{ 'general.search.search_page.title_search_performed' | t }}
{% else %}
{{ 'general.search.search_page.title' | t }}
{% endif %}
</h1>
<form action="{{ routes.search_url }}" class="search-form" method="get" role="search">
<input name="options[prefix]" type="hidden" value="last">
<input type="hidden" name="type" value="product">
<div class="form-control-wrapper">
<div class="form-floating">
<input
id="search-input"
class="form-control pe-13"
type="search"
placeholder="{{ 'general.search.input_label' | t }}"
name="q"
value="{{ search.terms | escape }}"
autocorrect="off"
autocomplete="off"
autocapitalize="off"
spellcheck="false">
<label for="newsletter-input-email">
{{ 'general.search.input_label' | t }}
</label>
</div>
<button type="submit" class="btn btn-link px-6" aria-label="{{ 'general.search.btn_label' | t }}">
{% render 'svg-icons', icon: 'search', size: 24, class: '' %}
</button>
</div>
</form>
</div>
</header>
{% if search.performed %}
{% paginate search.results by section.settings.limit %}
<div class="search-inner">
<div class="container">
<div class="search-utilities mb-4">
<p class="search-product-count small mb-0">
{{ 'general.search.search_page.count_products' | t: count: search.results_count }}
</p>
</div>
{% if search.results_count == 0 %}
<p class="alert alert-warning my-6">
{{ 'general.search.search_page.no_results' | t: terms: search.terms }}
</p>
{% else %}
{% if search.results.first.object_type == 'product' %}
<div
class="
product-list mx-n3 mx-desktop-n4 mb-0 row
{{ section.settings.breakpoint_mobile | prepend: 'row-cols-' }}
{{ section.settings.breakpoint_tablet | prepend: 'row-cols-tablet-' }}
{{ section.settings.breakpoint_desktop | prepend: 'row-cols-desktop-' }}
"
role="list">
{% for product in search.results %}
<div class="p-3 p-desktop-4 mb-3 mb-desktop-4" role="list-item">
{% render 'product-card', product: product %}
</div>
{% endfor %}
</div>
{% render 'pagination', paginate: paginate %}
{% endif %}
{% endif %}
</div>
</div>
{% endpaginate %}
{% endif %}
</section>
{% schema %}
{
"name": "Search",
"settings": [
{
"type": "header",
"content": "General"
},
{
"type": "select",
"id": "header_title_font_size",
"label": "Title font-size",
"default": "h1",
"options": [
{ "group": "Heading", "value": "h1", "label": "H1" },
{ "group": "Heading", "value": "h2", "label": "H2" },
{ "group": "Heading", "value": "h3", "label": "H3" },
{ "group": "Heading", "value": "h4", "label": "H4" },
{ "group": "Heading", "value": "h5", "label": "H5" },
{ "group": "Heading", "value": "h6", "label": "H6" }
]
},
{
"type": "range",
"id": "limit",
"label": "Limit products",
"min": 2,
"max": 50,
"default": 48,
"step": 1
},
{
"type": "header",
"content": "Breakpoints",
"info": "Adjust items per row based on the screen resolution"
},
{
"type": "range",
"id": "breakpoint_mobile",
"label": "Mobile (<600px)",
"min": 1,
"max": 3,
"step": 1,
"default": 2
},
{
"type": "range",
"id": "breakpoint_tablet",
"label": "Tablet (≥600px)",
"min": 1,
"max": 4,
"step": 1,
"default": 3
},
{
"type": "range",
"id": "breakpoint_desktop",
"label": "Desktop (≥1200px)",
"min": 1,
"max": 6,
"step": 1,
"default": 4
},
{
"type": "header",
"content": "Spacing"
},
{
"type": "range",
"id": "pt",
"label": "Top",
"min": 0,
"max": 20,
"step": 1,
"default": 9
},
{
"type": "range",
"id": "pb",
"label": "Bottom",
"min": 0,
"max": 20,
"step": 1,
"default": 9
}
],
"templates": ["search"],
"presets": [
{
"name": "Search"
}
]
}
{% endschema %}出典・ライセンス
- Repository:
- https://github.com/kondasoft/ks-bootshop
- 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 行