# Panel Hizmet Ekranı Kancaları

https://dev.wisecp.com/tr/panel-hizmet-ekrani-kancalari

Hizmet ekranlarının on sekiz yerleşim noktası: detay sekmeleri, başlık alanı ve yan listelerin araç çubukları.

## Genel Bakış

Hizmet ekranlarının yerleşim noktaları burada: detay sayfasının her sekmesi, başlık alanı ve yan listelerin araç çubukları.

Detay noktalarının çoğu hizmet kaydını verir; bazıları yanına **boş gelebilecek** bir şey ekler: ürün silinmişse ürün kaydı, hizmet sunucusuzsa modül örneği. Bunlara erişmeden önce sınamak gerekir.

## Referans

### Hizmet başlığına rozet ya da buton

uiadmin.service_detail.header_actions

`admin/services/detail` başlık alanı

Hizmet detayının başlık satırında görünür. Uzak paneldeki durumu ya da kendi kısa yolunuzu buraya koyarsınız.

Parametreler 1

$servicearrayAktif hizmet kaydı.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.service_detail.header_actions', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Hizmet detayına yeni sekme

uiadmin.service_detail.tabs

`admin/services/detail` nesne, dizi değil

Çekirdek sekmeler kurulduktan sonra çalışır. HTML döndürmezsiniz: sekmeyi nesnenin metoduna eklersiniz. İki işaret hangi sekmenin uygun olduğunu gösterir.

Parametreler 4

$tabobjectSekme nesnesi.

$servicearrayTam hizmet kaydı.

$is_domainboolHizmet bir alan adı mı. Alan adında sunucu sekmeleri anlamsızdır; buna göre karar verin.

$has_moduleboolHizmet bir sunucuya bağlı mı. Yanlışsa uzak panel verisi çeken bir sekme boş çıkar.

Dönüş 1

voidDönüş **kullanılmaz**. Bu nokta HTML göstermez: sekme nesnenin metoduyla eklenir.

Dinleyici PHP

```php
Hook::add('ui:admin.service_detail.tabs', 10,
    function ($tab, $service, $is_domain, $has_module) {
        // Sunucusu olmayan hizmette uzak panel sekmesi bos cikar.
        if (!$has_module) return;

        $tab->add('acme', 'Acme', Acme::renderTab((int) ($service['id'] ?? 0)));
    });
```

### Bilgiler sekmesinin altı

uiadmin.service_detail.details.bottom

`admin/services/detail` ürün boş olabilir

Hizmet bilgilerinin altında görünür.

Parametreler 2

$servicearrayAktif hizmet kaydı.

$productarrayHizmetin bağlı olduğu ürün. Ürün silinmişse ya da hizmet ürüne bağlı değilse **boş gelir**.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.service_detail.details.bottom', 10, function ($service, $product) {
    // Urun BOS gelebilir.
    if (!$product) return null;

    return '<div class="mt-3">' . htmlspecialchars(Acme::planNote($product)) . '</div>';
});
```

### Yönetim sekmesinin altı

uiadmin.service_detail.management.bottom

`admin/services/detail` modül boş olabilir

Sunucu yönetim araçlarının altında görünür.

Parametreler 2

$servicearrayAktif hizmet kaydı.

$moduleobjectYüklenmiş sunucu modülü. ? **Boş gelebilir**: hizmetin sunucusu yoksa ya da modül yüklenemediyse. Metot çağırmadan önce sınayın.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.service_detail.management.bottom', 10, function ($service, $module) {
    // Modul BOS gelebilir: metot cagirmadan once sinayin.
    if (!$module) return null;

    return Acme::renderRemotePanel($module, $service);
});
```

### Eklentiler sekmesinin üstü

uiadmin.service_detail.addons.top

`admin/services/detail` sekme üstü

Hizmet eklentilerinin listesinin üstünde görünür.

Parametreler 1

$servicearrayAktif hizmet kaydı.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.service_detail.addons.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Gereksinimler sekmesinin altı

uiadmin.service_detail.requirements.bottom

`admin/services/detail` doldurulmuş yanıtlar

Sipariş sırasında müşteriden istenen bilgilerin altında görünür.

Parametreler 2

$servicearrayAktif hizmet kaydı.

$requirementsarrayHizmete ait doldurulmuş gereksinimler.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.service_detail.requirements.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Geçmiş sekmesinin altı

uiadmin.service_detail.history.bottom

`admin/services/detail` geçmiş altı

Hizmet geçmişinin altında görünür. Kendi kaydınızı çekirdek geçmişin yanına koymanın yeri.

Parametreler 1

$servicearrayAktif hizmet kaydı.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.service_detail.history.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Paket değişimi sekmesinin üstü

uiadmin.service_detail.upgrade.top

`admin/services/detail` kalan hesabı elinizde

Paket yükseltme ekranının üstünde görünür. Kalan gün ve tutar hesabı elinizdedir: kendi fiyat açıklamanızı buradan gösterebilirsiniz.

Parametreler 3

$servicearrayAktif hizmet kaydı.

$productarrayMevcut ürün kaydı.

$remainingarrayKalan hesabı: kullanılan gün, kalan gün ve kalan tutar.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.service_detail.upgrade.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Transfer sekmesinin altı

uiadmin.service_detail.transfer.bottom

`admin/services/detail` gizli değer taşır

Alan adı transfer ekranının altında görünür.

Parametreler 2

$servicearrayAktif alan adı kaydı.

$service_optionsarrayHizmet ayarları: transfer kilidi ve **yetki kodu**. ? Yetki kodu gizli bir değerdir: ekrana ya da kendi kaydınıza yazmayın.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.service_detail.transfer.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Doğrulama sekmesinin altı

uiadmin.service_detail.verification.bottom

`admin/services/detail` alan adı doğrulaması

Alan adı iletişim doğrulaması ekranının altında görünür.

Parametreler 2

$servicearrayAktif alan adı kaydı.

$service_idintHizmetin kimliği.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.service_detail.verification.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Hizmet sayfasının en altı

uiadmin.service_detail.bottom

`admin/services/detail` sayfa sonu

Sayfanın en sonunda görünür. Sekmeye bağlı olmayan bir panel için uygundur.

Parametreler 1

$servicearrayGörüntülenen hizmet kaydı.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.service_detail.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Hizmet listesi araç çubuğu

uiadmin.service_list.toolbar

`admin/services` parametresiz

Hizmet listesinin üstündeki buton grubunda görünür.

Parametreler 0

—Parametre almaz.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.service_list.toolbar', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Hizmet listesinde tablodan önce

uiadmin.service_list.before_table

`admin/services` parametresiz

Hizmet tablosunun hemen üstünde görünür.

Parametreler 0

—Parametre almaz.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.service_list.before_table', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Eklenti listesi araç çubuğu

uiadmin.service_addon_list.toolbar

`admin/services` parametresiz

Hizmet eklentileri listesinin araç çubuğunda görünür.

Parametreler 0

—Parametre almaz.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.service_addon_list.toolbar', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Eklenti listesinde tablodan önce

uiadmin.service_addon_list.before_table

`admin/services` parametresiz

Eklenti tablosunun hemen üstünde görünür.

Parametreler 0

—Parametre almaz.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.service_addon_list.before_table', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### İptal talepleri araç çubuğu

uiadmin.service_cancellation_list.toolbar

`admin/services` parametresiz

İptal talepleri listesinin araç çubuğunda görünür.

Parametreler 0

—Parametre almaz.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.service_cancellation_list.toolbar', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Devir listesi araç çubuğu

uiadmin.service_transfer_list.toolbar

`admin/services` parametresiz

Hizmet devirleri listesinin araç çubuğunda görünür.

Parametreler 0

—Parametre almaz.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.service_transfer_list.toolbar', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Paket değişimi listesi araç çubuğu

uiadmin.service_updowngrade_list.toolbar

`admin/services` parametresiz

Paket yükseltme ve düşürme listesinin araç çubuğunda görünür.

Parametreler 0

—Parametre almaz.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.service_updowngrade_list.toolbar', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

## Tuzaklar

> **Modül örneği boş gelebilir**
> 
> Yönetim sekmesindeki modül parametresi, hizmetin sunucusu yoksa ya da modül yüklenemediyse **boştur**. Doğrudan metot çağıran bir dinleyici o durumda ölümcül hata üretir ve **bütün sayfayı** düşürür — kendi paneliniz değil, yöneticinin hizmet ekranı açılmaz.

> **Transfer noktası yetki kodu taşır**
> 
> Transfer sekmesinin ayar dizisinde alan adının **yetki kodu** bulunur. O kodu gören biri alan adını başka bir kuruluşa taşıyabilir: ekrana yazmayın, günlüğe düşürmeyin, dış servise göndermeyin.

## İlgili Makaleler

- [Panel Ekran Verisi Kancaları](https://dev.wisecp.com/tr/panel-ekran-verisi-kancalari)
- [Hizmet Kancaları](https://dev.wisecp.com/tr/hizmet-yasam-dongusu-kancalari)
- [Yönetim Paneli Kancaları](https://dev.wisecp.com/tr/yonetim-paneli-kancalari)
