# Ana Sayfa Slaytları

https://dev.wisecp.com/tr/ana-sayfa-slaytlari

Ana sayfa slider slaytlarını, görsellerini ve videolarını yöneten sekiz uç.

## Genel Bakış

Slaytlar ana sayfanın üstündeki döner alanı besler. Her slaytın bir **ana görseli** vardır ve bu görsel zorunludur; metinler, bağlantı ve video isteğe bağlıdır.

Metinler **dil başına** tutulur: başlık, açıklama ve bağlantı her dilde ayrı yaşar. Bir dilde metin bırakmazsanız slayt orada sessizce yalnız görselden ibaret kalır.

Görsel ve video için **ayrı uçlar** vardır. Görsel her zaman bulunur; video isteğe bağlı bir katmandır ve kaldırıldığında slayt görseline geri döner.

## Referans

### Slaytları Listeleme

get/api/v1/admin/website/slides

`Website/GetSlides` admin

Ana sayfa slider slaytlarını döndürür.

Sorgu 3

searchstringBaşlıkta arar.

pageintKaçıncı sayfa.

limitintSayfa başına kayıt. En çok yüz.

Dönen alanlar data[] — 4 + meta — 4

idintSlaytın numarası.

titlestringGeçerli dildeki başlığı.

linkstringGeçerli dildeki bağlantısı.

created_atstringOluşturulma anı.

totalintToplam slayt. Meta altında döner.

pageintBulunulan sayfa.

limitintSayfa boyutu.

next_pageintSonraki sayfa. Sıfır, son sayfadasınız demektir.

Hatalar 1

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/admin/website/slides' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res  = await fetch('https://panel.ornek.com/api/v1/admin/website/slides', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/slides');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Liste DURUMU ve SIRAYI tasimaz: hangi slaytin yayinda oldugunu detaydan okuyun.
$slides = Api::Website()->GetSlides()['data'];
```

### Slayt Detayı

get/api/v1/admin/website/slides/{id}

`Website/GetSlide` admin

Tek bir slaytı metinleri, görseli ve videosuyla döndürür.

Dönen alanlar data — 7

idintSlaytın numarası.

statusstringSlayt yayında mı.

rankintSlider içindeki sırası.

created_atstring | nullOluşturulma anı.

languagesobjectDil başına başlık, açıklama ve bağlantı.

imagestring | nullAna görselin adresi.

videoobject | nullVideo: adresi ve süresi. Video atanmamışsa boştur.

Hatalar 2

slide_not_found404Slayt bulunamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/admin/website/slides/2' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res  = await fetch(`https://panel.ornek.com/api/v1/admin/website/slides/${id}`, {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/slides/' . $id);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Video alani BOS gelebilir; okumadan once varligini sinayin.
$slide = Api::Website()->GetSlide(['id' => $id])['data'];
$clip  = $slide['video']['url'] ?? null;
```

### Slayt Oluşturma

post/api/v1/admin/website/slides

`Website/CreateSlide` admin görsel zorunlu

Ana sayfa slider'ına yeni bir slayt ekler.

Gövde 4

imagestringreqSlaytın ana görseli. Görselsiz slayt oluşturulamaz.

statusstringSlayt yayında mı. Öntanımlı olarak yayında.

rankintSlider içindeki sırası.

languagesobjectDil başına başlık, açıklama ve bağlantı. Metinlerin hiçbiri zorunlu değil.

Dönen alanlar 201 — data — 7

dataobjectOluşan slayt. Detay ucuyla aynı şekildedir.

Hatalar 3

image_required422Ana görsel gönderilmedi.

create_failed500Slayt oluşturulamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X POST 'https://panel.ornek.com/api/v1/admin/website/slides' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"image":"https://ornek.com/slayt.jpg","languages":{"tr":{"title":"Hos geldiniz"}}}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/website/slides', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    image: 'https://example.com/slide.jpg',
    languages: { en: { title: 'Welcome', link: 'https://example.com/' } },
  }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/slides');
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://example.com/slide.jpg',
        'languages' => ['en' => ['title' => 'Welcome', 'link' => 'https://example.com/']],
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Slayt ACIK dogar ve ana sayfaya hemen girer; hazir degilse durumu kapali gonderin.
Api::Website()->CreateSlide([
    'image'  => $data,
    'status' => 'inactive',
]);
```

### Slaytı Güncelleme

patch/api/v1/admin/website/slides/{id}

`Website/UpdateSlide` admin

Slaytın durumunu, sırasını ve metinlerini değiştirir.

Gövde 4

statusstringSlayt yayında mı.

rankintSlider içindeki sırası.

languagesobjectDil başına başlık, açıklama ve bağlantı.

imagestringAna görseli aynı istekte değiştirir.

Dönen alanlar data — 7

dataobjectGüncel slayt. Detay ucuyla aynı şekildedir.

Hatalar 2

slide_not_found404Slayt bulunamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/website/slides/2' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"status":"inactive","rank":1}'
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/admin/website/slides/${id}`, {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ status: 'inactive', rank: 1 }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/slides/' . $id);
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' => 1]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Sira numarasi baska slaytlari OTELEMEZ; ayni sayiyi iki slayta verirseniz sira belirsizlesir.
foreach ($order as $i => $slideId)
    Api::Website()->UpdateSlide(['id' => $slideId, 'rank' => $i]);
```

### Slaytı Silme

delete/api/v1/admin/website/slides/{id}

`Website/DeleteSlide` admin

Slaytı, görselini ve videosunu kaldırır.

Dönen alanlar data — 2

deletedboolSilme çalıştı mı.

idintSilinen slaytın numarası.

Hatalar 3

slide_not_found404Slayt bulunamadı.

delete_failed500Slayt silinemedi.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/website/slides/2' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/admin/website/slides/${id}`, {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/slides/' . $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);
```

```php
// Mevsimlik bir slayti silmek yerine DURUMU kapatin: gorsel ve metinler durur.
Api::Website()->UpdateSlide(['id' => $id, 'status' => 'inactive']);
```

### Slayt Görselini Değiştirme

put/api/v1/admin/website/slides/{id}/image

`Website/SetSlideImage` admin

Slaytın ana görselini yenisiyle değiştirir.

Gövde 1

imagestringreqYeni ana görsel. Küçük resmi de üretilir.

Dönen alanlar 201 — data — 1

urlstringYeni görselin genel adresi.

Hatalar 2

slide_not_found404Slayt bulunamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X PUT 'https://panel.ornek.com/api/v1/admin/website/slides/2/image' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"image":"https://ornek.com/yeni.jpg"}'
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/admin/website/slides/${id}/image`, {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ image: 'https://example.com/new.jpg' }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/slides/' . $id . '/image');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['image' => 'https://example.com/new.jpg']),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Ayni isi guncelleme cagrisi da yapar; ayri uc yalniz gorseli degistirmek icindir.
Api::Website()->SetSlideImage(['id' => $id, 'image' => $data]);
```

### Slayt Videosu Atama

put/api/v1/admin/website/slides/{id}/video

`Website/SetSlideVideo` admin

Slayta arka plan videosu atar.

Gövde 2

videostringreqYüklenecek video. Tek bir biçim kabul edilir.

video_durationintVideonun uzunluğu. Slider geçiş süresini buna göre ayarlar.

Dönen alanlar 201 — data — 2

urlstringVideonun genel adresi.

durationintKaydedilen uzunluk.

Hatalar 2

slide_not_found404Slayt bulunamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X PUT 'https://panel.ornek.com/api/v1/admin/website/slides/2/video' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"video":"https://ornek.com/klip.mp4","video_duration":12}'
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/admin/website/slides/${id}/video`, {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    video: 'https://example.com/clip.mp4',
    video_duration: 12,
  }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/slides/' . $id . '/video');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'video'          => 'https://example.com/clip.mp4',
        'video_duration' => 12,
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Sureyi VERMEZSENIZ slider gecisi videoyla uyusmaz; saniyeyi birlikte gonderin.
Api::Website()->SetSlideVideo([
    'id' => $id, 'video' => $data, 'video_duration' => 12,
]);
```

### Slayt Videosunu Kaldırma

delete/api/v1/admin/website/slides/{id}/video

`Website/DeleteSlideVideo` admin

Slaytın videosunu kaldırır ve görseline geri döner.

Dönen alanlar data — 2

deletedboolİşlem çalıştı mı. Video zaten yoksa da doğru döner.

idintSlaytın numarası.

Hatalar 2

slide_not_found404Slayt bulunamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/website/slides/2/video' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/admin/website/slides/${id}/video`, {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/website/slides/' . $id . '/video');
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);
```

```php
// Videosu olmayan slaytta cagri SESSIZCE gecer; once kontrol etmeye gerek yok.
Api::Website()->DeleteSlideVideo(['id' => $id]);
```

## Tuzaklar

> **Yeni slayt hemen ana sayfaya girer**
> 
> Durum alanını göndermezseniz slayt **açık** oluşur ve ziyaretçiler onu o an görmeye başlar. Ana sayfa sitenin en görünür yeridir; hazırlık aşamasındaki bir slaytı kapalı oluşturup metinleri tamamladıktan sonra açın.

> **Liste durum ve sıra taşımaz**
> 
> Listeleme ucu numarayı, başlığı, bağlantıyı ve tarihi verir; **durum ve sıra alanları yoktur**. Yani listeden hangi slaytın yayında olduğunu ya da hangi sırayla göründüklerini anlayamazsınız. Bu bilgi için her slaytı detay ucundan okuyun; slayt sayısı genelde azdır.

> **Sıra numarası ötelemez**
> 
> Bir slayta sıra numarası vermek diğerlerini **kaydırmaz**. İki slayta aynı sayıyı verirseniz hangisinin önce geleceği belirsizleşir ve sıralama sayfa yenilendikçe değişebilir. Sırayı yeniden düzenlerken hepsine sırayla artan numaralar yazın.

> **Video süresi verilmezse geçiş uyuşmaz**
> 
> Slider bir sonraki slayta ne zaman geçeceğini **verdiğiniz süreye** göre ayarlar. Video yükleyip süreyi göndermezseniz geçiş videoyla uyuşmaz: klip yarıda kesilir ya da bittikten sonra donuk bir kare kalır. Süreyi videoyla birlikte gönderin.

> **Görsel silinemez, ancak değiştirilir**
> 
> Videonun kaldırma ucu vardır, **görselin yoktur**. Ana görsel slaytın var olma şartıdır: değiştirebilirsiniz ama boş bırakamazsınız. Görselden vazgeçmek istiyorsanız yapılacak şey slaytı silmektir; slaytı silmek görselini ve videosunu da götürür.

## İlgili Makaleler

- [Site Sayfaları](https://dev.wisecp.com/tr/site-sayfalari)
- [Müşteri Yorumları](https://dev.wisecp.com/tr/musteri-yorumlari)
- [Site Menüleri](https://dev.wisecp.com/tr/site-menuleri)
