product/index
Danh sách tất cả sản phẩm.
- Tệp giao diện:
product/index.html - Đường dẫn:
/san-pham - Controller:
App\Modules\Product\ProductController::productListPage
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 |
|---|---|---|---|
products |
Product[] |
Sản phẩm 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 |
sort |
string | null |
Kiểu sắp xếp đang chọn (price_asc, price_desc…). | 1.0 |
stock |
string | null |
Bộ lọc tồn kho đang chọn (in_stock, out_of_stock). | 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 |
Mã đầy đủ
Toàn bộ tệp product/index.html của bộ giao diện mặc định. Chép về templates/<bộ giao diện của bạn>/product/index.html rồi sửa theo ý muốn.
<div class="container page-content">
<h1 class="page-title">Tất cả sản phẩm</h1>
<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="load-more">
<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 %}
<div class="empty-state">
<p>Không có sản phẩm nào.</p>
</div>
{% endif %}
</div>