# Panel Müşteri Ekranı Kancaları

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

Müşteri ekranlarının on dokuz yerleşim noktası: özet kartları, sekmeler, liste araç çubuğu ve oluşturma formu.

## Genel Bakış

Müşteri ekranlarının yerleşim noktaları burada. Hepsi aynı biçimde çalışır: döndürdüğünüz HTML o noktada görünür, bir şey eklemek istemediğinizde `null` dönersiniz.

İki nokta bu kalıbın dışındadır. **Sekme ekleme** HTML değil bir nesne alır; ekleme metot çağrısıyla olur. **Evrak alanı formu** ise sayfa açılırken bir kez toplanır ve sabitlenir, düzenlenen alana göre değişemez.

## Referans

### Özet sekmesinin en üstü

uiadmin.client_detail.summary.top

`admin/users/detail` kartlardan önce

Müşteri özetinin en üstünde, istatistik kartlarından önce görünür. Risk bandı, son temas notu ya da önemli müşteri uyarısı için doğru yer.

Parametreler 3

$userarrayMüşterinin tam kaydı.

$user_idintMüşterinin kimliği.

$user_statsarrayHesaplanmış sayaçlar: etkin ve pasif hizmet, fatura, talep.

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.client_detail.summary.top', 10,
    function ($user, $user_id, $user_stats) {
        $score = Acme::riskScore($user_id);
        if ($score < 70) return null;   // eklenecek bir sey yoksa null

        return '<div class="alert alert-warning">Risk skoru: ' . (int) $score . '</div>';
    });
```

### Müşteri bilgi kartına satır ekleme

uiadmin.client_detail.summary.info_card

`admin/users/detail` kart içi satır

Bilgi kartının son satırından sonra görünür. Dış sistemdeki müşteri numarası, kaynak ya da hesap yöneticisi gibi bir alan eklemenin yeri.

Parametreler 3

$userarrayMüşterinin tam kaydı.

$client_infoarrayMüşterinin ek bilgi çiftleri.

$user_idintMüşterinin 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.client_detail.summary.info_card', 10,
    function ($user, $client_info, $user_id) {
        $crm = Acme::crmId($user_id);
        if ($crm === '') return null;

        // Cikti kacissiz basilir: dis degeri kendiniz temizleyin.
        return '<div class="row"><div class="col-5">CRM</div><div class="col-7">'
             . htmlspecialchars($crm) . '</div></div>';
    });
```

### Aksiyon kartına işlem ekleme

uiadmin.client_detail.summary.action_cards

`admin/users/detail` işlem kutusu

Aksiyon kartındaki son işlemin ardından görünür. Kendi toplu işleminizi yerleşik olanların yanına koyar.

Parametreler 2

$userarrayMüşterinin tam kaydı.

$user_idintMüşterinin 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.client_detail.summary.action_cards', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Özet sekmesinin altı

uiadmin.client_detail.summary.bottom

`admin/users/detail` kartlardan sonra

Özet sekmesinin kartları bittikten sonra görünür. Kendi kartınızı ya da bilgi panelinizi eklemenin yeri.

Parametreler 2

$userarrayMüşterinin tam kaydı.

$user_idintMüşterinin 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.client_detail.summary.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Başlık alanına rozet ya da buton

uiadmin.client_detail.header_actions

`admin/users/detail` rozetlerin yanına

Sayfa başlığındaki durum rozetlerinin sonunda görünür. Kendi rozetinizi ya da kısa yol butonunuzu buraya koyarsınız.

Parametreler 3

$userarrayMüşterinin tam kaydı.

$user_idintMüşterinin kimliği.

$client_infoarrayÇözümlenmiş müşteri bilgisi: tipi, vergi durumu ve koruma işaretleri.

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

### Müşteri detayına yeni sekme

uiadmin.client_detail.tabs

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

Çekirdek sekmelerin hepsi kurulduktan sonra çalışır. Diğer yerleşim noktalarının aksine burada **HTML döndürmezsiniz**: sekmeyi nesnenin metoduna eklersiniz.

Parametreler 3

$tabobjectSekme nesnesi; ekleme metoduyla yeni sekme koyarsınız.

$userarrayMüşterinin tam kaydı.

$user_idintMüşterinin kimliği.

Dönüş 1

voidDönüş **kullanılmaz**. Bu nokta HTML göstermez: değişiklik nesnenin metodunu çağırmakla olur. HTML döndüren bir dinleyici burada sessizce hiçbir şey yapmaz.

Dinleyici PHP

```php
Hook::add('ui:admin.client_detail.tabs', 10, function ($tab, $user, $user_id) {
    // HTML DONDURMEYIN: sekme nesneye eklenir.
    $tab->add('acme', 'Acme', Acme::renderTab($user_id));
});
```

### Profil sekmesinin altı

uiadmin.client_detail.profile.bottom

`admin/users/detail` profil altı

Profil sekmesinin dikey sekmeleri işlendikten sonra görünür. Kimlik doğrulama özeti ya da ek tercih bölümü için uygundur.

Parametreler 3

$userarrayMüşterinin tam kaydı.

$client_infoarrayMüşterinin ek bilgileri.

$user_idintMüşterinin 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.client_detail.profile.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Kişiler sekmesinin üstü

uiadmin.client_detail.contacts.top

`admin/users/detail` sekme üstü

Adres ve kişi listesinin üstünde görünür. Adres doğrulama durumu ya da eksik fatura adresi uyarısı için uygundur.

Parametreler 3

$userarrayMüşterinin tam kaydı.

$user_idintMüşterinin kimliği.

$user_addressesarrayMüşterinin adres ve kişi kayıtları.

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

### Alt kullanıcılar sekmesinin üstü

uiadmin.client_detail.subusers.top

`admin/users/detail` sekme üstü

Alt kullanıcı listesinin üstünde görünür. Kabul edilmemiş davet uyarısı ya da izin politikası bildirimi için uygundur.

Parametreler 2

$userarrayMüşterinin tam kaydı.

$user_idintMüşterinin 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.client_detail.subusers.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Faturalar sekmesinin üstü

uiadmin.client_detail.invoices.top

`admin/users/detail` sekme üstü

Fatura tablosunun üstünde görünür. Açık bakiye uyarısı ya da otomatik ödeme durumu için uygundur.

Parametreler 1

$user_idintMüşterinin 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.client_detail.invoices.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Hizmetler sekmesinin üstü

uiadmin.client_detail.orders.top

`admin/users/detail` sekme üstü

Hizmet ve sipariş listesinin üstünde görünür. Yenileme uyarısı ya da kurulum hatası bandı için uygundur.

Parametreler 1

$user_idintMüşterinin 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.client_detail.orders.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Destek sekmesinin üstü

uiadmin.client_detail.tickets.top

`admin/users/detail` sekme üstü

Talep tablosunun üstünde görünür. Açık talep sayısı ya da memnuniyet özeti için uygundur.

Parametreler 1

$user_idintMüşterinin 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.client_detail.tickets.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Notlar sekmesinin üstü

uiadmin.client_detail.notes.top

`admin/users/detail` sekme üstü

Not listesinin üstünde görünür. Dış kaynaktan gelen sistem notlarını göstermenin yeri.

Parametreler 2

$user_idintMüşterinin kimliği.

$notesarrayMüşterinin notları.

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

### Müşteri sayfasının en altı

uiadmin.client_detail.bottom

`admin/users/detail` sayfa sonu

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

Parametreler 2

$userarrayMüşterinin tam kaydı.

$user_idintMüşterinin 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.client_detail.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Müşteri listesi araç çubuğu

uiadmin.client_list.toolbar

`admin/users` parametresiz

Listenin üstündeki buton grubunda görünür. Dışa aktarma ya da kendi toplu işleminiz için buton eklersiniz.

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.client_list.toolbar', 10, function () {
    return '<a href="/acme/export" class="btn btn-outline-secondary">'
         . '<i class="bi bi-download"></i> Acme</a>';
});
```

### Müşteri listesinde tablodan önce

uiadmin.client_list.before_table

`admin/users` tablodan önce

İstatistik kartı ve filtre panelinden sonra, tablodan hemen önce 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.client_list.before_table', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Müşteri oluşturma formundan önce

uiadmin.client_create.before_content

`admin/users` formdan önce

Yeni müşteri formunun üstünde görünür. Bilgilendirme şeridi ya da ek talimat için uygundur.

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

### Müşteri oluşturma formundan sonra

uiadmin.client_create.bottom

`admin/users` formdan sonra

Yeni müşteri formu bittikten sonra, sayfa sonunda 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.client_create.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Evrak alanı formuna ek bölüm

uiadmin.document_field.form

`admin/users` bir kez toplanır

Evrak doğrulama alanlarının ekleme ve düzenleme penceresine ek bölüm koyar. Kendi alan tipinizi tanıttıysanız ayarlarını buradan sorarsınız.

Parametreler 0

—Parametre almaz.

Dönüş 1

string|nullDöndürdüğünüz HTML görünür. ? Pencere tarayıcı tarafında kurulduğu için çıktı **sayfa açılırken bir kez** toplanır ve sabit olarak gömülür: hangi alanın düzenlendiğine göre **değişemez**. Alana özgü davranış gerekiyorsa hepsini gösterip seçimi kendi kodunuzla yapın.

Dinleyici PHP

```php
Hook::add('ui:admin.document_field.form', 10, function () {
    // Cikti bir kez toplanir: alana gore degisemez.
    return '<div class="mb-3"><label>Acme dogrulama</label>'
         . '<input class="form-control" name="acme_rule"></div>';
});
```

## Tuzaklar

> **Çıktı kaçışsız girer**
> 
> Bu noktalarda döndürdüğünüz metin olduğu gibi sayfaya girer. Dışarıdan gelen bir değeri (müşteri adı, dış sistem yanıtı, form girdisi) doğrudan gömerseniz **panelde kod çalıştırma açığı** yaratırsınız. Değeri kendiniz kaçırın.

> **Sekme noktası HTML kabul etmez**
> 
> Sekme ekleme noktası diğerlerine benzer görünse de **HTML göstermez**: size bir nesne verir ve sekme onun metoduyla eklenir. HTML döndüren bir dinleyici burada sessizce hiçbir şey yapmaz — hata da almazsınız, bu yüzden fark edilmesi zordur.

## İlgili Makaleler

- [Panel Ekran Verisi Kancaları](https://dev.wisecp.com/tr/panel-ekran-verisi-kancalari)
- [Müşteri Hesabı Kancaları](https://dev.wisecp.com/tr/musteri-hesabi-kancalari)
- [Yönetim Paneli Kancaları](https://dev.wisecp.com/tr/yonetim-paneli-kancalari)
