Lewati ke konten utama

Pengantar

Kelola produk e-commerce dengan katalog dinamis, penyaringan, dan pencarian.

Informasi lebih lanjut tentang Katalog di panel admin OneEntry: https://doc.oneentry.cloud/docs/category/catalog


🎯 Apa yang dilakukan modul ini?​

Modul Products (Katalog) memungkinkan Anda untuk mengambil, menyaring, mencari, dan mengurutkan produk di toko online atau koleksi multimedia Anda. Anda mengelola katalog di panel admin OneEntry (Katalog > Produk); aplikasi Anda mengambil produk secara dinamis, sehingga mengubah harga atau atribut di admin akan langsung terlihat tanpa perlu redeploy.

Selain e-commerce, Katalog juga cocok untuk galeri multimedia, portofolio, perpustakaan dokumen, dan koleksi konten lainnya.

πŸš€ Memulai dengan Cepat​

Inisialisasi modul dari defineOneEntry:


const { Products } = defineOneEntry(
"your-project-url", {
"token": "your-app-token"
}
);

Ambil halaman produk dan baca field-nya:

// Fetch the first 20 products (empty body = no filters).
const { items, total } = await Products.getProducts([], "en_US", { limit: 20 });

console.log(`Loaded ${items.length} of ${total} products`);

items.forEach((product) => {
console.log(product.id, product.localizeInfos.title, product.price);
});

Sebagian besar metode listing memiliki bentuk yang sama: filter body opsional, langCode, dan userQuery opsional (paginasi/penyortiran). Lihat Parameter di bawah untuk set lengkapnya.

✨ Konsep Kunci​

Apa itu Produk?​

Sebuah produk adalah entitas katalog (IProductsEntity) yang terdiri dari:

  • Info dasar - localizeInfos (judul, dll.), sku, harga
  • Gambar - foto produk / galeri (disimpan sebagai atribut)
  • Atribut kustom - field apa pun yang Anda definisikan (attributeValues): merek, material, ukuran, warna, varian, stok, …
  • Lokalisasi - konten per bahasa

Tidak ada tipe produk tetap dalam SDK β€” struktur apa pun (varian, opsi, unduhan, bundel) dimodelkan dengan atribut kustom yang Anda konfigurasi untuk katalog.

Organisasi Produk​

Produk diorganisir melalui beberapa fitur katalog:

  • Kategori - bagian dari katalog (halaman tipe Katalog, dibuat di modul Halaman)
  • Status Produk - kondisi penyaringan tambahan di luar filter atribut (misalnya "tersedia", "diskon")
  • Tautan Produk - menghubungkan produk berdasarkan kriteria atribut (misalnya semua ponsel hitam bersama)
  • Filter Produk - pencarian cepat berdasarkan kriteria filter yang ditentukan
  • Atribut kustom - merek, ukuran, warna, material, …

Contoh hierarki:

πŸ“ Electronics
β”œβ”€ πŸ“± Smartphones
β”‚ β”œβ”€ iPhone 15 Pro
β”‚ └─ Samsung Galaxy S24
└─ πŸ’» Laptops
β”œβ”€ MacBook Pro
└─ Dell XPS

πŸ“ Clothing
β”œβ”€ πŸ‘• T-Shirts
└─ πŸ‘– Jeans

πŸ“‹ Apa yang Perlu Anda Ketahui​

Arsitektur Katalog​

Kategori katalog adalah halaman tipe Katalog yang dibuat melalui modul Halaman β€” buat mereka sebelum menambahkan produk:

  1. Buka modul Halaman di panel admin.
  2. Buat halaman dengan tipe Katalog β€” ini menjadi kategori produk Anda.
  3. Tambahkan produk ke kategori tersebut melalui Katalog > Produk.

Katalog admin juga menyediakan Unggah Katalog massal, Filter Produk, Tautan Produk, Status Produk, dan Pengaturan per katalog.

Paginasi​

Jangan memuat semuanya sekaligus β€” halaman hasil dengan limit dan offset:

Rumus Offset: offset = (pageNumber - 1) * limit

Limit default: Anda dapat mengambil 10 objek secara default. Untuk mempaging lebih banyak, konfigurasikan Izin Modul sesuai kebutuhan Anda.

Penyortiran​

Kirim sortKey dan sortOrder dalam userQuery:

sortKeyApa yang DilakukanContoh Penggunaan
hargaUrutkan berdasarkan hargaTampilkan yang termurah lebih dulu
tanggalUrutkan berdasarkan tanggal pembuatanTampilkan produk terbaru
judulUrutkan secara alfabetisDaftar produk A-Z
posisiUrutan kustom (default)Urutan yang dipilih dari admin
idUrutkan berdasarkan IDPenyortiran teknis

Urutan sort: ASC (rendah→tinggi) atau DESC (tinggi→rendah, default).

Penyaringan​

Penyaringan dilakukan melalui body permintaan (sebuah array dari IFilterParams), bukan userQuery. Setiap kondisi menggabungkan attributeMarker, conditionMarker (eq, neq, in, nin, mth, lth, exs, nexs), dan conditionValue. Gabungkan beberapa kondisi dalam array untuk menyaring berdasarkan beberapa kriteria sekaligus. Referensi kondisi lengkap ada di Parameter di bawah.


πŸ“Š Tabel Referensi Cepat - Metode Umum​

MetodeDeskripsiKasus Penggunaan
getProducts()Ambil semua produk dengan penyaringan/penyortiranHalaman katalog utama
getProductById()Ambil produk tunggal berdasarkan IDHalaman detail produk
getProductsByPageId()Ambil produk dari kategori berdasarkan ID halamanHalaman kategori
getProductsByPageUrl()Ambil produk dari kategori berdasarkan URL halamanHalaman kategori berdasarkan URL
getRelatedProductsById()Ambil produk terkait/similarBagian "Anda mungkin juga suka"
searchProduct()Cari produk berdasarkan kueriFungsionalitas pencarian
getProductsCount()Ambil total jumlah produkInfo paginasi
getProductsCountByPageId()Ambil jumlah produk berdasarkan ID kategoriPaginasi kategori
getProductsCountByPageUrl()Ambil jumlah produk berdasarkan URL kategoriPaginasi kategori
getProductBlockById()Ambil blok produk berdasarkan IDBlok konten produk
getProductsEmptyPage()Ambil struktur halaman produk kosongPenanganan keadaan kosong
getProductsPriceByPageUrl()Ambil harga produk berdasarkan URL halamanPenyaringan harga
getProductsByIds()Ambil produk berdasarkan daftar IDKeranjang, wishlist, perbandingan
getProductsByVectorSearch()Pencarian semantik (vektor) untuk produkPencarian bertenaga AI

Parameter​

Modul ini menerima serangkaian parameter pengguna yang disebut userQuery. Jika parameter tidak diberikan, default-nya diterapkan. Beberapa metode juga menerima body untuk penyaringan β€” kirim array kosong (atau tidak ada) ketika Anda tidak memerlukan filter.


const userQuery = {
offset: 0,
limit: 30,
sortOrder: 'DESC',
sortKey: 'id',
signPrice: 'orders',
}

Catatan: bentuk userQuery tergantung pada metode. Field di atas adalah basis umum (IProductsQueryBase), digunakan oleh getProducts, getProductsByPageId, getProductsByPageUrl dan getProductsEmptyPage. Metode lain berbeda: getRelatedProductsById juga menerima statusMarker dan templateMarker; getProductsPriceByPageUrl juga menerima statusMarker (tanpa sortKey); getProductsByIds hanya menerima signPrice. Penyaringan (attributeMarker / conditionMarker / conditionValue) dilakukan melalui body permintaan, bukan userQuery β€” lihat di bawah.

Skema

offset: number
Parameter paginasi. Default 0
contoh: 0

limit: number
parameter paginasi. Default 30
contoh: 30

sortKey: string
Field untuk penyortiran (default tidak diatur - penyortiran berdasarkan posisi, nilai yang mungkin: id, title, date, price, position)
Nilai yang tersedia: id, position, title, date, price

sortOrder: string
urutan penyortiran DESC | ASC (default DESC)
contoh: "DESC"

signPrice: string
Penanda penyimpanan urutan untuk perbaikan harga. Jika parameter diatur, harga akan diperbaiki untuk waktu tertentu (lihat bagian Memperbaiki harga di bawah).
contoh: "orders"

Field spesifik metode: statusMarker (getRelatedProductsById, getProductsPriceByPageUrl) dan templateMarker (getRelatedProductsById) β€” string | null, default null.

Gunakan kondisi untuk menemukan data produk tertentu:

attributeMarker: Pengidentifikasi teks dari atribut yang diindeks yang nilainya disaring. conditionMarker: Jenis kondisi yang diterapkan pada nilai atribut.

MarkerArtiContoh
eqSama denganstatusId = 1 (hanya aktif)
neqTidak sama dengankategori β‰  "arsip"
inMengandung (salah satu)kategori in ["elektronik", "buku"]
ninTidak mengandungmerek tidak in ["merek_palsu"]
mthLebih besar dariharga > 100
lthKurang daristok < 10
exsAda (memiliki nilai)Memiliki deskripsi
nexsTidak adaTidak ada gambar

conditionValue: Nilai untuk dibandingkan.


Memperbaiki harga (signPrice)​

Ketika Anda mengambil produk, Anda dapat mengirimkan parameter signPrice opsional di dalam userQuery (ini juga merupakan argumen pada metode rekomendasi dari modul Blocks). Ini menerima penanda penyimpanan urutan dan meminta server untuk mengunci harga yang dikembalikan untuk waktu terbatas.

signPrice β€” tipe string

Penanda penyimpanan urutan untuk perbaikan harga. Jika parameter diatur, harga akan diperbaiki untuk waktu tertentu.

Mengapa menggunakannya. Harga dapat berubah saat pelanggan berbelanja β€” diskon dimulai, atau admin mengedit harga. signPrice menjamin bahwa harga yang ditampilkan di katalog atau keranjang adalah harga yang tepat yang dikenakan saat checkout, sehingga tidak dapat berubah antara menjelajah dan memesan.

Cara kerjanya:

  1. Ambil produk dengan signPrice diatur ke penanda penyimpanan urutan Anda (misalnya "orders").
  2. Setiap produk yang dikembalikan sekarang membawa field signedPrice β€” token yang ditandatangani yang mengenkripsi harga yang terkunci.
  3. Kirim token signedPrice itu kembali saat Anda membuat pesanan, sehingga server menghormati harga yang diperbaiki.

const { items } = await Products.getProducts([], "en_US", {
signPrice: "orders"
});

const signedPrice = items[0].signedPrice;

➑️ Token yang dikembalikan digunakan oleh createOrder(). Lihat di mana mengambilnya dan bagaimana mengirimkannya di bagian Harga produk tetap (signedPrice) dari modul Orders.


❓ Pertanyaan Umum (FAQ)​

Bisakah saya menyaring berdasarkan beberapa kriteria sekaligus?​

Ya β€” kirim beberapa kondisi dalam array body; mereka digabungkan bersama:

const { items } = await Products.getProducts(
[
{ attributeMarker: "price", conditionMarker: "mth", conditionValue: 100 },
{ attributeMarker: "brand", conditionMarker: "in", conditionValue: ["apple", "samsung"] },
],
"en_US",
);

Bagaimana cara menangani varian produk (ukuran, warna)?​

Varian disimpan dalam attributeValues produk β€” baca dari objek produk yang diambil. Strukturnya adalah atribut set apa pun yang Anda konfigurasi untuk katalog.


Bagaimana cara mengimplementasikan tombol "Muat Lebih Banyak"?​

Tingkatkan offset dengan limit pada setiap klik dan tambahkan items baru ke daftar Anda (gunakan total untuk mengetahui kapan harus berhenti).


Bisakah saya menampilkan produk dari beberapa kategori?​

Ya β€” saring dengan atribut category dan penanda kondisi in, mengirimkan daftar nilai kategori.


Bagaimana cara mengimplementasikan bagian "Produk Baru"?​

Urutkan berdasarkan tanggal pembuatan: userQuery: { sortKey: "date", sortOrder: "DESC" }.


πŸŽ“ Praktik Terbaik​

  • Selalu paginasi (limit + offset) β€” jangan pernah mengambil seluruh katalog sekaligus.
  • Cache daftar produk untuk kategori yang sering diakses untuk mengurangi panggilan API.
  • Gunakan signPrice ketika harga masuk ke keranjang/checkout sehingga harga tidak dapat berubah.
  • Tangani hasil kosong (total === 0) dan field yang hilang (harga, gambar) dengan baik.

πŸ”— Dokumentasi Terkait​