Site Menüleri
Beş menü grubunun ağacını kuran, sıralayan ve düzenleyen yedi uç.
Genel Bakış
Site menüleri beş ayrı grupta yaşar: üst menü, alt menü, müşteri paneli, mobil ve kenar çubuğu. Her grup kendi ağacıdır ve öğeler gruplar arasında taşınmaz.
Bir öğe ya bir sayfaya bağlanır ya da bağlantısı elle yazılır. Sayfaya bağlanan öğe sayfanın adresi değiştiğinde onu izler; elle yazılan bağlantı olduğu gibi kalır.
Başlık, açıklama, rozet ve mega menü içeriği dil başına tutulur. Sıra ve iç içe yerleşim ise ayrı bir uçtan, tek çağrıda yazılır.
Referans
Menü Ağacını Getirme
Bir menü grubunun tamamını iç içe ağaç olarak döndürür.
header, footer, mobile, sidebar. clientArea hâlâ yanıt verir ama kullanımdan kaldırıldı: hiçbir tema göstermez, yanıt meta.deprecation taşır. Öntanımlı olarak üst menü.clientArea grubunda: field, value ve hiçbir temanın göstermediğini söyleyen message. Öğe uçları o gruptaki öğe için aynı uyarıyı taşır.curl 'https://panel.ornek.com/api/v1/admin/website/menus?group=header' \
-H "Authorization: Bearer $API_KEY"const url = new URL('https://panel.ornek.com/api/v1/admin/website/menus');
url.searchParams.set('group', 'header');
const res = await fetch(url, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/menus?' . http_build_query(['group' => 'header']));
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Her grup AYRI bir agactir; hepsini gormek icin bes cagri gerekir.
$header = Api::Website()->GetMenus([], ['group' => 'header'])['data'];
$footer = Api::Website()->GetMenus([], ['group' => 'footer'])['data'];Sayfa Seçeneklerini Getirme
Menü öğesinin bağlanabileceği sayfaları döndürür.
curl 'https://panel.ornek.com/api/v1/admin/website/menus/page-options' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/website/menus/page-options', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/menus/page-options');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Anahtarlari koda gomme: liste kurulumun sayfalarina gore degisir.
$options = Api::Website()->GetMenuPageOptions()['data'];Menüyü Yeniden Sıralama
Menü öğelerinin sırasını ve iç içe yerleşimini tek çağrıda yazar.
curl -X PUT 'https://panel.ornek.com/api/v1/admin/website/menus/reorder' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"orders":[{"id":10,"position":0,"parentId":0,"submenuOrder":[{"id":11,"position":0,"parentId":10}]}]}'const res = await fetch('https://panel.ornek.com/api/v1/admin/website/menus/reorder', {
method: 'PUT',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
orders: [
{
id: 10,
position: 0,
parentId: 0,
submenuOrder: [{ id: 11, position: 0, parentId: 10 }],
},
],
}),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/menus/reorder');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'orders' => [[
'id' => 10,
'position' => 0,
'parentId' => 0,
'submenuOrder' => [['id' => 11, 'position' => 0, 'parentId' => 10]],
]],
]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Gonderilmeyen oge OLDUGU YERDE kalir: eksik liste agaci yari-tasinmis birakabilir.
$r = Api::Website()->ReorderMenus(['orders' => $tree]);
$written = $r['data']['reordered'];Menü Öğesi Detayı
Tek bir menü öğesini dilleriyle döndürür.
curl 'https://panel.ornek.com/api/v1/admin/website/menus/10' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(`https://panel.ornek.com/api/v1/admin/website/menus/${id}`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/menus/' . $id);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Alt ogeler listesi burada BOS gelir; agaci gormek icin grup ucunu kullanin.
$item = Api::Website()->GetMenu(['id' => $id])['data'];Menü Öğesi Ekleme
Bir menüye yeni öğe ekler.
header, footer, mobile, sidebar. clientArea kullanımdan kaldırıldı: öğe kaydedilir ama hiçbir yerde görünmez, yanıt meta.deprecation taşır ve API v2 bu grubu reddedecek. Müşteri paneli menüsüne bağlantı eklemek için eklentinize müşteri sayfası verin ya da ui:client.subnav.items kancasını kullanın.curl -X POST 'https://panel.ornek.com/api/v1/admin/website/menus' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"group":"header","page":"home","languages":{"tr":{"title":"Ana Sayfa"}}}'const res = await fetch('https://panel.ornek.com/api/v1/admin/website/menus', {
method: 'POST',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
group: 'header',
page: 'home',
languages: {
en: { title: 'Home', description: 'Back to homepage', label: 'New' },
},
}),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/menus');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'group' => 'header',
'page' => 'home',
'languages' => ['en' => ['title' => 'Home']],
]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Baslik DIL BASINA yazilir; eksik biraktiginiz dilde oge bos etiketle gorunur.
Api::Website()->CreateMenu([
'group' => 'header',
'page' => 'home',
'languages' => ['en' => ['title' => 'Home'], 'tr' => ['title' => 'Ana Sayfa']],
]);Menü Öğesini Güncelleme
Menü öğesinin gönderdiğiniz alanlarını değiştirir.
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/website/menus/10' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"rank":1,"languages":{"tr":{"title":"Anasayfa"}}}'const res = await fetch(`https://panel.ornek.com/api/v1/admin/website/menus/${id}`, {
method: 'PATCH',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
rank: 1,
languages: { en: { title: 'Homepage' } },
}),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/menus/' . $id);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'rank' => 1,
'languages' => ['en' => ['title' => 'Homepage']],
]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Oge baska bir GRUBA tasinamaz; grup alani yalniz olusturmada verilir.
Api::Website()->UpdateMenu(['id' => $id, 'parent' => $newParent]);Menü Öğesini Silme
Menü öğesini ve altındaki bütün öğeleri kaldırır.
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/website/menus/10' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(`https://panel.ornek.com/api/v1/admin/website/menus/${id}`, {
method: 'DELETE',
headers: { Authorization: `Bearer ${apiKey}` },
});
const { data } = await res.json();
console.log(data.removed); // [10, 11]$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/menus/' . $id);
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);// Ust ogeyi silmek ALT MENUYU de goturur; once cocuklari baska bir ogeye tasiyin.
$gone = Api::Website()->DeleteMenu(['id' => $id])['data']['removed'];Tuzaklar
Bir menü öğesini silmek altındaki bütün öğeleri de siler. Üst düzey bir başlığı kaldırmak, altındaki bütün bağlantıları menüden çıkarır. Yanıttaki silinenler listesi gerçekte ne gittiğini söyler; alt öğeleri korumak istiyorsanız önce onları başka bir öğenin altına taşıyın.
Menü grubu yalnız oluştururken verilir; güncelleme onu almaz. Üst menüdeki bir bağlantıyı alt menüye taşımak, onu yeni grupta yeniden oluşturup eskisini silmek demektir. Aynısı yeniden sıralama ucu için de geçerlidir: o yalnız aynı ağaç içinde yer değiştirir.
Sıralama ucu yalnız listedeki öğeleri yazar; göndermedikleriniz eski yerinde kalır. Ağacın bir kısmını gönderip gerisini atlamak, menüyü yarı taşınmış bir durumda bırakabilir. Yazılan öğe sayısını dönen değerden okuyup beklediğinizle karşılaştırın.
Menü başlığı her dilde ayrı yazılır. Bir dili atlarsanız öğe o dilde boş bir etiketle görünür; kaybolmaz, adsız durur. Yeni bir dil açtığınızda mevcut menü öğelerinin hiçbiri o dilde başlık taşımaz, hepsini gezmeniz gerekir.
Sayfaya bağlanan bir öğe, sayfanın adresi değiştiğinde onu kendiliğinden izler. Elle yazılan bir bağlantı ise olduğu yerde kalır ve sayfa taşınınca kırılır. Kendi sitenizin bir sayfasına gidiyorsanız adresi elle yazmak yerine sayfa alanını kullanın; geçerli anahtarları sayfa seçenekleri ucu verir.
İlgili Makaleler
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.