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
- Çekirdeği düzenlemeyin. Güncelleme kendi çekirdeğini getirir; sizin işiniz tema, modül ve hook dosyalarında kalmalı.
- Hook’ta yavaş iş yapmayın. Dış bir servise bağlanacaksanız zaman aşımını kısa tutun; kullanıcı bekliyor olabilir.
- 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.