xStore.categories

Danh mục sản phẩm: danh sách, cây hai cấp, chi tiết, đường dẫn phân cấp và danh mục con.

Phương thức

Phương thức Cú pháp Mô tả Từ phiên bản
list xStore.categories.list({ limit, parent }): Promise<CursorPaginatedResponse<CategoryCard>> Danh sách danh mục. Bỏ trống parent để lấy danh mục gốc. 2.1
tree xStore.categories.tree(): Promise<CursorPaginatedResponse<CategoryNode>> Cây danh mục HAI CẤP — gốc kèm con trực tiếp. Không trả cấp sâu hơn; dựng menu chỉ cần một lần gọi này. 2.1
get xStore.categories.get(categoryId): Promise<CategoryDetail> Chi tiết danh mục theo id. 2.1
getBySlug xStore.categories.getBySlug(slug): Promise<CategoryDetail> Chi tiết danh mục theo slug — cách đổi slug trên URL thành id để lọc sản phẩm. 2.1
breadcrumb xStore.categories.breadcrumb(categoryId): Promise<CursorPaginatedResponse<Breadcrumb>> Đường dẫn phân cấp, xếp từ GỐC xuống, sâu tối đa 10 cấp. Đưa thẳng vào khối JSON-LD BreadcrumbList. 2.1
subcategories xStore.categories.subcategories(categoryId): Promise<CursorPaginatedResponse<CategoryCard>> Danh mục con trực tiếp của một danh mục. 2.1

Ví dụ đầy đủ

<script>
  // Menu danh mục: MỘT lần gọi cho cả cây hai cấp, đừng gọi lồng nhau.
  async function renderMenu() {
    const cay = await xStore.categories.tree();

    document.getElementById('menu').innerHTML = cay.items.map((goc) => `
      <li>
        <a href="${goc.url ?? '#'}">${goc.title}</a>
        <ul>${(goc.children ?? []).map((con) =>
          `<li><a href="${con.url ?? '#'}">${con.title}</a></li>`).join('')}</ul>
      </li>
    `).join('');
  }

  // Trang danh mục: slug → id, rồi dùng id để lọc sản phẩm.
  async function renderCategoryPage(slug) {
    const dm = await xStore.categories.getBySlug(slug);

    // Đường dẫn phân cấp trả về từ gốc xuống, sâu tối đa 10 cấp.
    const duong = await xStore.categories.breadcrumb(dm.id);
    document.getElementById('breadcrumb').innerHTML =
      duong.items.map((c) => `<a href="${c.url ?? '#'}">${c.title}</a>`).join(' / ');

    const sp = await xStore.products.list({ category: dm.id, limit: 24 });
    console.log(sp.items.length, 'sản phẩm');
  }

  renderMenu();
</script>

Thư viện gọi tới /api/... trên chính tên miền cửa hàng, nên không cần khai báo địa chỉ máy chủ ở bất kỳ đâu.

Xem thêm Sự kiện để giao diện tự cập nhật sau mỗi thao tác.