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

Semih2 dk okuma

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

  1. Önce bir kopya ortamda güncelleyin.
  2. Child temadaki dosyaları, ana temanın yeni sürümüyle karşılaştırın.
  3. Sepet, ödeme ve alan adı sorgulama akışlarını baştan sona deneyin.
  4. Hook dosyalarındaki hata kayıtlarına bakın.

Portfolyodaki Nova, Neva ve NetYuva temaları bu yaklaşımla hazırlandı.

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

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

    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.

Ş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