Add email templates, page layouts, and shop themes (template system)
Deploy to Production (witstore.wende.it) / deploy (push) Successful in 7s
Deploy to Production (witstore.wende.it) / deploy (push) Successful in 7s
- E-Mail-Templates: DB-gespeicherte HTML-Templates mit {{placeholder}}-System,
Admin-UI zum Bearbeiten von Betreff und Body, alle 4 Mailables aktualisiert
- Seiten-Layouts: 4 Layouts für CMS-Seiten (Standard, Sidebar, Volle Breite, Landing),
Layout-Auswahl im Admin-Formular
- Shop-Themes: 5 Farbthemen via CSS-Variablen, Picker in Einstellungen
- Deployment: EmailTemplateSeeder wird automatisch beim Deploy ausgeführt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,7 @@ class DatabaseSeeder extends Seeder
|
||||
$this->call([
|
||||
SettingsSeeder::class,
|
||||
AdminUserSeeder::class,
|
||||
EmailTemplateSeeder::class,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\EmailTemplate;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class EmailTemplateSeeder extends Seeder
|
||||
{
|
||||
public function run(): void
|
||||
{
|
||||
$templates = [
|
||||
[
|
||||
'key' => 'order_confirmation',
|
||||
'label' => 'Bestellbestätigung',
|
||||
'subject' => 'Bestellbestätigung {{order_number}} – {{shop_name}}',
|
||||
'variables' => ['customer_name','order_number','order_total','payment_info','order_items_table','shop_name','shop_email','shop_address','shop_owner','bank_name','bank_iban','bank_bic','invoice_payment_days'],
|
||||
'body' => <<<'HTML'
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head><meta charset="UTF-8"><style>
|
||||
body { font-family: Arial, sans-serif; color: #333; max-width: 600px; margin: 0 auto; }
|
||||
h1 { color: #1d4ed8; }
|
||||
table { width: 100%; border-collapse: collapse; }
|
||||
th, td { padding: 8px; border-bottom: 1px solid #eee; text-align: left; }
|
||||
th { background: #f8fafc; }
|
||||
.total { font-weight: bold; font-size: 1.1em; }
|
||||
.box { background: #f8fafc; padding: 16px; border-radius: 8px; margin: 16px 0; }
|
||||
</style></head>
|
||||
<body>
|
||||
<h1>Vielen Dank für Ihre Bestellung!</h1>
|
||||
<p>Guten Tag {{customer_name}},</p>
|
||||
<p>wir haben Ihre Bestellung <strong>{{order_number}}</strong> erhalten und bestätigen sie hiermit.</p>
|
||||
|
||||
{{payment_info}}
|
||||
|
||||
<h2>Bestellübersicht</h2>
|
||||
{{order_items_table}}
|
||||
|
||||
<hr>
|
||||
<p style="font-size:0.85em;color:#666;">
|
||||
{{shop_name}} | {{shop_address}}<br>
|
||||
Bei Fragen: <a href="mailto:{{shop_email}}">{{shop_email}}</a>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
HTML,
|
||||
],
|
||||
[
|
||||
'key' => 'order_shipped',
|
||||
'label' => 'Versandbestätigung',
|
||||
'subject' => 'Ihre Bestellung {{order_number}} ist unterwegs',
|
||||
'variables' => ['order_number','tracking_code','shop_name','shop_email'],
|
||||
'body' => <<<'HTML'
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head><meta charset="UTF-8"><style>
|
||||
body { font-family: Arial, sans-serif; color: #333; max-width: 600px; margin: 0 auto; }
|
||||
h1 { color: #1d4ed8; }
|
||||
.box { background: #f0fdf4; padding: 16px; border-radius: 8px; border: 1px solid #86efac; }
|
||||
</style></head>
|
||||
<body>
|
||||
<h1>Ihre Bestellung ist unterwegs!</h1>
|
||||
<p>Ihre Bestellung <strong>{{order_number}}</strong> wurde versendet.</p>
|
||||
{{tracking_info}}
|
||||
<p>Bei Fragen zu Ihrer Lieferung können Sie uns jederzeit kontaktieren.</p>
|
||||
<hr>
|
||||
<p style="font-size:0.85em;color:#666;">{{shop_name}} | {{shop_email}}</p>
|
||||
</body>
|
||||
</html>
|
||||
HTML,
|
||||
],
|
||||
[
|
||||
'key' => 'payment_received',
|
||||
'label' => 'Zahlungsbestätigung',
|
||||
'subject' => 'Zahlung eingegangen – Bestellung {{order_number}}',
|
||||
'variables' => ['customer_name','order_number','order_total','shop_name','shop_email'],
|
||||
'body' => <<<'HTML'
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head><meta charset="UTF-8"><style>
|
||||
body { font-family: Arial, sans-serif; color: #333; max-width: 600px; margin: 0 auto; }
|
||||
h1 { color: #16a34a; }
|
||||
</style></head>
|
||||
<body>
|
||||
<h1>Zahlung eingegangen</h1>
|
||||
<p>Guten Tag {{customer_name}},</p>
|
||||
<p>Ihre Zahlung für Bestellung <strong>{{order_number}}</strong> ({{order_total}} €) ist eingegangen.</p>
|
||||
<p>Im Anhang finden Sie Ihre Rechnung als PDF.</p>
|
||||
<p>Wir werden Ihre Bestellung schnellstmöglich bearbeiten und versenden.</p>
|
||||
<hr>
|
||||
<p style="font-size:0.85em;color:#666;">{{shop_name}} | {{shop_email}}</p>
|
||||
</body>
|
||||
</html>
|
||||
HTML,
|
||||
],
|
||||
[
|
||||
'key' => 'widerruf_confirmation',
|
||||
'label' => 'Widerrufsbestätigung',
|
||||
'subject' => 'Bestätigung Ihres Widerrufs',
|
||||
'variables' => ['customer_name','widerruf_name','widerruf_email','widerruf_order_number','widerruf_product','widerruf_date','widerruf_reason','shop_name'],
|
||||
'body' => <<<'HTML'
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head><meta charset="UTF-8"><style>
|
||||
body { font-family: Arial, sans-serif; color: #333; max-width: 600px; margin: 0 auto; }
|
||||
</style></head>
|
||||
<body>
|
||||
<h2>Bestätigung Ihres Widerrufs</h2>
|
||||
<p>Guten Tag {{customer_name}},</p>
|
||||
<p>Ihr Widerruf ist bei uns eingegangen. Wir werden ihn schnellstmöglich bearbeiten.</p>
|
||||
|
||||
<table style="border-collapse:collapse;width:100%">
|
||||
<tr><td style="padding:6px;font-weight:bold">Name</td><td style="padding:6px">{{widerruf_name}}</td></tr>
|
||||
<tr><td style="padding:6px;font-weight:bold">E-Mail</td><td style="padding:6px">{{widerruf_email}}</td></tr>
|
||||
<tr><td style="padding:6px;font-weight:bold">Bestellnummer</td><td style="padding:6px">{{widerruf_order_number}}</td></tr>
|
||||
<tr><td style="padding:6px;font-weight:bold">Produkt</td><td style="padding:6px">{{widerruf_product}}</td></tr>
|
||||
<tr><td style="padding:6px;font-weight:bold">Datum</td><td style="padding:6px">{{widerruf_date}}</td></tr>
|
||||
<tr><td style="padding:6px;font-weight:bold">Begründung</td><td style="padding:6px">{{widerruf_reason}}</td></tr>
|
||||
</table>
|
||||
|
||||
<p style="font-size:0.85em;color:#666;">{{shop_name}}</p>
|
||||
</body>
|
||||
</html>
|
||||
HTML,
|
||||
],
|
||||
];
|
||||
|
||||
foreach ($templates as $tpl) {
|
||||
EmailTemplate::updateOrCreate(['key' => $tpl['key']], $tpl);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user