Shopify 商品の表示件数案内 (全〇〇件中 1〜〇〇件)の作り方


Shopify 商品の表示件数案内 (全〇〇件中 1〜〇〇件)の作り方

今回案件の中で使うことのあった、ECサイトの商品一覧ページで見かける 全〇〇件中 1〜〇〇件 の作り方を紹介します。(上の画像みたいなやつ)
ページネーションと連動して今のページに表示されている商品件数を案内するものです。

 まずはコードから

全{{ paginate.items }}件中
{% assign page_count = paginate.page_size %} 
{% assign page_offset = paginate.current_offset | plus: 1 %}
{% if paginate.previous and paginate.next %}
  {%- comment -%} 前も次もある {%- endcomment -%}
  {{ page_offset }}〜{{ paginate.current_offset | plus: page_count }}

{% elsif paginate.next %}
  {%- comment -%} 次がある(一番最初) {%- endcomment -%}
  1〜{{ page_count }}

{% elsif paginate.previous %} 
  {%- comment -%} 前がある(一番最後){%- endcomment -%}
  {% if page_offset == paginate.items %}
    {%- comment -%} 一番最後が一件のみの時 {%- endcomment -%}
    〜{{ page_offset }}
  {% else %}
    {%- comment -%} 一番最後表示件数 {%- endcomment -%}
    {{ page_offset }}〜{{ paginate.items }}
  {% endif %}
{% else %}
  {%- comment -%} 最初のページで全てが表示される時 {%- endcomment -%}
  {{ paginate.items }}
{% endif %}
件

 オブジェクトの説明

 paginate.page_size 
 1ページに表示されるアイテムの数

 paginate.current_offset 
 現在のページより前のページにあるアイテムの総数

 | plus: 1 
 Liquidの足し算

 paginate.next 
 次へのリンクを返します

 paginate.previous 
 前へのリンクを返します

 paginate.items
 ページネーションで管理されているアイテムの総数。全〇〇件中の〇〇の部分

コードの説明

{% assign page_count = paginate.page_size %}
{% assign page_offset = paginate.current_offset | plus: 1 %}
この二行で現在のページに表示されるアイテム数と現在のページまでのアイテム数を変数に代入しています。

{% if paginate.previous and paginate.next %}
{{ page_offset }}〜{{ page_offset | plus: page_count }}
前もある、次もあるページかを判別して、そのページであれば、今までのページのアイテム数+1 〜 今までのページのアイテム数+ページに表示されるアイテム数

{% elsif paginate.next %}
1〜{{ page_count }}
上記の条件に当てはまらないということは、一番最初のページが一番最後のページになります。
次がるので一番最初。一番最初であれば、 1〜 ページに表示されるアイテム数

{% elsif paginate.previous %}
上記までの条件に当てはまらない→ 前と次(両方)はない、次はない、ので一番後ろ

{% if page_offset == paginate.items %}
{{ page_offset }}
{% else %}
{{ page_offset }}〜{{ paginate.items }}
{% endif %}
一番最後のページで、今までのページ+1(現在のページの一番最初に表示されるアイテム数) イコール (アイテムの総数) の時は、一番最後のページに表示されるアイテムの数が、1件なので、〜今までのページ+1。それ以外は、一番最後のページに表示されるアイテムが複数あるので、今までのページのアイテム数+1 〜 今までのページのアイテム数+ページに表示されるアイテム数

{% else %}
{{ page_count }}
{% endif %}
上記までの条件に当てはまらないということは、(前+次、次、前 がない)ということは、次のページに行くほどのアイテム数がないので、一番最初のページに全てが表示されている状態。
ページネーションで管理されているアイテムの総数

# まとめ

私の環境上で動作確認は行っていますが…もっとスマートな方法があるのかもしれませんし、間違っているかもしれません。(間違っていた場合はその都度この記事を修正します。)
その時はごめんなさい。
ですが、よく見かける機能なのでコードを書くのが苦手な方は参考にされてみてください。

参考:https://shopify.dev/docs/themes/liquid/reference/objects/paginate#paginate-page_size