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.
Hosting firmalarının ortak bir kâbusu var: WHMCS güncellemesi çıkar, güncelleme yapılır ve özel tasarlanmış müşteri paneli bir anda eski haline döner ya da bir yerinden kırılır. Çoğu zaman sebep aynıdır: değişiklikler, güncellemenin üzerine yazdığı dosyalara yapılmıştır.
Bu yazıda, WHMCS’i özelleştirirken güncelleme gününü sakin geçirmenin yollarını anlatıyorum.
Tema nerede yaşar?
WHMCS’te müşteri paneli temaları templates/ klasöründe, sepet (sipariş formu) şablonları ise templates/orderforms/ altında durur. WHMCS 9 ile varsayılan tema Nexus, 8.x sürümlerinde ise Twenty-One oldu. Her temanın kimliği, klasöründeki theme.yaml dosyasıdır.
Child tema: yalnızca değiştirdiğini taşı
Varsayılan temanın klasörünü kopyalayıp üzerinde çalışmak en hızlı başlangıç gibi görünür, ama bir sonraki sürümde o kopyayı elle güncellemek size kalır. Child tema ise yalnızca değiştirdiğiniz dosyaları içerir; geri kalanı ana temadan gelir.
# templates/markam/theme.yaml
name: "Markam"
description: "Markam için müşteri paneli"
config:
parent: twenty-one
parent değeri, ana temanın klasör adıdır. Child temaya eklediğiniz her dosya, ana temadaki aynı dosyanın yerine geçer; eklemediğiniz dosyalar güncellemelerle birlikte kendiliğinden yenilenir.
Ne zaman tam tema? Tasarım varsayılandan o kadar uzaklaşıyorsa ki şablonların çoğu zaten yeniden yazılacaksa, bağımsız (standalone) bir tema daha dürüst bir seçimdir. Bu durumda güncellemeleri kendiniz birleştirirsiniz ama elinizde bir sürümden ötekine kaymayan, denetlenebilir bir tema olur.
Korunması gereken işaretlemeler
WHMCS’in JavaScript’i ve eklentileri, şablonlardaki bazı öğelere güvenir. Örneğin head.tpl içindeki {$headoutput} değişkeni, eklentilerin sayfaya kod eklediği yerdir. Bunu silen bir tema, bir gün bir ödeme eklentisinin neden çalışmadığını merak etmeye başlar. Tasarımı değiştirin, bu bağlantı noktalarını koruyun.
Çekirdek yerine hook
Menüye bir bağlantı eklemek, bir sayfaya değişken göndermek ya da <head> içine bir etiket yazmak için çekirdek dosyalara dokunmanıza gerek yok. includes/hooks/ klasörüne koyacağınız küçük bir PHP dosyası yeter:
<?php
// includes/hooks/marka-menu.php
use WHMCS\View\Menu\Item as MenuItem;
add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $navbar) {
$navbar->addChild('Durum Sayfası', [
'uri' => 'https://durum.ornek.com',
'order' => 90,
]);
});
Hook’larda tek bir altın kural var: hata fırlatmayın. Her sayfada çalışan bir hook’taki yakalanmamış bir hata, bütün paneli durdurabilir. Dış bir servise bağlanıyorsanız, zaman aşımını kısa tutun ve hatayı yakalayıp kaydedin.
Güncelleme günü için kontrol listesi
- Önce bir kopya ortamda güncelleyin.
- Child temadaki dosyaları, ana temanın yeni sürümüyle karşılaştırın.
- Sepet, ödeme ve alan adı sorgulama akışlarını baştan sona deneyin.
- Hook dosyalarındaki hata kayıtlarına bakın.
Portfolyodaki Nova, Neva ve NetYuva temaları bu yaklaşımla hazırlandı.