Hizmet Detay Kancaları
Müşterinin hizmet detayında gördüğü on dört kanca: sayfa verisi, kartlar, araçlar, ek hizmetler ve metrikler.
Genel Bakış
Hizmet detayı müşterinin en çok baktığı ekrandır ve içeriğinin çoğu modülden gelir: kartlar, araçlar, yetenekler. Buradaki filtreler o çıktıyı ekrana varmadan önce yakalar.
İkinci grup ek hizmetlerdir. Ek hizmetin kendi durum akışı vardır ve ana hizmetten ayrı ilerler: ayrı satın alınır, ayrı faturalanır, ayrı askıya alınır.
Referans
Detay sayfasının verisini değiştirme
Detay sayfasının bütün şablon verisi hazırlandıktan sonra çalışır.
Hook::add('filter:service.detail_data', 10, function (&$data, $service) {
// Var olan anahtarlari bozmadan kendi verinizi ekleyin.
$data['acme_health'] = Acme::health((int) ($service['id'] ?? 0));
});Pano kartlarını değiştirme
Modülün sunduğu kart tanımları hazırlandıktan sonra, ekrana gitmeden önce çalışır.
Hook::add('filter:service.dashboard.cards', 10, function (&$cards, $module) {
// Kendi kartinizi sona degil, ilgili yere koyun.
array_splice($cards, 1, 0, [Acme::usageCard()]);
});Araç listesini değiştirme
Modülün araç listesi hazırlandıktan sonra çalışır.
Hook::add('filter:service.dashboard.tools', 10, function (&$tools, $module) {
// Liste GRUPLUDUR: araclara grubun icinden ulasin.
foreach ($tools as &$group)
$group['tools'] = array_filter($group['tools'] ?? [],
fn ($t) => ($t['key'] ?? '') !== 'rebuild');
});Alan adı yeteneklerini değiştirme
Alan adı detayındaki sekmelerin hangi yetenekleri göstereceği belirlendikten sonra çalışır.
null gelir; metot çağırmadan önce kontrol edin.Hook::add('filter:service.detail_tabs_capabilities', 10,
function (&$capabilities, $service, $module) {
if ($module === null) return; // modulsuz alan adi
// Isaret kapatmak sekmeyi ekrandan gizler.
$capabilities['has_email_forwarding'] = Acme::mailAllowed($service);
});Ek hizmetin açıldığını öğrenme
Hizmete bir ek hizmet eklendikten sonra çalışır.
0 demek bunun bir alan adı ek hizmeti olduğu demektir; ürün kataloğunda karşılığı yoktur.0.Hook::add('action:service.addon.created', 10,
function ($addonRecordId, $serviceId, $addonId, $invoiceId, $totalAmount) {
// addonId 0 ise bu bir ALAN ADI ek hizmetidir, urun degil.
if ($addonId === 0) return;
Crm::addonSold($serviceId, $addonId, (float) $totalAmount);
});Ek hizmet durumunu izleme
Ek hizmetin durumu değiştikten sonra çalışır.
service, addon, addon_id, old_status, new_status, user_id. Ek hizmetin durumu ana hizmetten bağımsızdır: biri askıdayken diğeri çalışıyor olabilir.Hook::add('action:service.addon.status_changed', 10, function ($payload) {
// TEK dizi gelir; eski ve yeni durum icindedir.
if (($payload['new_status'] ?? '') === 'suspended')
Acme::addonOff((int) ($payload['addon_id'] ?? 0));
});Metrik anahtarını durdurma
Müşteri kullanım metriğini açıp kapatırken çalışır. Durdurursanız ne veritabanına ne modüle bir şey gider.
Hook::add('gate:service.metric_toggle', 10,
function ($service, $metricKey, $enable, $label) {
// Etiket hazir gelir: mesaji musterinin gordugu adla yazin.
if (!$enable && Acme::metricRequired($metricKey))
return $label . ' kapatilamaz.';
return null;
});Metrik değişimini izleme
Metrik durumu yazıldıktan sonra çalışır.
Hook::add('action:service.metric_toggled', 10, function ($service, $metricKey, $enable) {
// Kapatilan metrik faturalanmaya devam edebilir: kendi sayacinizi ayarlayin.
Acme::metricState((int) ($service['id'] ?? 0), $metricKey, (bool) $enable);
});Müşterinin detay sayfasını açmasını izleme
Müşteri kendi hizmetinin yönetim sayfasını açtığında çalışır. Sahiplik ve erişim denetimleri çoktan geçilmiştir.
Hook::add('action:service.detail.viewed', 10, function ($service, $serviceId) {
// Hafif tutun: musteri sayfanin acilmasini bekliyor.
Acme::touchLastSeen($serviceId);
});Yöneticinin detay sayfasını açmasını izleme
Yönetici bir hizmet detayını açtığında çalışır. Müşteri tarafındaki ikizle aynı verileri alır, yalnız izleyen kişi farklıdır.
Hook::add('action:service.viewed', 10, function ($service, $service_id) {
// Uzak panelden canli durumu simdiden cekin.
Acme::prefetchStatus($service_id);
});Dosya indirmeyi durdurma
Müşteri bir hizmet dosyası indirmeden önce çalışır. Üç akışın hepsi buradan geçer: gereksinim eki, yazılım paketi ve teslim dosyası.
requirement, package ya da delivery.user_id, service_id. Akışa göre dosya adı, sürüm ve kayıt kimliği eklenir.Hook::add('gate:service.file_download', 10, function ($kind, $ctx) {
if ($kind !== 'package') return null;
// Kota dolduysa engelleyin; gerekce ekrana cikmaz, kendiniz kaydedin.
if (Acme::quotaExceeded((int) ($ctx['user_id'] ?? 0))) {
Acme::log('indirme kotasi doldu', $ctx);
return true;
}
return null;
});İndirilecek dosyayı değiştirme
Dosya akışa verilmeden önce çalışır. Kuruluma özgü anahtarları gömülü bir paket hazırlayıp onu sunabilir, ya da indirmeyi kendi adresinize yönlendirebilirsiniz.
path (diskteki tam yol), name (kaydedilecek ad), link (dış adres), cleanup.kind, user_id, service_id, hizmet kaydı ve ürün kimliği.cleanup koyarsanız gönderim bittikten sonra yalnız dosya silinir, üst dizin kalır.Hook::add('filter:service.file_download.source', 10, function (&$source, &$ctx) {
if (($ctx['kind'] ?? '') !== 'package') return;
// Kuruluma ozgu anahtari gomulmus paketi hazirlayin ve sonra sildirin.
$source['path'] = Acme::buildPackage((int) ($ctx['service_id'] ?? 0));
$source['name'] = 'acme-setup.zip';
$source['cleanup'] = true;
});Faturalama profili atamasını durdurma
Müşteri bir hizmete faturalama profili atarken, kayıt yazılmadan önce çalışır. Alan adları da bu kapıdan geçer.
Hook::add('gate:service.billing_profile_assign', 10,
function ($service, $profileId, $uid) {
// Dondurulmus hesapta profil degistirmeye izin vermeyin.
if (Acme::frozen($uid)) return 'Hesabiniz incelemede, profil degistirilemez.';
return null;
});Faturalama profili atamasını izleme
Atama kaydedildikten sonra çalışır. Kapı geçilmiş, değer yazılmıştır.
Hook::add('action:service.billing_profile_assigned', 10,
function ($service, $profileId, $profileName, $uid) {
Acme::syncAccounting((int) ($service['id'] ?? 0), $profileId);
});Tuzaklar
Araç filtresi düz bir liste değil, grupların listesini verir; her grubun içinde kendi araçları durur. Doğrudan gezmeye çalışan bir dinleyici araç bulamaz, çünkü elindeki her eleman bir gruptur.
Alan adı yetenek filtresinde üçüncü parametre boş gelebilir: modülü olmayan alan adları vardır. Kontrol etmeden metot çağırmak sayfayı düşürür. Ayrıca buraya yazdığınız her işaret ekrana geri aktarılır, yani bir işareti kapatmak sekmeyi görünmez yapar.
Ek hizmetin kendi durumu, kendi faturası ve kendi askı akışı vardır. Ana hizmet çalışırken ek hizmet askıda olabilir ya da tersi. Ana hizmetin durumuna bakıp ek hizmetin de açık olduğunu varsaymak ödenmemiş bir yeteneği açık bırakır.
Ek hizmet olayında ürün kimliği 0 ise bu bir alan adı ek hizmetidir (DNS yönetimi, gizlilik, yönlendirme) ve ürün kataloğunda karşılığı yoktur. Ürün okumaya çalışan dinleyici burada boş bulur.
İlgili Makaleler
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.