WiseCP'de çekirdeğe dokunmadan özelleştirme: hook'larla ilk adım

Semih2 dk okuma

WiseCP'yi güncellemelerle birlikte yaşayacak şekilde genişletmek için modül, tema, hook ve API farkı; action, filter ve gate hook'larıyla pratik örnekler.

Bir hosting firmasının WiseCP’den istediği şey genellikle küçüktür: “Sipariş gelince muhasebeye haber versin”, “Şu durumda ödeme adımı dursun”, “Fatura oluşunca bir SMS gitsin”. Küçük isteklerin en büyük tuzağı ise çekirdek dosyayı açıp oraya iki satır eklemektir. İki satır işi görür; ta ki bir sonraki güncelleme o dosyanın üzerine yazana kadar.

Dört kapı

WiseCP’yi genişletmenin desteklenen dört yolu var:

Kapı Ne işe yarar?
Modül Platformda olmayan bir yetenek: yeni bir panel, ödeme sağlayıcı, alan adı firması, SMS servisi
Tema Web sitesinin ve müşteri panelinin tamamı
Hook Var olan davranışa tepki vermek, bir değeri değiştirmek, bir işlemi durdurmak
API Dış bir sistemin müşteri, sipariş ve hizmetleri okuyup yazması

Gerçek işlerin çoğu birden fazla kapıyı kullanır. Ama “zaten olan bir şeyi biraz farklı yap” türündeki isteklerin çoğunun cevabı hook’tur.

Hook aileleri

Hook adları, ne yaptıklarını önekleriyle söyler:

  • action: bir şey oldu, haberin olsun. Dönüş değeri önemsenmez.
  • filter: bir değeri değiştirmene izin veriliyor.
  • gate: işlemi durdurabilirsin. Boş olmayan bir metin döndürürsen işlem durur ve o metin kullanıcıya gösterilir.
  • ui: sayfanın belli bir yerine HTML basabilirsin.

Örnek 1: her yeni faturada haber ver

Dinleyici dosyası coremio/hooks klasörüne ya da bir modülün hooks.php dosyasına konur.

<?php
// coremio/hooks/fatura-bildirimi.php
Hook::add('action:invoice.created.any', 10, function ($invoice_id, $data) {
    // Yazma başarısız olduysa kimlik 0 gelir; önce onu kontrol et.
    if (!$invoice_id) return;

    // Örneğin muhasebe sistemine kısa bir bildirim gönder.
});

Örnek 2: ödeme adımında kural koy

gate:order.checkout, müşteri ödeme adımına geçerken çalışır. Boş olmayan bir metin döndürmek işlemi durdurur:

<?php
// coremio/hooks/sepet-siniri.php
Hook::add('gate:order.checkout', 10, function ($member, $cart) {
    if (count($cart) > 20) {
        return 'Tek seferde en fazla 20 ürün sipariş edilebilir.';
    }
    return null;
});

Belgelerin önemli bir uyarısı var: bu noktada sepet satırları henüz fiyatlanmamıştır. Tutara bağlı bir kural yazacaksanız fiyatı kendiniz hesaplamanız ya da özet aşamasındaki filtreyi kullanmanız gerekir. Bu tür ayrıntılar, hook’u yazmadan önce belgesini okumanın neden şart olduğunu gösterir.

Üç altın kural

  1. Çekirdeği düzenlemeyin. Güncelleme kendi çekirdeğini getirir; sizin işiniz tema, modül ve hook dosyalarında kalmalı.
  2. Hook’ta yavaş iş yapmayın. Dış bir servise bağlanacaksanız zaman aşımını kısa tutun; kullanıcı bekliyor olabilir.
  3. Her şeyi kaydedin. Bir şey ters gittiğinde ilk bakacağınız yer, hook’un yazdığı kayıttır.

WiseCP için tema ve eklenti ihtiyacınız varsa, WiseCP hizmet sayfasında neler yapılabileceğini anlattım.

Kitapçıkta devamı

  1. 2 dk okuma

    WHMCS mi WiseCP mi? Hosting firması için panel seçerken sorulacak 6 soru

    Hosting ve alan adı satan bir firma için WHMCS ile WiseCP arasında seçim yaparken bakılacak noktalar. Kazanan yok, doğru sorular var.

  2. 2 dk okuma

    WHMCS temasını güncellemeye dayanıklı yapmak: child tema ve hook'lar

    WHMCS güncellemesi geldiğinde özel temanızın bozulmaması için child tema yapısı, korunması gereken şablon işaretlemeleri ve çekirdeğe dokunmadan hook ile özelleştirme.

Şans

Aklında bir proje mi var? Kutuyu açalım: ne yapmak istediğini anlat, sana kapsamı ve yol haritasını içeren bir teklif hazırlayayım.

Teklif iste

ya da doğrudan yaz: merhaba@semih.fun