product/category

Trang một danh mục sản phẩm.

Ngoài những biến dưới đây, slot này còn nhận toàn bộ biến toàn cục.

Biến của trang

Biến Kiểu Mô tả Từ phiên bản
category Category Danh mục đang xem. 1.0
breadcrumb Breadcrumb[] Đường dẫn từ danh mục gốc tới danh mục hiện tại; url của mỗi mắt xích có thể null. 1.0
subcategories Category[] Danh mục con trực tiếp. 1.0
products Product[] Sản phẩm thuộc danh mục, của trang hiện tại. 1.0
has_more boolean Còn trang tiếp theo hay không. 1.0
next_cursor string | null Con trỏ để tải trang kế; null khi đã hết. 1.0
cursor string | null Con trỏ của trang đang xem. 1.0
sort string | null Kiểu sắp xếp đang chọn. 1.0
stock string | null Bộ lọc tồn kho đang chọn. 1.0
warehouse_id string | null Kho đang lọc theo. 1.0
warehouses Warehouse[] Danh sách kho để dựng bộ lọc. 1.0
category_content string | null Nội dung SEO dạng HTML đặt ở cuối trang; null khi danh mục chưa có. 1.2
total_count integer Tổng số sản phẩm khớp bộ lọc hiện tại (dùng cho tiêu đề "940 Laptop"). 1.2
remaining_count integer Số sản phẩm còn lại chưa hiển thị; dùng cho nút "Xem thêm N sản phẩm". 1.2
filters CategoryFilterPanel Cấu hình bảng lọc của danh mục: hãng, nhóm thuộc tính và khoảng giá. 1.2
active_filters map Bộ lọc đang chọn, đã bỏ cursor — dùng để dựng liên kết bật/tắt từng lựa chọn. Rỗng khi không lọc gì. 1.2
page_title string Tiêu đề SEO của trang. 1.0

Mã đầy đủ

Toàn bộ tệp product/category.html của bộ giao diện mặc định. Chép về templates/<bộ giao diện của bạn>/product/category.html rồi sửa theo ý muốn.

<div class="container page-content">

  {% if breadcrumb.size > 0 %}
  <nav class="breadcrumb" aria-label="breadcrumb">
    <a href="/">Trang chủ</a>
    {% for crumb in breadcrumb %}
      <span class="breadcrumb__sep">/</span>
      {% if forloop.last %}
        <span class="breadcrumb__current">{{ crumb.title }}</span>
      {% elsif crumb.url %}
        <a href="{{ crumb.url }}">{{ crumb.title }}</a>
      {% else %}
        <span>{{ crumb.title }}</span>
      {% endif %}
    {% endfor %}
  </nav>
  {% endif %}

  <div class="category-header">
    {% if category.cover_image_url %}
      <img src="{{ category.cover_image_url }}" alt="{{ category.title }}"
           class="category-header__img" loading="lazy">
    {% endif %}
    <h1 class="category-header__title">{{ category.title }}</h1>
    {% if category.description %}
      <p class="category-header__desc">{{ category.description }}</p>
    {% endif %}
  </div>

  {% if subcategories.size > 0 %}
  <div class="subcategory-nav">
    {% for sub in subcategories %}
      {% if sub.url %}<a href="{{ sub.url }}" class="subcategory-nav__item">{% else %}<span class="subcategory-nav__item">{% endif %}
        {% if sub.cover_image_url %}
          <img src="{{ sub.cover_image_url }}" alt="{{ sub.title }}"
               class="subcategory-nav__img" loading="lazy">
        {% endif %}
        <span>{{ sub.title }}</span>
      {% if sub.url %}</a>{% else %}</span>{% endif %}
    {% endfor %}
  </div>
  {% endif %}

  <form method="get" class="storefront-sort">
    <label for="sort">Sắp xếp:</label>
    <select id="sort" name="sort" onchange="this.form.submit()">
      <option value=""           {% if sort == nil or sort == '' %}selected{% endif %}>Mặc định</option>
      <option value="price_asc"  {% if sort == 'price_asc' %}selected{% endif %}>Giá: Thấp đến cao</option>
      <option value="price_desc" {% if sort == 'price_desc' %}selected{% endif %}>Giá: Cao đến thấp</option>
    </select>
    {% if stock %}<input type="hidden" name="stock" value="{{ stock }}">{% endif %}
    {% if warehouse_id %}<input type="hidden" name="warehouse_id" value="{{ warehouse_id }}">{% endif %}
  </form>

  <form method="get" class="storefront-filters">
    {% if sort %}<input type="hidden" name="sort" value="{{ sort }}">{% endif %}
    <label for="stock">Tồn kho:</label>
    <select id="stock" name="stock" onchange="this.form.submit()">
      <option value=""              {% if stock == nil or stock == '' %}selected{% endif %}>Tất cả</option>
      <option value="in_stock"      {% if stock == 'in_stock' %}selected{% endif %}>Còn hàng</option>
      <option value="out_of_stock"  {% if stock == 'out_of_stock' %}selected{% endif %}>Hết hàng</option>
    </select>

    {% if stock == 'in_stock' and warehouses.size > 0 %}
      <label for="warehouse_id">Tại kho:</label>
      <select id="warehouse_id" name="warehouse_id" onchange="this.form.submit()">
        <option value="">Tất cả kho</option>
        {% for w in warehouses %}
          <option value="{{ w.id }}" {% if warehouse_id == w.id %}selected{% endif %}>{{ w.title }}</option>
        {% endfor %}
      </select>
    {% endif %}
  </form>

  {% if products.size > 0 %}
    <div class="product-grid">
      {% for product in products %}
        {% include 'components/product_item' %}
      {% endfor %}
    </div>

    {% if has_more %}
    <div class="pagination">
      <a href="?{% if sort %}sort={{ sort }}&{% endif %}{% if stock %}stock={{ stock }}&{% endif %}{% if warehouse_id %}warehouse_id={{ warehouse_id }}&{% endif %}cursor={{ next_cursor | url_encode }}" class="btn btn--outline">Xem thêm</a>
    </div>
    {% endif %}
  {% else %}
    <p class="empty-state">Danh mục này chưa có sản phẩm.</p>
  {% endif %}

</div>