Bildirim Şablonu Değişkenleri

1.6k görüntülenme Markdown

Bir bildirim şablonunun basabileceği her şey, her adın üç katmandan hangisinden geldiği ve hangilerinin sizin verdiğiniz değeri sessizce ezdiği.

Genel Bakış

Şablona tek bir düz ad kümesi ulaşır. Bu küme üç kaynaktan sabit bir sırayla kurulur. Bir adın hangi kaynaktan geldiğini bilmek, pratikte sorulan iki soruyu yanıtlar: bir yer tutucu neden boş çıktı ve geçtiğiniz değer neden yok sayıldı.

kurulum katmanı Logolar, renkler, şirket bilgileri, iletişim bağlantıları, içinde bulunulan yıl. Olay istesin istemesin her olayın her şablonuna eklenir.
alıcı katmanı Mesajın kendisi için üretildiği hesap. Yalnızca üretim çağrısına bir müşteri kimliği ulaştığında vardır; aynı adın bir akışta dolu, başka bir akışta boş olmasının sebebi budur.
olay katmanı Grubun çözümleyicisinin varlıktan kurduğu küme, artı çözümleyicinin o olaya özgü kaydının eklediği her şey. Bir olay eklediğinizde genişlettiğiniz katman budur.

Yapı

Kurulum Sırası

Önce olay katmanı kurulur, diğer ikisi altına değil üstüne serilir. Bu makaledeki neredeyse her sürprizin kaynağı budur.

bir dispatch'ten biten gövdeye
çözümleyici          varlık -> olayın değişkenleri            (sizinkiler)
      ↓
View::notifications  template_name ve template_type ekler
      ↓
variables_handler    alıcı bloğunu ekler  (yalnız müşteri kimliği > 0)
                     kurulum bloğunu ekler  (her zaman)
      ↓                 ^ ikisi de var olanı EZER, dört istisna dışında
motor                gövdeyi birleşmiş kümeyle render eder
      ↓
                     render edilmiş gövde notifi_body olur
      ↓
motor                kabuğu, sonra konuyu aynı kümeyle render eder
dört ad size teslim olur Alıcının görünen adları yalnızca çözümleyici onları zaten set etmediyse doldurulur: tam ad, ad, soyad ve hitap adı. İki platform katmanındaki diğer her ad koşulsuz yazılır.
müşteri kimliği yoksa alıcı bloğu da yok Üretim sıfır müşteri kimliğiyle çağrıldığında alıcı katmanının tamamı atlanır. Hesap olmayan bir adrese yönelen bir mesajda o adların hepsi boş kalır.
gövde de bir değişkendir Biten olay gövdesi bir değişken olarak atanır ve kabuk onu gösterir. O ad yalnız kabuk dosyalarında anlamlıdır. Bir olay gövdesinin içinde yazmak hiçbir şey vermez, çünkü henüz yoktur.

Bildirilen ile Enjekte Edilen

İki liste vardır ve aynı liste değildirler. Biri operatörün şablonu düzenlerken gördüğü rozetleri besler; diğeri gerçekten ulaşan şeydir. İkisi de bir filtre değildir: her ikisinde de olmayan bir ad, çözümleyici onu set ettiyse yine görünür.

ListeKuranNe içinRender anındaki etkisi
platform kümeleriNotification::variables()düzenleyicinin rozet listesiyok
grup temel kümesiNotification::group_variables()düzenleyicinin rozet listesiyok
kaydın kendi listesiyapılandırma kaydındaki variables anahtarıdüzenleyicinin rozet listesiyok
gerçekten enjekte edilençözümleyici, sonra üretim çağrısımesajın üretimiher şey

İlk üçü mekanizma değil belge olduğu için kayarlar. Gelen koda karşı ölçüldü: alıcı kümesi on yedi ad bildirir ama on dokuz ad enjekte edilir. Kurulum kümesi de üretim çağrısının ayrıca eklediği bir adı bildirir. Boşluklar aşağıdaki tablolarda işaretli.

Referans

İmzalar

tam imzalar
// coremio/helpers/notification.php
// $type 'system' | 'user' olur. Başka bir değerde $variables süslü parantezleri
// soyulmuş olarak döner; yapılandırma kaydının CSV'si rozet listesine böyle çevrilir.
public static function variables(string $type = '', array $variables = []): array;

// Düzenleyicinin gösterdiği grup temel kümesi: 'invoice' | 'order' | 'service' |
// 'domain' | 'user-tickets' | 'admin-tickets'. Diğer her grup boş dizi döner.
public static function group_variables(string $group = ''): array;

// coremio/classes/View.php
public static function notifications($type = 'mail', $template_name = '', $content = '',
                                     $variables = [], $lang = '', $user = 0): array;

// İki platform katmanını $variables üzerine birleştirir, sonra $str'yi YERİNDE
// render eder. $str referanslıdır: hem şablon kaynağı hem de sonuçtur.
public static function variables_handler($type, $user_id = 0, $variables = [], &$str = '', $lang = ''): void;

// coremio/classes/TemplateEngine.php
// $engine 'smarty' | 'twig' | 'none' olur. Her derleme hatasında ORİJİNAL dizeyi
// döner, yani bir başarısızlık hiçbir şey yapmamış bir şablon gibi görünür.
public static function render_notification($engine, $content, $variables = []): string;
Notification::variables() İki platform kümesini ad olarak verir. Başka bir argümanla, bir listenin süslü parantezlerini soyan küçük bir yardımcıya dönüşür; yapılandırma kaydının virgüllü değerinin rozete çevrilme yolu budur.
Notification::group_variables() Grubun temel kümesini ad olarak verir. Temel kümesi olmayan grubun yanıtı hata değil boş dizidir. Böyle bir grup, bozuk bir düzenleyici değil kısa bir rozet listesi gösterir.
View::notifications() Dosyaları okur, katmanları birleştirir, gövdeyi, kabuğu ve konuyu üretir. Bu makaledeki her şey ona yapılan tek bir çağrının içinde olur.
View::variables_handler() İki platform katmanının gerçekten yazıldığı ve ezme kuralının yaşadığı yer. Referanslı argümanı üzerinden yerinde çalışır ve hiçbir şey döndürmez.
filter:notification.render_variables Alıcı başına bir kez, o alıcının gövdesi üretilmeden hemen önce çalışır. Bir çözümleyiciye dokunmadan ad eklemenin yolu ve değeri alıcıya göre değiştirebilen tek yol. Değişken kümesi referansla gelir; üzerine yazın, dönüş değeri kullanılmaz.
filter:notification.template_merge_fields Yalnız düzenleyici zamanı. Operatörün düzenleme sırasında gördüğü rozet listesine bir ad ekler ve mesajın kendisine hiçbir etkisi yoktur. Liste de referansla gelir; ona ekleyin, dönüş değeri yok sayılır.

Kurulum Katmanı

Yirmi iki ad bildirilir ve hepsi her mesajda enjekte edilir. Bir tane de üretim çağrısının eklediği ve hiç bildirilmeyen ad vardır.

AdTaşıdığıBilinmesi gereken
website_urlKurulum adresi.Kurulum güvenli şemayı zorunlu kıldığında yeniden yazılır.
website_domainŞemasız, yalnız host.Metin içindir, bağlantı kurmak için değil.
website_titleMesaj dilinde site başlığı.Şirket bilgilerinden değil, website çevirilerinden gelir.
company_nameYasal ad.Set edilmemişse bilgi bloğunun ilk satırına düşer.
website_infosÇok satırlı bilgi bloğu.E-postada satır sonları işaretlemeye çevrilir, kısa mesajda olduğu gibi bırakılır.
website_addressDile göre posta adresi.Dile özgü adres genel olanı ezer.
website_emailsTek dizede birleştirilmiş açık adresler.Liste değil dizedir: döngüye sokulamaz.
website_phonesTek dizede birleştirilmiş açık numaralar.Yukarıdaki adreslerle aynı biçim.
website_contact_urlMesaj dilinde iletişim sayfası.Alıcıya göre yerelleşir, yani tek dispatch'in iki satırında farklı olur.
support_linkTalep oluşturma sayfası.Yazmadan önce aşağıdaki işaretle eşleyin.
is_enable_supportTalep sisteminin açık olup olmadığı.Koşul için bir boolean. Gelen footer tüm iletişim bloğunu bunun arkasına gizler.
website_header_logoSitenin açık logosu.Mutlak adres.
website_footer_logoSitenin koyu logosu.Mutlak adres.
notifi_header_logoE-postaya özel logo.Site logosuna düşer; vektör dosya varsa raster karşılığıyla değiştirilir, çünkü e-posta istemcileri vektör çizemez.
notifi_footer_logoE-postaya özel koyu logo.Aynı geri düşme ve aynı değiştirme.
theme_color1Birincil renk.Baştaki işaretçi olmadan yalnız rakamlar: işaretçiyi şablon kendisi yazar.
theme_color2İkincil renk.Aynı biçim.
theme_text_colorGövde metni rengi.Aynı biçim.
social_linksSosyal profil listesi.Satır listesi, aşağıdaki biçimlere bakın. Hiçbiri yapılandırılmamışsa boştur, döngüyü koruyun.
current_yearDört haneli yıl.Telif satırı için; hiç bayatlamaz.
template_nameOlay, grup/ad biçiminde.Üretim çağrısının kendisi set eder.
notifi_bodyBiten olay gövdesi.Burada bildirilir ama yalnız gövde üretildikten sonra var olur. Kabukta kullanılır, olay gövdesinde boştur.
template_typeKanal: e-posta ya da kısa mesaj.Enjekte edilir ama bildirilmez, yani düzenleyicinin rozet listesinde hiç görünmez. Paylaşılan bir parçanın kanala göre dallanmasını sağlar.

Alıcı Katmanı

Yalnızca üretime bir müşteri kimliği verildiğinde vardır. On yedi ad bildirilir; iki tanesi daha bildirilmeden enjekte edilir.

AdTaşıdığıBilinmesi gereken
user_greeting_nameVarsa şirket adı, yoksa tam ad.Bir mesaja başlamak için doğru olan. Teslim olur: zaten set etmiş bir çözümleyici kazanır.
user_full_nameAd ve soyad.Çözümleyiciye teslim olur.
user_nameAd.Çözümleyiciye teslim olur.
user_surnameSoyad.Çözümleyiciye teslim olur.
user_company_nameŞirket adı, bireysel hesapta boş.Koşulsuz ezilir.
user_emailHesabın adresi.Hesaptaki adres; bu kopyanın gittiği adres olmak zorunda değil.
user_phoneTelefon, varsa ön ekli.Hesapta yoksa boş değil null olur.
user_idHesap kimliği.Referans satırında işe yarar, tek başına müşteri için anlamsızdır.
user_groupMüşteri grubu adı.Hesap hiçbir grupta değilse boştur.
user_countryBirincil adresten ülke adı.Kayıtlı adres yoksa null.
user_cityŞehir.Aynı kaynak, aynı uyarı.
user_stateİl ya da eyalet.Aynı kaynak, aynı uyarı.
user_addressAçık adres.Aynı kaynak, aynı uyarı.
user_zipcodePosta kodu.Aynı kaynak, aynı uyarı.
user_ipHesapta kayıtlı adres.Kayıt anındaki adres, bu mesajı tetikleyen şeyin adresi değil.
user_login_linkMesaj dilinde giriş sayfası.Alıcıya göre yerelleşir.
userHesap satırının tamamı ve adresi.Bir koleksiyon, aşağıdaki biçimlere bakın. Önce adlandırılmış değişkene uzanın.
admin_login_linkPanel giriş sayfası.Enjekte edilir ama bildirilmez. Personel kopyaları içindir; müşteriye giden bir gövdede basmayın.
user_passBeş yıldız.Enjekte edilir ama bildirilmez ve bir değer değil maskedir. Onu basan eski bir şablonun boşluk yerine maske göstermesi için vardır.

Olay Katmanı, Gruba Göre

Grubun çözümleyicisinin, olay adına bakmadan önce kurduğu küme. Yalnız altı grup temel küme bildirir; geri kalanlar kümelerini tümüyle olayın kendi kaydında kurar.

invoice invoice, invoice_idn, invoice_payment_link, invoice_subtotal, invoice_total, invoice_tax_rate, invoice_tax, invoice_date_created, invoice_date_due, invoice_date_paid, invoice_date_taxed, invoice_payment_method, invoice_remaining_day, invoice_delayed_day, invoice_refund_date, invoice_cancelled_date, legal_invoice_download_link, items. Tutarlar para birimi sembolüyle zaten biçimlenmiş gelir, yeniden biçimlemeyin. Son dördü yalnız kendi olaylarında set edilir. İndirimler invoice_discount_total, invoice_has_discount ve invoice_discounts ile gelir: her indirim için type, label, amount ve amountF taşıyan bir satır; etiket çevrilmiş gelir.
order order, order_id, order_number, order_name, order_amount, order_currency, order_payment_method, order_status, order_detail_link, order_date_created, order_date_start, order_date_end, order_period, order_period_unit, order_group_name, order_category_name, order_services_summary, items. Kalem koleksiyonunun biçimi faturanınkinden farklıdır: satın alınan ürün başına bir satır ve içinde iç içe eklentileri.
service service, service_id, service_order_id, service_name, service_type, service_module, service_subscription_identifier, service_period, service_period_unit, service_period_time, service_cycle, service_amount, service_date_created, service_date_start, service_date_end, service_detail_link, service_group_name, service_category_name, service_domain, service_ip, service_requirements, service_addons, service_server_ip, service_server_hostname, service_server_port, service_ns1, service_ns2, service_ns3, service_ns4, service_username, service_password, service_assigned_ips. Son gruptaki adlar canlı erişim bilgileridir; çözülmüş bir parola da dahil, tuzaklara bakın.
domain Yukarıdaki hizmet kümesinin tamamı, artı domain, day, grace_days, redemption_days, redemption_fee, days_past_due, domain_transfer_code, reason. Alan adı bir hizmettir, yani şablonları herhangi bir hizmet adını da basabilir.
user-tickets ve admin-tickets ticket, ticket_id, ticket_num, ticket_link, ticket_subject, ticket_department, ticket_service, ticket_status, ticket_priority, ticket_admin_name, ticket_date, ticket_last_reply_date, ticket_assigned_by_admin, user_last_message, admin_last_message, user_reply, admin_reply, artı talep bir hizmete bağlıysa hizmet kümesinin tamamı. Bağlantı gruba göre değişir: personel kümesi panele, müşteri kümesi portala gider.
user, admin-messages, sms-intl Hiç temel küme yok. Her olayın kaydı şablonunun tam olarak ihtiyaç duyduğunu kurar; aynı gruptaki iki olayın neredeyse hiç ad paylaşmamasının sebebi budur.

Koleksiyonlar ve Anahtarları

Adların dördü dize değildir. Birini doğrudan yazmak işe yarar bir şey vermez; bunlar bir döngü ya da anahtarlı okuma içindir.

AdBiçimHer satırdaki anahtarlar
items (fatura)fatura kalemi başına bir satırid, owner_id, user_id, user_pid, description, quantity, amount, total_amount, currency, rank, amountF, service_id, service_domain, service_ip, service_group_name, service_category_name. Yenileme kalemi ayrıca service_type, service_old_duedate, service_new_duedate taşır.
social_linkssatır listesiname, url, icon. Gelen kabuk görsel dosya adını küçük harfe çevrilmiş addan kurar.
usertek satırHesap kolonları, artı birincil adresi taşıyan address. Basmaya değer her alanın zaten adlandırılmış bir değişkeni var.
service_addons ve service_requirementssatır listeleriSaklandıkları haliyle satırlar, biçimlenmemiş. Şablonun gerçekten kalem kalem listelemesi gerektiğinde döngüye sokun; arkalarında hazır bir biçimleme yok.

Fatura kalemi satırlarında biçimlenmiş tutar büyük F ile biter: çıplak anahtar ham sayıdır, F ile biten ise yazılacak dizedir. Bu ikiliyi ters kullanmak, üzerinde para birimi olmayan biçimlenmemiş bir rakam gösterir.

Olay Başına Ekler

Temel kümenin ötesinde, çözümleyicinin kaydı yalnız o olayın ihtiyaç duyduğunu ekler. Temsili bir örneklem ve her biri için çağıranın geçmesi gerekenler.

OlayEklediğiBesleyen bağlam anahtarı
user/two-factor-verificationcodecode
user/email-activationactivation_code, activation_linkcode, activation_link, mesajı yönlendirmek için isteğe bağlı to_email
user/email-changedold_email, new_email artı cihaz bloğuold, new, isteğe bağlı to_email
user/password-changedreset_password_link artı cihaz bloğureset_link
invoice/invoice-reminderinvoice_remaining_dayremaining_day
invoice/invoice-overdueinvoice_delayed_daydelayed_day
invoice/invoice-auto-payment-failederror_message, card_ln4error_message, card_ln4
admin-messages/backup-completedçağıran ne kurduysavariables, olduğu gibi iletilir

Yukarıda geçen cihaz bloğu, güvenlik olaylarına eklenen küçük ve sabit bir kümedir: browser, platform, ip, location_country, location_city ve date. İki konum adı yer tutucudur ve her zaman boştur, yani onları basan bir şablon hiçbir şey basmaz.

Örnek

Tek bir parçada üç katman, ardından kendi adınızı eklemenin desteklenen iki yolu.

her katmandan okuyan bir gövde
Sayın ,

 numaralı  tutarındaki faturanızın son ödeme tarihi .


Sitemio Bilişim Teknolojileri Ticaret Ltd. Şti. 2026
tek bir olaya ad eklemek: çözümleyicinin kaydı
// coremio/helpers/notification.php, grubun çözümleyicisinin içinde.
// Bir platform adını yeniden kullanmayın: user_email ve website_url bundan sonra
// yazılır ve oraya koyduğunuz her şeyi ezer.
switch ($name) {
    case 'acme-quota-reached':
        $variables['quota_percent'] = (int) ($context['percent'] ?? 0);
        $variables['quota_limit']   = Money::formatter_symbol(
            (float) ($context['limit'] ?? 0),
            (int) ($service['amount_cid'] ?? 0),
        );
        break;
}
çözümleyiciye dokunmadan, bir modülden ad eklemek
// Alıcı başına bir kez, o alıcının gövdesi render edilmeden hemen önce koşar; yani
// değeri alıcıya göre de değiştirebilir. İlk argüman referanslıdır.
Hook::add('filter:notification.render_variables', 1, function (&$variables, $group, $name, $recipient) {
    if ($group !== 'service') return;

    $variables['acme_portal_link'] = 'https://portal.example.com/s/' . (int) ($variables['service_id'] ?? 0);
});

// Yalnız düzenleyici: adı operatörün düzenleme sırasında gördüğü rozet listesine koyar.
// Render anında hiçbir şeyi değiştirmez, yani hem keşfedilebilir hem basılabilir olması
// gereken bir ad için iki dinleyici de gerekir.
Hook::add('filter:notification.template_merge_fields', 1, function (&$fields, $group, $name) {
    if ($group === 'service') $fields[] = 'acme_portal_link';
});

Tuzaklar

Bu adlardan biri çalışan bir paroladır

Hizmet kümesi saklanan kimlik bilgisini çözülmüş halde, sunucu adresinin, portun ve kullanıcı adının yanında taşır. Onu basmak canlı bir girişi bir gelen kutusuna ve mesaj loguna kalıcı olarak koyar. Bunun yerine hizmet sayfasına bağlantı verin ve kimlik bilgisini tüm amacı onu iletmek olan tek mesaja saklayın.

Bir platform adını yeniden kullanmak değerinizi kaybettirir

İki platform katmanı da çözümleyicinin kümesinin üzerine serilir ve yalnız dört alıcı görünen adı var olana teslim olur. Bir adresi, bağlantıyı ya da rengi platform adıyla set ederseniz şablon onu görmeden ezilir ve hiçbir şey loglanmaz.

Var olmayan ad hiçbir şey göstermez

Ne uyarı ne de çıktıda bir işaret olur, yani yanlış yazılmış bir yer tutucu tam olarak boş kalmış bir değer gibi görünür. Bir mesajdan bir satır kaybolduğunda, çözümleyiciye bakmadan önce yazımı buradaki tablolara karşı kontrol edin.

Bildirilen liste belgedir, sözleşme değil

Operatörün gördüğü rozet listesi, hiçbir şeyin çözümleyiciye karşı doğrulamadığı üç statik bildirimden kurulur. Bir ad listede olmadan görünebilir, listede olup hiç ulaşmayabilir de. Çözümleyicinin set ettiğine güvenin ve operatörün de güvenebilmesi için bildirimleri güncelleyin.

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.