Alan Adı Katalog Kancaları

1.6k görüntülenme Markdown

Müşteri bir ad ararken ve operatör uzantı kataloğunu kurarken çalışan on dört kanca: uygunluk, öneriler, kategoriler, fiyat matrisi.

Genel Bakış

Alan adı satışının iki yüzü var. Müşteri tarafında arama vardır: bir ad yazılır, sağlayıcıya sorulur, sonuç ve öneriler döner. Operatör tarafında ise katalog vardır: hangi uzantılar satılır, hangi kategoride, hangi fiyattan.

Buradaki kancaların hepsi referansla çalışır: size bir dizi verilir, siz onu değiştirirsiniz, dönüşünüze bakılmaz. Şekil sözleşmesi sıkıdır çünkü çıktıyı ekran ve sepet doğrudan okur.

Referans

Uygunluk cevabını değiştirme

filterdomain.availability
AdminOrders::check_domain():336 panel siparişi

Sağlayıcının uygunluk cevabı türetildikten sonra, yanıt kurulmadan önce çalışır.

Parametreler 4
$availableboolrefSağlayıcının bildirdiği uygunluk. Bunu false yapmak adı satıştan kaldırır.
$sldstringAdın kendisi, uzantısız.
$tldstringUzantı.
$check_resultarraySağlayıcının ham cevabı. Kararınızı gerekçelendirmek için buradaki ayrıntıya bakabilirsiniz.
Dönüş 1
voidDeğer referansla değişir; dönüş kullanılmaz.
Dinleyici
Hook::add('filter:domain.availability', 10,
    function (&$available, $sld, $tld, $check_result) {
        // Marka korumasi: kendi adimizi kimse kaydedemesin.
        if (Acme::brandTerm($sld)) $available = false;
    });
filterdomain.client_search_results
ClientDomain::check():124 sıralama yapılmış

Birincil sonuç ve öneriler kurulup sepet durumu işlendikten ve öneriler sıralandıktan sonra çalışır.

Parametreler 2
$responsearrayrefTam yanıt paketi: status, type (register ya da transfer), currency, primary (birincil sonuç ya da null), suggestions. Sepet durumu her girdide in_cart ile gelir.
$searchContextarraySorgu bağlamı: sld, tld, transfer, ucid (görüntüleme para birimi).
Dönüş 1
voidDeğer referansla değişir; dönüş kullanılmaz.
Dinleyici
Hook::add('filter:domain.client_search_results', 10,
    function (&$response, $searchContext) {
        // Siralama zaten yapildi: kendi onerinizi BASA koyun, sona degil.
        $extra = Acme::suggest($searchContext['sld'] ?? '');
        if ($extra) array_unshift($response['suggestions'], $extra);
    });

Öne çıkan uzantıları değiştirme

filterdomain.spotlight_tlds
ClientDomain::spotlight_tlds():275 noktasız ve küçük harf

Dil dosyasından gelen liste küçük harfe indirilip baştaki nokta kırpıldıktan sonra çalışır.

Parametreler 1
$tldsarrayrefUzantı listesi: düz metinler, noktasız ve küçük harf (["net","org","io"]). Nokta koymak ya da büyük harf yazmak uzantıyı bulunamaz yapar.
Dönüş 1
voidDeğer referansla değişir; dönüş kullanılmaz.
Dinleyici
Hook::add('filter:domain.spotlight_tlds', 10, function (&$tlds) {
    $tlds = ['com', 'net', 'com.tr'];        // noktasiz, kucuk harf
});

Uzantı kategorilerini değiştirme

filterdomain.tld_categories
domain::build_categories():86 anahtar + etiket

Kategori anahtarları yerelleştirilmiş etiketlerle eşleştirildikten sonra çalışır.

Parametreler 1
$outarrayrefSıralı kategori listesi: her satır key ve label taşır. Anahtar, uzantı satırlarındaki kategori listesiyle eşleşmelidir; uydurma anahtar hiçbir uzantı getirmez.
Dönüş 1
voidDeğer referansla değişir; dönüş kullanılmaz.
Dinleyici
Hook::add('filter:domain.tld_categories', 10, function (&$out) {
    // Anahtar TLD satirlarindaki kategori listesiyle ESLESMELI.
    $out[] = ['key' => 'turkiye', 'label' => 'Turkiye'];
});

Uzantı fiyat tablosunu değiştirme

filterdomain.tld_table
website/domain fiyatlar çözülmüş

Uzantı satırları kurulup fiyatlar görüntüleme para birimine çevrildikten sonra çalışır.

Parametreler 2
$outarrayrefUzantı satırları. Her satır: name (noktasız), categories (virgülle ayrılmış anahtarlar), kayıt ve yenileme fiyatları.
$ucidintGörüntüleme para birimi kimliği. Fiyatlar bu birime çevrilmiştir; eklediğiniz satırı da o birimde verin.
Dönüş 1
voidDeğer referansla değişir; dönüş kullanılmaz.
Dinleyici
Hook::add('filter:domain.tld_table', 10, function (&$out, $ucid) {
    // Bos fiyatli satirlari gizle: musteri fiyatsiz uzantiya tiklamasin.
    $out = array_values(array_filter($out,
        fn ($r) => (float) ($r['register'] ?? 0) > 0));
});

Yenileme fiyatını değiştirme

filterdomain.premium_renewal_price
Invoices::_renewal_pricing_domain() çevrim yapılmış

Uzantının yenileme fiyatı bulunup para birimi çevrimi ve yıl çarpanı uygulandıktan sonra çalışır.

Parametreler 4
$renewal_amountfloatrefHedef para birimindeki birim fiyat. Çarpan uygulanmıştır; buraya yazdığınız değer faturaya gider.
$servicearrayYenilenen alan adı hizmeti.
$tldarrayUzantı kaydı: id, name, min_years.
$target_currencyintTutarın ifade edildiği para birimi.
Dönüş 1
voidDeğer referansla değişir; dönüş kullanılmaz.
Dinleyici
Hook::add('filter:domain.premium_renewal_price', 10,
    function (&$renewal_amount, $service, $tld, $target_currency) {
        // Premium adin yenilemesi saglayicidan gelir; katalog fiyati yanlistir.
        $real = Acme::premiumRenewal($service['name'] ?? '', $target_currency);
        if ($real > 0) $renewal_amount = $real;
    });

Fiyat matrisini kaydetmeden değiştirme

filterdomain.pricing_save
AdminProducts tür × yıl × para birimi

Sağlayıcıdan çekilen maliyetler kâr oranıyla fiyata çevrildikten sonra, veritabanına yazılmadan önce çalışır.

Parametreler 2
$pricingarrayrefFiyat matrisi: [tür][yıl][para birimi] → cost ve promo. Tür: register, renewal, transfer.
$contextarrayBağlam: module, tld, cost_cid, profit_rate.
Dönüş 1
voidDeğer referansla değişir; dönüş kullanılmaz.
Dinleyici
Hook::add('filter:domain.pricing_save', 10, function (&$pricing, $context) {
    // Ilk yil kaydi maliyetine satilsin; yenileme dokunulmasin.
    foreach ($pricing['register'][1] ?? [] as $cid => $row)
        $pricing['register'][1][$cid]['promo'] = $row['cost'];
});

Yeni uzantı kaydını değiştirme

filterdomain.tld_save_data
AdminProducts yalnız eklemede

Yeni uzantı veritabanına yazılmadan önce çalışır.

Parametreler 2
$insert_dataarrayrefYazılacak kayıt: name, module, status, rank, dns_manage, forwarding, whois_privacy, epp_code.
$extensionstringEklenen uzantı.
Dönüş 1
voidDeğer referansla değişir; dönüş kullanılmaz.
Dinleyici
Hook::add('filter:domain.tld_save_data', 10, function (&$insert_data, $extension) {
    // Yeni uzanti once kapali gelsin; fiyat girilmeden satisa acilmasin.
    $insert_data['status'] = 0;
});

Uzantı silmeyi durdurma

gatedomain.tld_delete
AdminProducts katalogdan çıkarır

Uzantı katalogdan silinmeden önce çalışır.

Parametreler 2
$extensionstringSilinmek istenen uzantı adı.
$tldarrayUzantı kaydı.
Dönüş 1
stringBoş olmayan bir string silmeyi durdurur; metin hata olarak fırlatılır.
Dinleyici
Hook::add('gate:domain.tld_delete', 10, function ($extension, $tld) {
    // Satilmis alan adi olan uzantiyi silmek kayitlari oksuz birakir.
    if (Acme::soldCount((int) ($tld['id'] ?? 0)) > 0)
        return 'Bu uzantida satilmis alan adi var; silinemez.';

    return null;
});

Yeni uzantıyı izleme

actiondomain.tld_created
AdminProducts kimlik dolu

Uzantı katalogda oluşturulduktan sonra çalışır.

Parametreler 3
$tld_idintOluşturulan kaydın kimliği.
$extensionstringUzantı adı.
$registrarstringAtanan sağlayıcı modülü. Modül seçilmediyse boş anahtar gelir.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:domain.tld_created', 10,
    function ($tld_id, $extension, $registrar) {
        Ops::note('tld-added', $extension . ' -> ' . ($registrar ?: 'modulsuz'));
    });

Tek uzantının sorgusunu devralma

filterdomain.available
Registrar::check döndürerek devralır

Bir uzantı için kullanılabilirlik sorusu sorulmadan önce çalışır. Dolu bir yanıt döndürürseniz sistem ne WHOIS sorar ne de kayıt kuruluşuna gider: cevabı siz vermiş olursunuz.

Parametreler 1
$queryarraySorulan şey: sld (ad), tld (uzantı), module. module boşsa WHOIS yolundasınız, doluysa kayıt kuruluşu yolunda. İki yol da bu kancadan geçer.
Dönüş 1
array|falseDolu bir dizi sorguyu devralır: status (available, unavailable ya da error), isteğe bağlı message, premium, premium_price. Boş dizi, false ya da hiç dönüş: sistem kendi yoluna devam eder. Birden çok dinleyici cevap verirse sonuncusu geçerlidir.
Dinleyici
Hook::add('filter:domain.available', 10, function ($query) {
    // Yasakli listedeki adlari kayit kurulusuna hic sormayin.
    if (Acme::blocked($query['sld'] ?? ''))
        return ['status' => 'unavailable', 'message' => 'bu ad kullanilamaz'];

    return false;   // geri kalani sistem sorsun
});

Toplu sonuç haritasını değiştirme

filterdomain.whois_result
Registrar::check bağla geçer

Bütün uzantıların cevabı toplandıktan sonra, çağırana dönmeden hemen önce çalışır. Tek uzantı değil, sonucun tamamı elinizdedir.

Parametreler 2
$resultarraybağlaAlan adı karşılık sonuç haritası; her sonuçta sld, tld, status, ayrıca message, premium, premium_price bulunabilir.
$contextarrayNeyin sorulduğu: sld ve tlds.
Dönüş 1
voidDönüş yoksayılır; haritanın üzerine yazarak değiştirirsiniz. Premium fiyatı burada ezmek, tek tek uzantı sorgusunu yakalamaktan kolaydır.
Dinleyici
Hook::add('filter:domain.whois_result', 10, function (&$result, $context) {
    foreach ($result as $domain => $row) {
        if (($row['premium'] ?? false) !== true) continue;

        // Premium fiyata kendi kar payinizi ekleyin.
        $result[$domain]['premium_price'] = round(((float) $row['premium_price']) * 1.15, 2);
    }
});

Ham kayıt metnini maskeleme

filterdomain.whois_record
ClientDomain::whois bağla geçer kişisel veri

Kayıt kuruluşundan gelen ham metin ziyaretçiye gösterilmeden önce çalışır. Metinde başkasının adı, e-postası ve telefonu bulunur: maskeleme yeri burasıdır.

Parametreler 2
$rawstringbağlaKaydın tam metni. Kayıt alınamadıysa boş gelir; kendi kaynağınızdan metin besleyebileceğiniz yer de burasıdır.
$whoisContextarrayHangi ad sorgulandı: sld, tld, status.
Dönüş 1
voidDönüş yoksayılır; metnin üzerine yazarsınız.
Dinleyici
Hook::add('filter:domain.whois_record', 10, function (&$raw, $whoisContext) {
    if ($raw === '') return;

    // E-posta ve telefon satirlarini gizleyin.
    $raw = preg_replace('~^(.*(?:Email|Phone).*)$~mi', '[gizlendi]', $raw);
});

Belge gereksinimi değişikliğini izleme

actiondomain.doc_saved
AdminProductsDomain uyum kaydı

Bir uzantının zorunlu belge listesi değiştikten sonra çalışır. Değişiklik geriye dönük etkilidir: o uzantıda bekleyen siparişler artık başka belge istiyor olabilir.

Parametreler 4
$tldstringUzantı, noktasız ve küçük harfli.
$addedarrayYeni eklenen belge tanımları.
$updatedarrayDeğişen tanımlar, kimlik karşılık veri.
$removedarrayKaldırılan tanımların kimlikleri.
Dönüş 1
voidDönüş yoksayılır. Kayıt çoktan yazılmıştır.
Dinleyici
Hook::add('action:domain.doc_saved', 10, function ($tld, $added, $updated, $removed) {
    // Yeni belge istendiyse o uzantida bekleyen siparisleri yeniden degerlendirin.
    if ($added) Acme::reviewPendingOrders($tld);
});

Tuzaklar

Arama filtresi sıralamadan SONRA çalışır

Öneriler siz görmeden önce duruma göre sıralanır. Listenin sonuna eklediğiniz bir öneri en altta kalır ve çoğu müşteri oraya bakmaz. Kendi önerinizi öne almak istiyorsanız listenin başına koyun.

Uzantı biçimi katıdır

Öne çıkan uzantı listesi ve tablo satırları uzantıyı noktasız ve küçük harf bekler. .COM yazmak eşleşmeyi bozar: uzantı ne katalogda bulunur ne fiyatı çözülür, ekranda sessizce boş kalır.

Fiyat kancaları çevrimden sonra gelir

Hem yenileme fiyatı hem tablo satırları size çevrilmiş tutarı verir. Kendi fiyatınızı yazarken aynı para biriminde yazın; sağlayıcı maliyetini olduğu gibi koymak, müşteriye başka bir para biriminin sayısını göstermek olur.

Kategori anahtarı uzantı satırıyla eşleşmeli

Kategori listesine yeni bir anahtar eklemek yalnız butonu açar. O anahtarın uzantı satırlarındaki kategori listesinde de bulunması gerekir, yoksa butona tıklayan müşteri boş bir liste görür.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.