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:
- Buka modul Halaman di panel admin.
- Buat halaman dengan tipe Katalog β ini menjadi kategori produk Anda.
- 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:
| sortKey | Apa yang Dilakukan | Contoh Penggunaan |
|---|---|---|
| harga | Urutkan berdasarkan harga | Tampilkan yang termurah lebih dulu |
| tanggal | Urutkan berdasarkan tanggal pembuatan | Tampilkan produk terbaru |
| judul | Urutkan secara alfabetis | Daftar produk A-Z |
| posisi | Urutan kustom (default) | Urutan yang dipilih dari admin |
| id | Urutkan berdasarkan ID | Penyortiran 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β
| Metode | Deskripsi | Kasus Penggunaan |
|---|---|---|
| getProducts() | Ambil semua produk dengan penyaringan/penyortiran | Halaman katalog utama |
| getProductById() | Ambil produk tunggal berdasarkan ID | Halaman detail produk |
| getProductsByPageId() | Ambil produk dari kategori berdasarkan ID halaman | Halaman kategori |
| getProductsByPageUrl() | Ambil produk dari kategori berdasarkan URL halaman | Halaman kategori berdasarkan URL |
| getRelatedProductsById() | Ambil produk terkait/similar | Bagian "Anda mungkin juga suka" |
| searchProduct() | Cari produk berdasarkan kueri | Fungsionalitas pencarian |
| getProductsCount() | Ambil total jumlah produk | Info paginasi |
| getProductsCountByPageId() | Ambil jumlah produk berdasarkan ID kategori | Paginasi kategori |
| getProductsCountByPageUrl() | Ambil jumlah produk berdasarkan URL kategori | Paginasi kategori |
| getProductBlockById() | Ambil blok produk berdasarkan ID | Blok konten produk |
| getProductsEmptyPage() | Ambil struktur halaman produk kosong | Penanganan keadaan kosong |
| getProductsPriceByPageUrl() | Ambil harga produk berdasarkan URL halaman | Penyaringan harga |
| getProductsByIds() | Ambil produk berdasarkan daftar ID | Keranjang, wishlist, perbandingan |
| getProductsByVectorSearch() | Pencarian semantik (vektor) untuk produk | Pencarian 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
userQuerytergantung pada metode. Field di atas adalah basis umum (IProductsQueryBase), digunakan olehgetProducts,getProductsByPageId,getProductsByPageUrldangetProductsEmptyPage. Metode lain berbeda:getRelatedProductsByIdjuga menerimastatusMarkerdantemplateMarker;getProductsPriceByPageUrljuga menerimastatusMarker(tanpasortKey);getProductsByIdshanya menerimasignPrice. Penyaringan (attributeMarker/conditionMarker/conditionValue) dilakukan melalui body permintaan, bukanuserQueryβ 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.
| Marker | Arti | Contoh |
|---|---|---|
| eq | Sama dengan | statusId = 1 (hanya aktif) |
| neq | Tidak sama dengan | kategori β "arsip" |
| in | Mengandung (salah satu) | kategori in ["elektronik", "buku"] |
| nin | Tidak mengandung | merek tidak in ["merek_palsu"] |
| mth | Lebih besar dari | harga > 100 |
| lth | Kurang dari | stok < 10 |
| exs | Ada (memiliki nilai) | Memiliki deskripsi |
| nexs | Tidak ada | Tidak 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β tipestringPenanda 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:
- Ambil produk dengan
signPricediatur ke penanda penyimpanan urutan Anda (misalnya"orders"). - Setiap produk yang dikembalikan sekarang membawa field
signedPriceβ token yang ditandatangani yang mengenkripsi harga yang terkunci. - Kirim token
signedPriceitu 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
signPriceketika 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β
- Panel Admin OneEntry - Katalog - Dokumentasi resmi panel admin
- Modul Halaman - Buat kategori katalog (halaman tipe Katalog)
- Modul AttributesSets - Field dan atribut produk kustom
- Modul Templates - Template tampilan produk
- Modul Blocks - Blok konten produk yang dapat digunakan kembali
- Modul Orders - Tangani pesanan produk