Ürün Kategorileri

1.6k görüntülenme Markdown

Bir grubun içindeki ürün kategorilerini okuyan, açan, düzenleyen, silen ve görsellerini yöneten altı uç.

Genel Bakış

Kategori, bir grubun içinde ürünleri toplayan kaptır. Kategorilerin düz listesi ürün uçları makalesindeki arama ucundan gelir; buradaki altı uç tek bir kategoriyi okur, açar, düzenler, siler ve görsellerini yönetir.

Kategoriler ile özel gruplar aynı tabloda yaşar ve aynı şemayı döndürür. Hangisine baktığınızı is_category alanından okursunuz.

Referans

Kategori Detayı

get/api/v1/admin/products/categories/{id}
Products/GetProductCategory admin

Tek bir kategoriyi tüm ayarları ve dil içeriğiyle döndürür.

Dönen alanlar data — 18
idintKategori kimliği.
kindstringBağlı olduğu grup tipi.
kind_idintÖzel grup kimliği. Sabit gruplarda 0.
parent_idintÜst kategorinin kimliği. 0 üst seviye demektir.
is_categoryboolBu satır kategori mi, yoksa üst seviye grup mu.
group_keystring | nullÜst seviye gruplarda grup anahtarı.
statusstringactive ya da inactive.
visibilitystringvisible ya da invisible.
rankintGörüntülenme sırası.
icon_typestringfont ya da image.
iconstringİkon sınıfı ya da yüklenen görselin adı.
colorstringKategori rengi.
list_templateintListe şablonunun kimliği.
upgradingboolYükseltmeye izin verilir mi.
seo_indexboolArama motorlarına açık mı.
enabled_payment_gatewaysarrayYalnız bu ödeme yollarına izin verir.
disabled_payment_gatewaysarrayBu ödeme yollarını kapatır.
langsobjectDil kodundan içerik nesnesine eşleme.
titlestringKategori başlığı.
routestringAdres parçası. Verilmezse başlıktan üretilir.
sub_titlestringAlt başlık.
contentstringKategori metni.
seo_titlestringArama başlığı.
seo_keywordsstringArama anahtar kelimeleri.
seo_descriptionstringArama açıklaması.
Hatalar 2
not_found404Kategori bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/products/categories/18' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/products/categories/18', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/categories/18');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Products()->GetProductCategory(['id' => 18]);

// is_category, satirin kategori mi ust seviye grup mu oldugunu soyler.
$isCategory = $response['data']['is_category'];

Kategori Oluşturma

post/api/v1/admin/products/categories
Products/CreateProductCategory admin 201

Bir grubun içinde kategori açar. Hangi gruba gireceğini tek bir alan belirler.

Gövde 12
groupstringzorunluGrup bağlamı: hosting, server, software ya da özel grup için kimlik son ekli anahtar. Grup listesi ucundan alınır.
titleobjectzorunluDil kodundan başlığa eşleme. Geçerli dilin başlığı olmalı.
parent_idintÜst kategorinin kimliği.
rankintGörüntülenme sırası.
statusstringactive ya da inactive.
sub_titlestringAlt başlık.
contentstringKategori metni.
routestringAdres parçası.
icon_typestringfont ya da image.
iconstringİkon sınıfı.
colorstringKategori rengi.
seo_titlestringArama başlığı, anahtar kelimeleri ve açıklaması ayrı alanlardır.
Dönen alanlar data
dataobjectOluşturulan kategori, 201 ile döner. Yukarıdaki kategori detayıyla aynı şemadır.
Hatalar 5
title_required422Geçerli dilde başlık yok.
group_required422group boş.
route_exists422Adres parçası başka bir kayıtta kullanılıyor.
sub_title_too_long422Bir sub_title değeri 255 karakterden uzun.
create_failed422Oluşturma reddedildi.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/products/categories' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"group":"hosting","title":{"en":"Reseller Hosting"},"rank":2}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/categories', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    group: 'hosting',
    title: { en: 'Reseller Hosting' },
    rank: 2,
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/categories');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'group' => 'hosting',
        'title' => ['en' => 'Reseller Hosting'],
        'rank'  => 2,
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Ozel grup icin anahtar kimlik son ekiyle gelir; grup listesinden okuyun.
$response = Api::Products()->CreateProductCategory([
    'group' => 'special-5',
    'title' => ['en' => 'Wildcard Certificates'],
]);

Kategoriyi Güncelleme

patch/api/v1/admin/products/categories/{id}
Products/UpdateProductCategory admin kısmi güvenli

Gönderdiğiniz alanları uygular. Kategorinin bağlı olduğu grup bu uçtan değiştirilemez.

Gövde 11
titleobjectDil kodundan başlığa eşleme.
parent_idintÜst kategorinin kimliği.
rankintGörüntülenme sırası.
statusstringactive ya da inactive.
sub_titlestringAlt başlık.
contentstringKategori metni.
routestringAdres parçası.
icon_typestringfont ya da image.
iconstringİkon sınıfı.
colorstringKategori rengi.
seo_titlestringArama başlığı, anahtar kelimeleri ve açıklaması ayrı alanlardır.
Dönen alanlar data
dataobjectKategorinin son hâli, 200 ile döner. Yukarıdaki kategori detayıyla aynı şemadır.
Hatalar 4
not_found404Kategori bulunamadı.
route_exists422Adres parçası başka bir kayıtta kullanılıyor.
sub_title_too_long422Bir sub_title değeri 255 karakterden uzun.
update_failed422Güncelleme reddedildi.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/products/categories/18' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"status":"inactive","rank":5}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/categories/18', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ status: 'inactive', rank: 5 }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/categories/18');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['status' => 'inactive', 'rank' => 5]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Products()->UpdateProductCategory([
    'id'     => 18,
    'status' => 'inactive',
    'rank'   => 5,
]);

Kategoriyi Silme

delete/api/v1/admin/products/categories/{id}
Products/DeleteProductCategory admin geri alınamaz

Kategoriyi siler.

Dönen alanlar data — 2
deletedboolSilme başarılı mı.
idintSilinen kategorinin kimliği.
Hatalar 3
not_found404Kategori bulunamadı.
blocked_by_gate422gate:product.group_delete kancası işlemi veto etti.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/products/categories/18' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/categories/18', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/categories/18');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Products()->DeleteProductCategory(['id' => 18]);

Kategori Görseli Yükleme

post/api/v1/admin/products/categories/{id}/image
Products/UploadCategoryImage admin iki yuva

Kategorinin ikonunu ya da başlık arka planını yükler.

Gövde 2
imagestringzorunluGörsel. base64 veri adresi ya da indirilebilir bir bağlantı.
typestringHangi yuvaya yükleneceği: icon ya da header-background. Varsayılan icon.
Dönen alanlar data — 2
typestringYazılan yuva: icon ya da header-background.
urlstringSaklanan görselin genel adresi. Dosya adı rastgeledir.
——Bir yuva tek görsel tutar: yeni yükleme öncekinin yerine geçer ve dosyasını siler.
Hatalar 5
not_found404Kategori bulunamadı.
file_required422Dosya alanı boş.
file_invalid422Dosya çözümlenemedi ya da tipi kabul edilmedi.
file_failed422Dosya saklanamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/products/categories/18/image' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"image":"https://cdn.example.com/icon.png","type":"icon"}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/categories/18/image', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    image: 'https://cdn.example.com/icon.png',
    type: 'icon',
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/categories/18/image');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'image' => 'https://cdn.example.com/icon.png',
        'type'  => 'icon',
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Gorsel ikon yuklemek ikon tipini de 'image' yapar; font ikonu artik gecerli degildir.
$response = Api::Products()->UploadCategoryImage([
    'id'    => 18,
    'image' => 'https://cdn.example.com/icon.png',
    'type'  => 'icon',
]);

Kategori Görselini Silme

delete/api/v1/admin/products/categories/{id}/image
Products/DeleteProductCategoryImage admin

Kategorinin ikonunu ya da başlık arka planını kaldırır.

Sorgu parametreleri 1
typestringHangi yuvanın boşaltılacağı: icon ya da header-background. Varsayılan icon.
Dönen alanlar data — 3
deletedboolSilme başarılı mı.
idintKategori kimliği.
typestringBoşaltılan yuva.
Hatalar 2
not_found404Kategori bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE -G 'https://panel.ornek.com/api/v1/admin/products/categories/18/image' \
  -H "Authorization: Bearer $API_KEY" \
  -d type=header-background
const url = new URL('https://panel.ornek.com/api/v1/admin/products/categories/18/image');
url.searchParams.set('type', 'header-background');

const res = await fetch(url, {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$url = 'https://panel.ornek.com/api/v1/admin/products/categories/18/image?' . http_build_query(['type' => 'header-background']);

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Products()->DeleteProductCategoryImage(['id' => 18], [
    'type' => 'header-background',
]);

Tuzaklar

Grup bağlamı yalnız oluştururken verilir

Kategorinin hangi gruba ait olduğu group alanıyla açılışta belirlenir ve sonradan değiştirilemez; güncelleme gövdesinde böyle bir alan yoktur. Kategoriyi başka bir gruba taşımak için yenisini açıp eskisini silmeniz gerekir.

Adres parçası tüm kayıtlarda benzersizdir

Adres parçası çakışırsa hem oluşturma hem güncelleme reddedilir. Çakışma yalnız kardeş kategoriler arasında değil, kayıtlar arasında aranır: başka bir gruptaki aynı adlı kategori de sizi durdurur. Başlıktan üretilen adresler bu yüzden beklenmedik biçimde çakışabilir.

Görsel ikon font ikonunu geçersiz kılar

İkon yuvasına görsel yüklemek ikon tipini görsele çevirir; daha önce ayarladığınız font ikonu kaydedilse de gösterilmez. Font ikonuna dönmek için görseli silip ikon tipini geri yazmanız gerekir.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.