Modülle Şablon Gönderme
Bildirimi modülünüzle birlikte gönderin; operatörün yapması gereken tek şey modülü etkinleştirmek olsun.
Genel Bakış
Kendi mailini gönderen bir modül iki şey kurar. Kayıt, şablonu Bildirim Şablonları ekranına koyar; operatör onu oradan açıp kapatır. Dosyalar ise konuyu, gövdeyi ve kısa mesajı okundukları yerlere koyar.
Birincisi eksikse dispatch() disabled döner. İkincisi eksikse mail gövdesiz ve konusuz gider. Tek çağrı ikisini de yapar.
Ön Koşullar
enable()yolu olan bir modül.- Bir grup adı. Mail o alana aitse çekirdek grubunu kullanın, değilse kendi adınızı verin.
- Önce Bildirim Şablonları Nasıl Çalışır makalesini okuyun. Bu çağrının yazdığı kökler orada anlatılıyor.
Yapı
Şablonları modülün içinde tutun; böylece modülle birlikte taşınır ve silinirler. İki kaynak biçimi okunur; size hangisi uyuyorsa onu kullanın.
coremio/modules/Servers/Acme/
├── Acme.php
└── notifications/ # düz biçim: parça başına bir dosya
├── en/
│ ├── acme-quota-reached.json # {"subject": "..."}
│ ├── acme-quota-reached.html # e-posta gövdesi
│ └── acme-quota-reached.txt # kısa mesaj
└── tr/ ...
coremio/modules/Servers/Acme/notifications/ # klasör biçimi: tasarım başına gövde ekler
└── en/acme-quota-reached/
├── content.json
├── content.txt
├── content.html # taban tasarımın gövdesi
└── ledger.html # Ledger tasarımının kendi gövdesi
Klasör biçimi, sürüm paketinin de kullandığı biçimdir. Böylece bir modül ile bir sürüm, şablonu aynı dille tarif eder.
Adım Adım
- E-posta gövdesini bir belge değil parça olarak yazın. Etrafındaki kabuk aktif tasarımdan gelir.
- Desteklediğiniz her dil için birer dosya yazın. Yazmadığınız dilin mesajı olmaz; operatör onu doldurabilir.
- Smarty yer tutucuları kullanın (
{$service_name}) vesettingsiçinde bildirin; panel onları önersin. - Tohumlayıcıyı
enable()içinden çağırın. Güncellemede de çalışan bir muhafız ekleyin: eski bir kurulum, yeni şablonu almak için modülü kapatıp açmaz. dispatch()ile gönderin ve dönenstatusdeğerini okuyun.disabled, kaydın eksik olduğunu ya da operatörün maili kapattığını söyler.
Referans
static function seed_templates(string $group, array $templates, array $options = []): array
{
// ...
}
status 1, user-mail 1, admin-mail/user-sms/admin-sms 0, boş emails/phones/departments. Anahtarı hiç vermezseniz config dosyasına dokunulmaz — kaydını kendisi yöneten modüller için.
source yerine satır içi biçim: [dil => ['subject' => …, 'html' => …, 'sms' => …, 'themes' => [tasarım => html]]]. Vermediğiniz parça yazılmaz.
'base' (varsayılan) gövdeyi ürünle gelen tasarıma yazar, diğer tasarımlar ona geri düşer. 'all' aynı gövdeyi kurulu her tasarıma kopyalar — seçmeden önce aşağıdaki tuzağı okuyun.
['written' => string[], 'skipped' => int, 'registered' => string[]] — bu koşuda yazılan yollar, zaten var olduğu için dokunulmayan dosya sayısı ve config'e eklenen grup/anahtar çiftleri.
Örnek
private function ensure_notification_template(): void
{
static $checked = false;
if ($checked) return;
$checked = true;
\Notification::seed_templates('service', [
'acme-quota-reached' => [
'settings' => [
'variables' => '{service_id},{service_name},{quota_usage}',
'status' => 1,
'user-mail' => 1,
],
'source' => __DIR__ . DS . 'notifications',
],
]);
}
$this->ensure_notification_template();
$result = \Notification::dispatch('service', 'acme-quota-reached', [
'user_id' => (int) $service['owner_id'],
'variables' => [
'{service_id}' => $service['id'],
'{service_name}' => $service['name'],
'{quota_usage}' => $usage . '%',
],
]);
// 'disabled' bir hata değil bir karardır: operatör bu maili kapatmış.
if (($result['status'] ?? '') === 'error') \Logger::error('Acme kota maili gönderilemedi');
Tuzaklar
O olay için dosyası olmayan bir tasarım, taban gövdeyi kendi kabuğunun içinde gösterir. Gövdeyi her tasarıma kopyalamak aynı şey değildir. Kopya geri düşmeyi ezer; tema yazarı o mail için bir daha tasarım yayınlayamaz.
Dosyası olmayan bir config kaydı boş mail gönderir. Bunu ilk öğrenme yolu müşteri şikâyeti olur. Kaydı kendiniz yönetiyorsanız dosyalar için yine tohumlayıcıyı çağırın. settings anahtarını vermeyin; kaydınıza dokunulmaz.
Parçalar farklı köklerde yaşar ve gövdenin kökü aktif tasarıma bağlıdır. templates/notifications/ ile bir dil klasörünü birleştiren kod, hiçbir şeyin okumadığı yere yazar. Yazma başarılı olur, mail boş kalır.
İlgili Makaleler
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.