# Panel Ekran Verisi Kancaları

https://dev.wisecp.com/tr/panel-ekran-verisi-kancalari

Müşteri, hizmet ve araç ekranlarının gösterdiklerinin on üç kancası.

## Genel Bakış

Panel ekranlarının gösterdiği veriyi değiştiren kancalar burada: müşteri detayı ve listesi, hizmet yönetim kartları, eklenti butonları, kritik bildirimler ve tema sürüm sorgusu.

İkisi diğerlerinden farklıdır: profil sekmeleri ve güvenlik akordiyonu size dizi değil **bileşen nesnesi** verir; ekleme metot çağrısıyla yapılır.

## Referans

### Müşteri ek bilgisini değiştirme

filteradmin.client_detail.info

`admin/users` bağla geçer

Müşteri detay sayfasının ek bilgi alanları okunduktan sonra çalışır.

Parametreler 2

$client_infoarraybağlaEk bilgi çiftleri. Var olan anahtarları ezebilir ya da yenisini ekleyebilirsiniz.

$user_idintMüşterinin kimliği.

Dönüş 1

voidDönüş yoksayılır; verinin üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:admin.client_detail.info', 10, function (&$client_info, $user_id) {
    $client_info['acme_tier'] = Acme::tierOf($user_id);
});
```

### Müşteri profiline alt sekme ekleme

filteradmin.client_detail.profile_subtabs

`admin/users` bileşen nesnesi

Müşteri profilinin dikey sekmeleri kurulurken çalışır. Kendi sekmenizi buradan eklersiniz.

Parametreler 3

$profileTabobjectbağlaSekme bileşeni. Dizi değil **nesnedir**: sekmeyi diziye eleman ekleyerek değil, nesnenin ekleme metodunu çağırarak koyarsınız.

$userarrayAktif müşteri kaydı.

$user_idintMüşterinin kimliği.

Dönüş 1

voidDönüş yoksayılır; değişiklik nesnenin metodunu çağırmakla olur.

Dinleyici PHP

```php
Hook::add('filter:admin.client_detail.profile_subtabs', 10,
    function (&$profileTab, $user, $user_id) {
        // Dizi degil nesne: metodunu cagirin.
        $profileTab->add('acme', 'Acme', Acme::renderPanel($user_id));
    });
```

### Güvenlik bölümüne kısım ekleme

filteradmin.client_detail.security_accordion

`admin/users` bileşen nesnesi

Müşterinin güvenlik ayarları akordiyonu kurulurken çalışır.

Parametreler 3

$secAccordionobjectbağlaAkordiyon bileşeni; ekleme metoduyla kısım koyarsınız.

$client_infoarrayMüşterinin ek bilgileri.

$user_idintMüşterinin kimliği.

Dönüş 1

voidDönüş yoksayılır; değişiklik nesne üzerinden yapılır.

Dinleyici PHP

```php
Hook::add('filter:admin.client_detail.security_accordion', 10,
    function (&$secAccordion, $client_info, $user_id) {
        $secAccordion->add('acme-sessions', 'Acme oturumlari', Acme::sessions($user_id));
    });
```

### Müşteri istatistiklerini değiştirme

filteradmin.client_detail.statistics

`admin/users` bağla geçer

Müşteri sayfasındaki sayaçlar hesaplandıktan sonra çalışır.

Parametreler 2

$user_statsarraybağlaİstatistikler: etkin ve pasif hizmet, fatura ve talep sayıları.

$user_idintMüşterinin kimliği.

Dönüş 1

voidDönüş yoksayılır; verinin üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:admin.client_detail.statistics', 10, function (&$user_stats, $user_id) {
    $user_stats['acme_open_cases'] = Acme::openCases($user_id);
});
```

### Müşteri listesi filtrelerini değiştirme

filteradmin.client_list.filters

`admin/users` model desteği şart

Müşteri listesinin filtre ölçütleri kurulduktan sonra çalışır.

Parametreler 1

$dynamic_filterarraybağlaFiltre ölçütleri: grup, durum, dil, ülke, adres ve tarih. ? Eklediğiniz yeni anahtarın **listeleme sorgusunda da karşılığı olmalıdır**; yoksa filtre görünür ama hiçbir şeyi daraltmaz.

Dönüş 1

voidDönüş yoksayılır; verinin üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:admin.client_list.filters', 10, function (&$dynamic_filter) {
    // Yeni anahtarin listeleme sorgusunda karsiligi olmali.
    $dynamic_filter['acme_tier'] = Acme::tierFilterValue();
});
```

### Hizmet yönetim kartlarını değiştirme

filteradmin.service_detail.management_cards

`admin/services` iki liste birlikte

Hizmet detayındaki yönetim kartları hazırlandıktan sonra çalışır. Kendi kartınızı ekleyebilir, var olanı gizleyebilir ya da sırasını değiştirebilirsiniz.

Parametreler 1

$contextarraybağlaİki liste bir arada: `cards` kart içerikleri, `layout` hangi kartın hangi sütunda ve hangi sırada görüneceği. ? **İkisini birlikte güncelleyin**: yerleşimde adı geçmeyen kart görünmez, karşılığı olmayan yerleşim anahtarı sessizce atlanır.

Dönüş 1

voidDönüş yoksayılır; bağlamın üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:admin.service_detail.management_cards', 10, function (&$context) {
    // IKISINI birlikte guncelleyin: kart ve yerlesim.
    $context['cards']['acme'] = Acme::renderCard($context['service'] ?? []);
    $context['layout']['right'][] = 'acme';
});
```

### Eklenti ayar butonlarını değiştirme

filteradmin.addon_configure.buttons

`admin/tools` boşaltmak hepsini siler

Eklenti ayar sayfasının butonları hazırlandıktan sonra çalışır.

Parametreler 1

$buttonsarraybağlaButon haritası; her biri metnini, sınıfını, simgesini ve tıklama işlemini taşır. Diziyi tamamen boşaltırsanız **hiç buton görünmez**.

Dönüş 1

voidDönüş yoksayılır; verinin üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:admin.addon_configure.buttons', 10, function (&$buttons) {
    // Tamamen bosaltmak hic buton birakmaz.
    $buttons['acme-sync'] = [
        'text'    => 'Acme esitle',
        'class'   => 'btn btn-outline-primary',
        'icon'    => 'bi bi-arrow-repeat',
        'onclick' => 'acmeSync()',
    ];
});
```

### Yüklenen görselin adresini değiştirme

filteradmin.editor_upload_url

`admin/tools` bağla geçer

Metin düzenleyiciye yüklenen görselin adresi üretildikten sonra çalışır. Görselleri bir dağıtım ağına taşımanın yolu budur.

Parametreler 2

$urlstringbağlaÜretilen adres. Dokunmazsanız yerel adres kalır.

$file_pathstringDosyanın sunucudaki tam yolu.

Dönüş 1

voidDönüş yoksayılır; verinin üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:admin.editor_upload_url', 10, function (&$url, $file_path) {
    $url = Acme::pushToCdn($file_path) ?: $url;
});
```

### Görsel yüklemesini izleme

actionadmin.editor_image_uploaded

`admin/tools` adres filtreden sonra

Metin düzenleyiciye bir görsel yüklendikten sonra çalışır.

Parametreler 2

$file_pathstringDosyanın sunucudaki tam yolu.

$urlstringNihai adres; **adres filtresi çalıştıktan sonraki** hâlidir.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:admin.editor_image_uploaded', 10, function ($file_path, $url) {
    // Adres filtre SONRASI halidir.
    Acme::noteAsset($file_path, $url);
});
```

### Kritik bildirim listesine ekleme

filteradmin.notifications.critical

`admin/inc` sabit öğe şekli

Panel başlığındaki kritik bildirim listesi hazırlandıktan sonra çalışır.

Parametreler 1

$critical_transaction_notificationsarraybağlaBildirim öğeleri. Her öğe şablonun beklediği alanları taşımalıdır: kimliği, simgesi, tipi, iletisi, tarihi, okunma durumu ve butonları. Eksik alanlı bir öğe ekranı bozar.

Dönüş 1

voidDönüş yoksayılır; verinin üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:admin.notifications.critical', 10, function (&$critical_transaction_notifications) {
    // Sablonun bekledigi butun alanlari doldurun.
    foreach (Acme::criticalAlerts() as $a) $critical_transaction_notifications[] = $a;
});
```

### Panel bildirimini izleme

actionadmin.notified

`Notification` sıfır = yazılmadı

Panele bir sistem bildirimi düştüğünde çalışır.

Parametreler 4

$namestringOlayın adı.

$dataarrayOlayın verisi: ileti yer tutucuları ve tekrar denetimi için kullanılan bilgi.

$levelstringSeviye: hata, uyarı, bilgi ya da başarı.

$event_idintOluşan kaydın kimliği. **Sıfır ise kayıt yazılmamıştır**: ya aynı bildirim zaten vardı ya da yazma başarısız oldu. Kimliği kullanmadan önce sınayın.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:admin.notified', 10, function ($name, $data, $level, $event_id) {
    // Sifir = kayit yazilmadi.
    if ($level === 'error' && $event_id) Acme::page($name, $data);
});
```

### Tema sürüm sorgusunu devralma

filteradmin.theme_version_check

`admin/settings` ilk dolu kazanır

Bir temanın yeni sürümü sorulmadan önce çalışır. Yanıt döndürürseniz **uzak çağrı hiç yapılmaz**.

Parametreler 2

$keystringTema klasörünün anahtarı.

$manifestarrayTemanın tanıtım verisi: güncelleme adresi ve kurulu sürümü.

Dönüş 1

string|null**Dolu bir metin uzak sunucunun ham yanıtı sayılır** ve çağrı atlanır. Öncelik sırasına göre **ilk** dolu dönüş kazanır, kalanlar hiç çalışmaz. Boş dönüşte çekirdek normal isteğini atar.

Dinleyici PHP

```php
Hook::add('filter:admin.theme_version_check', 10, function ($key, $manifest) {
    // Dolu donerseniz uzak cagri HIC yapilmaz.
    if (!str_starts_with($key, 'Acme')) return null;

    return Acme::versionJson($key);
});
```

### Tema sürüm yanıtını düzenleme

filteradmin.theme_version_response

`admin/settings` ham yanıt

Sürüm yanıtı alındıktan sonra, çözülmeden önce çalışır. Kardeşi kaynağı seçer, bu kanca **gelen yanıtı düzenler**.

Parametreler 2

$keystringbağlaTema anahtarı. Bağla geçer ama **tüketilmiştir**: değiştirmenin etkisi yoktur.

$manifestarraybağlaTema tanıtım verisi; bu da tüketilmiştir.

Dönüş 1

voidDönüş yoksayılır; ham yanıtın üzerine yazarsınız. Çekirdek sonra onu çözer; sürüm alanı yoksa sonuç boş sayılır.

Dinleyici PHP

```php
Hook::add('filter:admin.theme_version_response', 10, function (&$key, &$manifest) {
    // Iki parametre de tuketilmis: degistirmenin etkisi yok.
    Acme::noteVersionCheck($key);
});
```

## Tuzaklar

> **Kart eklemek iki listeyi birden ister**
> 
> Hizmet yönetim kartlarında içerik bir listede, **yerleşim başka bir listede** durur. Yalnız içeriği eklerseniz kart hiç görünmez; yalnız yerleşime ad yazarsanız o ad sessizce atlanır. İkisini birlikte güncelleyin.

> **Sekme ve akordiyon dizi değil nesnedir**
> 
> Profil alt sekmeleri ve güvenlik akordiyonu size **bileşen nesnesi** verir. Diziye eleman ekler gibi davranan bir dinleyici hata üretir; ekleme, nesnenin kendi metoduyla yapılır.

## İlgili Makaleler

- [Yönetim Paneli Kancaları](https://dev.wisecp.com/tr/yonetim-paneli-kancalari)
- [Müşteri Hesabı Kancaları](https://dev.wisecp.com/tr/musteri-hesabi-kancalari)
- [Kancalar Nasıl Çalışır](https://dev.wisecp.com/tr/kancalar-nasil-calisir)
