# Panel Destek Ekranı Kancaları

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

Destek ekranlarının yirmi bir yerleşim noktası: talep detayı, yanıt formu, liste satırları ve departman formları.

## Genel Bakış

Destek ekranlarının yerleşim noktaları burada: talep detayının her bölümü, liste satırları ve departman formları.

Talep detayındaki birkaç noktada yanınıza bir **yetki bilgisi** gelir. Bu bir kapı değildir: çekirdek kendi butonlarını ona göre kapatır, ama sizin çıktınızı engellemez. Yetki isteyen bir şey gösteriyorsanız denetimi kendiniz yapın.

## Referans

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

uiadmin.tickets_detail.header_actions

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

Talep detayının başlık satırında görünür. Dış sistemdeki kayıt numarası ya da kendi kısa yolunuz için uygundur.

Parametreler 1

$ticketarrayAktif talep 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.tickets_detail.header_actions', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Yan sütunun üstü

uiadmin.ticket_detail.sidebar_top

`admin/tickets/detail` yan sütun üstü

Talep detayının yan sütununda, ilk kartın üstünde görünür.

Parametreler 2

$ticketarrayAktif talep kaydı.

$opPrivboolBakan kişinin işlem yetkisi var mı. ? Bu bir **bilgi**dir, kapı değil: yanlış olduğunda çekirdek butonları kapatır ama sizin çıktınızı engellemez. Yetki isteyen bir şey gösteriyorsanız **kendiniz 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.ticket_detail.sidebar_top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Yan sütuna işlem ekleme

uiadmin.ticket_detail.sidebar_actions

`admin/tickets/detail` işlem kutusu

Yan sütundaki işlem kutularının arasında görünür. Kendi talep işleminizi yerleşik olanların yanına koyar.

Parametreler 2

$ticketarrayAktif talep kaydı.

$opPrivboolBakan kişinin işlem yetkisi var mı. ? Bu bir **bilgi**dir, kapı değil: yanlış olduğunda çekirdek butonları kapatır ama sizin çıktınızı engellemez. Yetki isteyen bir şey gösteriyorsanız **kendiniz 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.ticket_detail.sidebar_actions', 10, function ($ticket, $opPriv) {
    // Yetki bilgisi kapi DEGIL: kendiniz sinayin.
    if (!$opPriv) return null;

    return '<div class="operation-box"><button onclick="acmeEscalate('
         . (int) ($ticket['id'] ?? 0) . ')">Acme</button></div>';
});
```

### Talep bilgi kartına satır

uiadmin.ticket_detail.details_card.meta

`admin/tickets/detail` bilgi kartı

Talep bilgi kartının alanları arasında görünür. Kendi üstverinizi çekirdek alanların yanına eklersiniz.

Parametreler 1

$ticketarrayAktif talep kaydı; posta kaynağı, departmanı ve numarası içinde.

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.ticket_detail.details_card.meta', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Konuşmanın üstü

uiadmin.ticket_detail.conversation.before

`admin/tickets/detail` konuşmadan önce

Yanıt akışının hemen üstünde görünür. Dış sistemden gelen bağlam ya da uyarı için uygundur.

Parametreler 1

$ticketarrayAktif talep 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.ticket_detail.conversation.before', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Yanıt formunun üstü

uiadmin.ticket_detail.reply_form.top

`admin/tickets/detail` yanıt formu üstü

Personelin yazacağı yanıt kutusunun üstünde görünür. Yanıt yazmadan önce görülmesi gereken uyarı için uygundur.

Parametreler 2

$ticketarrayAktif talep kaydı.

$opPrivboolBakan kişinin işlem yetkisi var mı. ? Bu bir **bilgi**dir, kapı değil: yanlış olduğunda çekirdek butonları kapatır ama sizin çıktınızı engellemez. Yetki isteyen bir şey gösteriyorsanız **kendiniz 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.ticket_detail.reply_form.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Yanıt formunun araç çubuğu

uiadmin.ticket_detail.reply_form.toolbar

`admin/tickets/detail` form araç çubuğu

Yanıt formunun araç çubuğunda görünür. Kendi ekleme ya da şablon butonunuzu buraya koyarsınız.

Parametreler 1

$ticketarrayAktif talep 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.ticket_detail.reply_form.toolbar', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Yanıt düzenleyicisinin altı

uiadmin.ticket_detail.reply_editor.after

`admin/tickets/detail` düzenleyici altı

Metin düzenleyicinin hemen altında görünür. Ek seçenek ya da gönderim öncesi onay kutusu için uygundur.

Parametreler 1

$ticketarrayAktif talep 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.ticket_detail.reply_editor.after', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Hazır yanıtların altı

uiadmin.ticket_detail.canned_replies.after

`admin/tickets/detail` dil bilgisi ayrı

Hazır yanıt seçeneklerinin altında görünür. Kendi şablon kaynağınızı eklemenin yeri.

Parametreler 2

$ticketarrayAktif talep kaydı.

$client_langstringAktif arayüz dili. Hazır yanıtlar müşterinin diline göre yüklenir; şablonda o değer bulunmadığı için buraya arayüz dili geçirilir. İkisi **aynı olmayabilir**.

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.ticket_detail.canned_replies.after', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### İç not formunun altı

uiadmin.ticket_detail.note_form.bottom

`admin/tickets/detail` iç not formu

İç not yazma kutusunun altında görünür. Notlar müşteriye gösterilmez.

Parametreler 1

$ticketarrayAktif talep 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.ticket_detail.note_form.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Talep detayına yeni sekme

uiadmin.ticket_detail.tabs

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

Talep detayının sekmeleri kurulduktan sonra çalışır. HTML döndürmezsiniz: sekmeyi nesnenin metoduna eklersiniz.

Parametreler 2

$tabobjectSekme nesnesi. Nesne olduğu için bağla işareti olmadan da kalıcı değişir.

$ticketarrayTam talep kaydı.

Dönüş 1

voidDönüş **kullanılmaz**. Bu nokta HTML göstermez.

Dinleyici PHP

```php
Hook::add('ui:admin.ticket_detail.tabs', 10, function ($tab, $ticket) {
    $tab->add('acme', 'Acme', Acme::renderTab((int) ($ticket['id'] ?? 0)));
});
```

### Talep sayfasının en altı

uiadmin.tickets_detail.bottom

`admin/tickets/detail` sayfa sonu

Sayfanın en sonunda görünür.

Parametreler 1

$ticketarrayGörüntülenen talep 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.tickets_detail.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Liste satırına rozet

uiadmin.tickets_list.row_badges

`admin/tickets` satır başına

Talep listesinin **her satırında** görünür. Kendi durum rozetinizi çekirdek rozetlerin yanına koyar.

Parametreler 1

$modelarraySatırın verisi: kimliği, durumu, okunma işareti, departmanı ve başlığı. ? Kanca satır başına çalışır: burada veritabanı sorgusu yapan bir dinleyici **sayfa başına yüzlerce sorgu** üretir. Gerekiyorsa veriyi önceden toplayı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.tickets_list.row_badges', 10, function ($model) {
    // SATIR BASINA calisir: burada sorgu yapmayin, onceden toplayin.
    if (!Acme::isEscalated((int) ($model['id'] ?? 0))) return null;

    return '<span class="badge bg-danger">Acme</span>';
});
```

### Talep listesi araç çubuğu

uiadmin.tickets_list.toolbar

`admin/tickets` parametresiz

Talep 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.tickets_list.toolbar', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Talep listesinde tablodan önce

uiadmin.tickets_list.before_table

`admin/tickets` parametresiz

Talep 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.tickets_list.before_table', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Departman listesi araç çubuğu

uiadmin.department_list.toolbar

`admin/tickets/departments` parametresiz

Departman 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.department_list.toolbar', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Departman listesinde tablodan önce

uiadmin.department_list.before_table

`admin/tickets/departments` parametresiz

Departman 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.department_list.before_table', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Talep oluşturma formundan önce

uiadmin.tickets_edit.before_content

`admin/tickets` müşteri boş olabilir

Personelin müşteri adına talep açtığı formun üstünde görünür.

Parametreler 1

$userarrayForm için önceden seçilmiş müşteri. Müşteri henüz seçilmemişse **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.tickets_edit.before_content', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Talep oluşturma formundan sonra

uiadmin.tickets_edit.bottom

`admin/tickets` müşteri boş olabilir

Aynı formun altında, sayfa sonunda görünür.

Parametreler 1

$userarrayForm için önceden seçilmiş müşteri. Müşteri henüz seçilmemişse **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.tickets_edit.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Departman formundan önce

uiadmin.department_edit.before_content

`admin/tickets/departments` eklemede boş

Departman ekleme ve düzenleme formunun üstünde görünür.

Parametreler 1

$detailarrayDüzenlenen departman kaydı. **Ekleme modunda boştur**: kimliğe erişmeden ö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.department_edit.before_content', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Departman formundan sonra

uiadmin.department_edit.bottom

`admin/tickets/departments` eklemede boş

Aynı formun altında görünür.

Parametreler 1

$detailarrayDüzenlenen departman kaydı. **Ekleme modunda boştur**: kimliğe erişmeden ö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.department_edit.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

## Tuzaklar

> **Yetki bilgisi bir kapı değildir**
> 
> Talep detayındaki yetki parametresi size **bakan kişinin yetkisi olup olmadığını söyler**, çıktınızı kendiliğinden engellemez. Yetkisiz bir yöneticiye işlem butonu göstermek istemiyorsanız koşulu **kendi dinleyicinizde** kurun. Sunucu tarafındaki asıl denetim yine ilgili operation'dadır: buradaki gizleme yalnız görünürlüktür.

> **Satır rozeti her satırda çalışır**
> 
> Liste rozet noktası sayfadaki **her talep için ayrı** çağrılır. İçinde veritabanı sorgusu ya da dış çağrı yapan bir dinleyici, elli satırlık bir sayfada elli sorgu üretir ve listeyi gözle görülür biçimde yavaşlatır. İhtiyacınız olan veriyi tek seferde toplayıp bellekten okuyun.

## İlgili Makaleler

- Destek Talebi Kancaları
- [Talep Görünüm Kancaları](https://dev.wisecp.com/tr/talep-gorunum-kancalari)
- [Yönetim Paneli Kancaları](https://dev.wisecp.com/tr/yonetim-paneli-kancalari)
