Section động (AJAX)

Section là một tệp giao diện có thể dựng lại riêng lẻ qua AJAX — dùng khi bạn muốn cập nhật một mảng giao diện (giỏ hàng thu nhỏ, lưới sản phẩm sau khi lọc) mà không tải lại cả trang.

Tạo một section

Đặt tệp trong thư mục sections/ của bộ giao diện:

sections/mini-cart.html
sections/product-grid.html

Section được dựng bằng chính engine Liquid, nên viết như mọi template khác.

Biến có trong section

Section nhận bộ biến toàn cục: store, menus, nav_categories, customer, cart_count và custom.

Section không nhận biến riêng của trang (products, product, article…), vì máy chủ dựng nó độc lập với trang đang mở. Dữ liệu phụ thuộc ngữ cảnh phải tự truy vấn bằng thư viện xStore JS rồi dựng bằng JavaScript.

Gọi từ giao diện

xStore.sections.render nhận một mảng mã section và trả về map mã → HTML:

<div id="mini-cart"></div>

<script>
  async function refreshMiniCart() {
    const html = await xStore.sections.render(['mini-cart']);
    document.getElementById('mini-cart').innerHTML = html['mini-cart'];
  }

  // Dựng lại mỗi khi giỏ hàng đổi.
  xStore.on('cart:updated', refreshMiniCart);
  refreshMiniCart();
</script>

Dựng nhiều section trong một lần gọi:

<script>
  const html = await xStore.sections.render(['mini-cart', 'header-account']);
  document.getElementById('mini-cart').innerHTML      = html['mini-cart'];
  document.getElementById('header-account').innerHTML = html['header-account'];
</script>

Giới hạn cần biết

Cập nhật header sau khi đăng nhập

Đây là cách tránh phải tải lại cả trang sau khi khách đăng nhập:

<script>
  xStore.on('auth:login', async () => {
    const html = await xStore.sections.render(['header-account']);
    document.getElementById('header-account').innerHTML = html['header-account'];
  });
</script>