Enhance configuration management: Updated README.md with Windows sync instructions, refactored backend configuration files to improve loading logic, and ensured consistent function definitions. Improved error handling in bootstrap.php for better user feedback during application startup.
This commit is contained in:
556
public/config/products-config.php
Normal file
556
public/config/products-config.php
Normal file
@@ -0,0 +1,556 @@
|
||||
<?php
|
||||
/**
|
||||
* HexaHost.de Produkt-Konfiguration
|
||||
*
|
||||
* Hier können Sie alle Preise und Produktinformationen zentral verwalten.
|
||||
* Nach Änderungen: npm run build && npm run deploy
|
||||
*
|
||||
* Verwendung in PHP-Seiten:
|
||||
* require_once 'config/products-config.php';
|
||||
* $packages = getProductPackages('vpc');
|
||||
*/
|
||||
|
||||
// Temporär ausgeblendete Produkte (einfach IDs aus dieser Liste entfernen, um sie wieder im Shop anzuzeigen)
|
||||
$HIDDEN_PRODUCTS = ['vpc', 'vps'];
|
||||
|
||||
// ============================================================================
|
||||
// VIRTUAL PRIVATE CONTAINER (VPC)
|
||||
// ============================================================================
|
||||
$PRODUCTS['vpc'] = [
|
||||
'name' => 'Virtual Private Container',
|
||||
'short_name' => 'VPC',
|
||||
'description' => 'Effiziente LXC-Container auf Proxmox-Basis',
|
||||
'min_price' => '4,99',
|
||||
'hero_highlight' => 'auf Proxmox LXC',
|
||||
'hero_description' => 'Erleben Sie die Effizienz von Linux-Containern mit der Zuverlässigkeit von Proxmox. Unsere VPC-Lösungen bieten optimale Performance bei minimalem Ressourcenverbrauch.',
|
||||
'packages_title' => 'VPC Pakete',
|
||||
'packages_description' => 'Wählen Sie das perfekte Container-Paket für Ihre Anforderungen',
|
||||
'cta_title' => 'Bereit für Ihren VPC?',
|
||||
'cta_description' => 'Starten Sie noch heute mit einem Virtual Private Container',
|
||||
'page_title' => 'Virtual Private Container - Effiziente LXC Container | HexaHost.de',
|
||||
'page_description' => 'Virtual Private Container auf Proxmox LXC-Basis. Effiziente und preiswerte Container-Lösungen ab 4,99€/Monat bei HexaHost.de',
|
||||
'packages' => [
|
||||
'starter' => [
|
||||
'name' => 'VPC Starter',
|
||||
'price' => '4,99',
|
||||
'featured' => false,
|
||||
'specs' => [
|
||||
['label' => 'CPU Kerne', 'value' => '1 vCore'],
|
||||
['label' => 'RAM', 'value' => '1 GB'],
|
||||
['label' => 'SSD Speicher', 'value' => '20 GB'],
|
||||
['label' => 'Traffic', 'value' => '1 TB'],
|
||||
['label' => 'IPv4 Adressen', 'value' => '1'],
|
||||
],
|
||||
'features' => [
|
||||
'Proxmox LXC Container',
|
||||
'Root-Zugriff',
|
||||
'SSH-Zugang',
|
||||
'Backup inklusive',
|
||||
'24/7 Monitoring',
|
||||
],
|
||||
],
|
||||
'business' => [
|
||||
'name' => 'VPC Business',
|
||||
'price' => '9,99',
|
||||
'featured' => true,
|
||||
'specs' => [
|
||||
['label' => 'CPU Kerne', 'value' => '2 vCores'],
|
||||
['label' => 'RAM', 'value' => '4 GB'],
|
||||
['label' => 'SSD Speicher', 'value' => '80 GB'],
|
||||
['label' => 'Traffic', 'value' => '3 TB'],
|
||||
['label' => 'IPv4 Adressen', 'value' => '1'],
|
||||
],
|
||||
'features' => [
|
||||
'Proxmox LXC Container',
|
||||
'Root-Zugriff',
|
||||
'SSH-Zugang',
|
||||
'Tägliches Backup',
|
||||
'24/7 Monitoring',
|
||||
'Snapshot-Funktion',
|
||||
],
|
||||
],
|
||||
'professional' => [
|
||||
'name' => 'VPC Professional',
|
||||
'price' => '19,99',
|
||||
'featured' => false,
|
||||
'specs' => [
|
||||
['label' => 'CPU Kerne', 'value' => '4 vCores'],
|
||||
['label' => 'RAM', 'value' => '8 GB'],
|
||||
['label' => 'SSD Speicher', 'value' => '160 GB'],
|
||||
['label' => 'Traffic', 'value' => '5 TB'],
|
||||
['label' => 'IPv4 Adressen', 'value' => '2'],
|
||||
],
|
||||
'features' => [
|
||||
'Proxmox LXC Container',
|
||||
'Root-Zugriff',
|
||||
'SSH-Zugang',
|
||||
'Stündliches Backup',
|
||||
'24/7 Monitoring',
|
||||
'Snapshot-Funktion',
|
||||
'Priority Support',
|
||||
],
|
||||
],
|
||||
'enterprise' => [
|
||||
'name' => 'VPC Enterprise',
|
||||
'price' => '39,99',
|
||||
'featured' => false,
|
||||
'specs' => [
|
||||
['label' => 'CPU Kerne', 'value' => '8 vCores'],
|
||||
['label' => 'RAM', 'value' => '16 GB'],
|
||||
['label' => 'SSD Speicher', 'value' => '320 GB'],
|
||||
['label' => 'Traffic', 'value' => '10 TB'],
|
||||
['label' => 'IPv4 Adressen', 'value' => '3'],
|
||||
],
|
||||
'features' => [
|
||||
'Proxmox LXC Container',
|
||||
'Root-Zugriff',
|
||||
'SSH-Zugang',
|
||||
'Stündliches Backup',
|
||||
'24/7 Monitoring',
|
||||
'Snapshot-Funktion',
|
||||
'Priority Support',
|
||||
'Individuelle Konfiguration',
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
// ============================================================================
|
||||
// VIRTUAL PRIVATE SERVER (VPS)
|
||||
// ============================================================================
|
||||
$PRODUCTS['vps'] = [
|
||||
'name' => 'Virtual Private Server',
|
||||
'short_name' => 'VPS',
|
||||
'description' => 'Vollwertige KVM-Virtualisierung mit Root-Zugriff',
|
||||
'min_price' => '9,99',
|
||||
'hero_highlight' => 'auf Proxmox KVM',
|
||||
'hero_description' => 'Maximale Flexibilität und Kontrolle mit vollwertiger KVM-Virtualisierung. Installieren Sie jedes Betriebssystem und genießen Sie vollständigen Root-Zugriff.',
|
||||
'packages_title' => 'VPS Pakete',
|
||||
'packages_description' => 'Wählen Sie das perfekte VPS-Paket für Ihre Anforderungen',
|
||||
'cta_title' => 'Bereit für Ihren VPS?',
|
||||
'cta_description' => 'Starten Sie noch heute mit einem Virtual Private Server',
|
||||
'page_title' => 'Virtual Private Server - KVM Virtualisierung | HexaHost.de',
|
||||
'page_description' => 'Virtual Private Server auf Proxmox KVM-Basis. Vollwertige Virtualisierung mit Root-Zugriff ab 9,99€/Monat bei HexaHost.de',
|
||||
'packages' => [
|
||||
'starter' => [
|
||||
'name' => 'VPS Starter',
|
||||
'price' => '9,99',
|
||||
'featured' => false,
|
||||
'specs' => [
|
||||
['label' => 'CPU Kerne', 'value' => '1 vCore'],
|
||||
['label' => 'RAM', 'value' => '2 GB'],
|
||||
['label' => 'SSD Speicher', 'value' => '40 GB'],
|
||||
['label' => 'Traffic', 'value' => '2 TB'],
|
||||
['label' => 'IPv4 Adressen', 'value' => '1'],
|
||||
],
|
||||
'features' => [
|
||||
'Proxmox KVM Virtualisierung',
|
||||
'Root-Zugriff',
|
||||
'SSH-Zugang',
|
||||
'Backup inklusive',
|
||||
'24/7 Monitoring',
|
||||
],
|
||||
],
|
||||
'business' => [
|
||||
'name' => 'VPS Business',
|
||||
'price' => '19,99',
|
||||
'featured' => true,
|
||||
'specs' => [
|
||||
['label' => 'CPU Kerne', 'value' => '2 vCores'],
|
||||
['label' => 'RAM', 'value' => '4 GB'],
|
||||
['label' => 'SSD Speicher', 'value' => '80 GB'],
|
||||
['label' => 'Traffic', 'value' => '4 TB'],
|
||||
['label' => 'IPv4 Adressen', 'value' => '1'],
|
||||
],
|
||||
'features' => [
|
||||
'Proxmox KVM Virtualisierung',
|
||||
'Root-Zugriff',
|
||||
'SSH-Zugang',
|
||||
'Tägliches Backup',
|
||||
'24/7 Monitoring',
|
||||
'Snapshot-Funktion',
|
||||
],
|
||||
],
|
||||
'professional' => [
|
||||
'name' => 'VPS Professional',
|
||||
'price' => '39,99',
|
||||
'featured' => false,
|
||||
'specs' => [
|
||||
['label' => 'CPU Kerne', 'value' => '4 vCores'],
|
||||
['label' => 'RAM', 'value' => '8 GB'],
|
||||
['label' => 'SSD Speicher', 'value' => '160 GB'],
|
||||
['label' => 'Traffic', 'value' => '8 TB'],
|
||||
['label' => 'IPv4 Adressen', 'value' => '2'],
|
||||
],
|
||||
'features' => [
|
||||
'Proxmox KVM Virtualisierung',
|
||||
'Root-Zugriff',
|
||||
'SSH-Zugang',
|
||||
'Stündliches Backup',
|
||||
'24/7 Monitoring',
|
||||
'Snapshot-Funktion',
|
||||
'Priority Support',
|
||||
],
|
||||
],
|
||||
'enterprise' => [
|
||||
'name' => 'VPS Enterprise',
|
||||
'price' => '79,99',
|
||||
'featured' => false,
|
||||
'specs' => [
|
||||
['label' => 'CPU Kerne', 'value' => '8 vCores'],
|
||||
['label' => 'RAM', 'value' => '16 GB'],
|
||||
['label' => 'SSD Speicher', 'value' => '320 GB'],
|
||||
['label' => 'Traffic', 'value' => '15 TB'],
|
||||
['label' => 'IPv4 Adressen', 'value' => '3'],
|
||||
],
|
||||
'features' => [
|
||||
'Proxmox KVM Virtualisierung',
|
||||
'Root-Zugriff',
|
||||
'SSH-Zugang',
|
||||
'Stündliches Backup',
|
||||
'24/7 Monitoring',
|
||||
'Snapshot-Funktion',
|
||||
'Priority Support',
|
||||
'Individuelle Konfiguration',
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
// ============================================================================
|
||||
// MAIL GATEWAY
|
||||
// ============================================================================
|
||||
$PRODUCTS['mail-gateway'] = [
|
||||
'name' => 'Mail Gateway',
|
||||
'short_name' => 'Mail',
|
||||
'description' => 'Professioneller E-Mail-Schutz für Unternehmen',
|
||||
'min_price' => '4,99',
|
||||
'hero_highlight' => 'für Unternehmen',
|
||||
'hero_description' => 'Professionelle E-Mail-Infrastruktur mit maximalem Schutz vor Spam und Malware. Sichern Sie Ihre geschäftliche Kommunikation mit unseren Mail Gateway Lösungen.',
|
||||
'packages_title' => 'Mail Gateway Pakete',
|
||||
'packages_description' => 'Wählen Sie das passende Mail Gateway Paket für Ihr Unternehmen',
|
||||
'cta_title' => 'Bereit für professionelle E-Mail-Kommunikation?',
|
||||
'cta_description' => 'Starten Sie noch heute mit unserem Mail Gateway',
|
||||
'page_title' => 'Mail Gateway - Professionelle E-Mail-Lösungen | HexaHost.de',
|
||||
'page_description' => 'Professionelle Mail Gateway Lösungen für Unternehmen. Spam-Schutz, E-Mail-Archivierung und sichere E-Mail-Kommunikation bei HexaHost.de',
|
||||
'packages' => [
|
||||
'starter' => [
|
||||
'name' => 'Mail Starter',
|
||||
'price' => '4,99',
|
||||
'featured' => false,
|
||||
'specs' => [
|
||||
['label' => 'Postfächer', 'value' => '5'],
|
||||
['label' => 'Speicher/Postfach', 'value' => '5 GB'],
|
||||
['label' => 'Domains', 'value' => '1'],
|
||||
['label' => 'E-Mails/Tag', 'value' => '500'],
|
||||
],
|
||||
'features' => [
|
||||
'Spam-Filter',
|
||||
'Virus-Schutz',
|
||||
'Webmail',
|
||||
'IMAP/POP3',
|
||||
'SSL/TLS Verschlüsselung',
|
||||
],
|
||||
],
|
||||
'business' => [
|
||||
'name' => 'Mail Business',
|
||||
'price' => '14,99',
|
||||
'featured' => true,
|
||||
'specs' => [
|
||||
['label' => 'Postfächer', 'value' => '25'],
|
||||
['label' => 'Speicher/Postfach', 'value' => '10 GB'],
|
||||
['label' => 'Domains', 'value' => '3'],
|
||||
['label' => 'E-Mails/Tag', 'value' => '2.000'],
|
||||
],
|
||||
'features' => [
|
||||
'Spam-Filter (erweitert)',
|
||||
'Virus-Schutz',
|
||||
'Webmail',
|
||||
'IMAP/POP3',
|
||||
'SSL/TLS Verschlüsselung',
|
||||
],
|
||||
],
|
||||
'professional' => [
|
||||
'name' => 'Mail Professional',
|
||||
'price' => '29,99',
|
||||
'featured' => false,
|
||||
'specs' => [
|
||||
['label' => 'Postfächer', 'value' => '100'],
|
||||
['label' => 'Speicher/Postfach', 'value' => '25 GB'],
|
||||
['label' => 'Domains', 'value' => '10'],
|
||||
['label' => 'E-Mails/Tag', 'value' => '10.000'],
|
||||
],
|
||||
'features' => [
|
||||
'Spam-Filter (KI-gestützt)',
|
||||
'Virus-Schutz',
|
||||
'Webmail',
|
||||
'IMAP/POP3',
|
||||
'SSL/TLS Verschlüsselung',
|
||||
],
|
||||
],
|
||||
'enterprise' => [
|
||||
'name' => 'Mail Enterprise',
|
||||
'price' => '59,99',
|
||||
'featured' => false,
|
||||
'specs' => [
|
||||
['label' => 'Postfächer', 'value' => 'Unbegrenzt'],
|
||||
['label' => 'Speicher/Postfach', 'value' => '50 GB'],
|
||||
['label' => 'Domains', 'value' => 'Unbegrenzt'],
|
||||
['label' => 'E-Mails/Tag', 'value' => 'Unbegrenzt'],
|
||||
],
|
||||
'features' => [
|
||||
'Spam-Filter (KI-gestützt)',
|
||||
'Virus-Schutz',
|
||||
'Webmail',
|
||||
'IMAP/POP3',
|
||||
'SSL/TLS Verschlüsselung',
|
||||
'Dedizierte IP',
|
||||
'Priority Support',
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
// ============================================================================
|
||||
// WEBHOSTING
|
||||
// ============================================================================
|
||||
$PRODUCTS['webhosting'] = [
|
||||
'name' => 'Webhosting',
|
||||
'short_name' => 'Webhosting',
|
||||
'description' => 'Klassisches Hosting mit PHP, MySQL und SSL. WordPress-ready mit Plesk Webhosting.',
|
||||
'min_price' => '2,99',
|
||||
'hero_highlight' => 'Alles für Ihre Website',
|
||||
'hero_description' => 'Klassisches Webhosting mit allem, was Sie für eine erfolgreiche Website benötigen. PHP, MySQL, SSL-Zertifikate und E-Mail-Postfächer - alles inklusive.',
|
||||
'packages_title' => 'Webhosting Pakete',
|
||||
'packages_description' => 'Von der ersten Website bis zum professionellen Online-Shop',
|
||||
'cta_title' => 'Bereit für Ihr Webhosting?',
|
||||
'cta_description' => 'Starten Sie noch heute mit professionellem Webhosting',
|
||||
'page_title' => 'Webhosting - Klassisches Hosting für Websites - WordPress-ready | HexaHost.de',
|
||||
'page_description' => 'Webhosting mit PHP, MySQL und SSL-Zertifikaten. Klassisches Hosting für Websites - WordPress-ready ab 2,99€/Monat bei HexaHost.de',
|
||||
'packages' => [
|
||||
'starter' => [
|
||||
'name' => 'Webhosting Starter',
|
||||
'price' => '2,99',
|
||||
'featured' => false,
|
||||
'specs' => [
|
||||
['label' => 'Webspace', 'value' => '10 GB'],
|
||||
['label' => 'Domains', 'value' => '1'],
|
||||
['label' => 'Subdomains', 'value' => '5'],
|
||||
['label' => 'Domain Aliase', 'value' => '2'],
|
||||
['label' => 'E-Mail-Postfächer', 'value' => '10'],
|
||||
['label' => 'Datenbanken', 'value' => '2 MySQL'],
|
||||
['label' => 'Traffic', 'value' => '100 GB'],
|
||||
],
|
||||
'features' => [
|
||||
'Plesk Webhosting',
|
||||
'PHP 8.4',
|
||||
'Git, WP Toolkit, Composer',
|
||||
'SSL-Zertifikat',
|
||||
'E-Mail-Postfächer',
|
||||
'MySQL Datenbanken',
|
||||
],
|
||||
],
|
||||
'business' => [
|
||||
'name' => 'Webhosting Business',
|
||||
'price' => '7,99',
|
||||
'featured' => true,
|
||||
'specs' => [
|
||||
['label' => 'Webspace', 'value' => '30 GB'],
|
||||
['label' => 'Domains Inkl.', 'value' => '1'],
|
||||
['label' => 'Subdomains', 'value' => '10'],
|
||||
['label' => 'Domain Aliase', 'value' => '2'],
|
||||
['label' => 'E-Mail-Postfächer', 'value' => '20'],
|
||||
['label' => 'Datenbanken', 'value' => '5 MySQL'],
|
||||
['label' => 'Traffic', 'value' => '100 GB'],
|
||||
],
|
||||
'features' => [
|
||||
'Plesk Webhosting',
|
||||
'PHP 8.4',
|
||||
'Git, WP Toolkit, Composer',
|
||||
'SSL-Zertifikat',
|
||||
'E-Mail-Postfächer',
|
||||
'MySQL Datenbanken',
|
||||
'Backup-Service',
|
||||
],
|
||||
],
|
||||
'professional' => [
|
||||
'name' => 'Webhosting Professional',
|
||||
'price' => '13,99',
|
||||
'featured' => false,
|
||||
'specs' => [
|
||||
['label' => 'Webspace', 'value' => '50 GB'],
|
||||
['label' => 'Domains Inkl.', 'value' => '1'],
|
||||
['label' => 'Subdomains', 'value' => 'unbegrenzt'],
|
||||
['label' => 'Domain Aliase', 'value' => 'unbegrenzt'],
|
||||
['label' => 'E-Mail-Postfächer', 'value' => '20'],
|
||||
['label' => 'Datenbanken', 'value' => '20 MySQL'],
|
||||
['label' => 'Traffic', 'value' => '100 GB'],
|
||||
],
|
||||
'features' => [
|
||||
'Plesk Webhosting',
|
||||
'PHP 8.4',
|
||||
'Git, WP Toolkit, Composer',
|
||||
'SSL-Zertifikat',
|
||||
'E-Mail-Postfächer',
|
||||
'MySQL Datenbanken',
|
||||
'Backup-Service',
|
||||
'Priority Support',
|
||||
],
|
||||
],
|
||||
'enterprise' => [
|
||||
'name' => 'Webhosting Enterprise',
|
||||
'price' => '19,99',
|
||||
'featured' => false,
|
||||
'specs' => [
|
||||
['label' => 'Webspace', 'value' => '100 GB'],
|
||||
['label' => 'Domains Inkl.', 'value' => '3'],
|
||||
['label' => 'Subdomains', 'value' => 'unbegrenzt'],
|
||||
['label' => 'Domain Aliase', 'value' => 'unbegrenzt'],
|
||||
['label' => 'E-Mail-Postfächer', 'value' => '100'],
|
||||
['label' => 'Datenbanken', 'value' => 'Unbegrenzt'],
|
||||
['label' => 'Traffic', 'value' => '1 TB'],
|
||||
],
|
||||
'features' => [
|
||||
'Plesk Webhosting',
|
||||
'PHP 8.4',
|
||||
'Git, WP Toolkit, Composer',
|
||||
'SSL-Zertifikat',
|
||||
'E-Mail-Postfächer',
|
||||
'MySQL Datenbanken',
|
||||
'Backup-Service',
|
||||
'Priority Support',
|
||||
'Individuelle Konfiguration',
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
// ============================================================================
|
||||
// HILFSFUNKTIONEN
|
||||
// ============================================================================
|
||||
|
||||
/**
|
||||
* Alle Produkte abrufen
|
||||
*/
|
||||
function getAllProducts() {
|
||||
global $PRODUCTS;
|
||||
return $PRODUCTS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ein Produkt abrufen
|
||||
*/
|
||||
function getProduct($productId) {
|
||||
global $PRODUCTS;
|
||||
return $PRODUCTS[$productId] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prüft, ob ein Produkt im Shop angezeigt werden soll
|
||||
*/
|
||||
function isProductVisible($productId) {
|
||||
global $HIDDEN_PRODUCTS;
|
||||
return !in_array($productId, $HIDDEN_PRODUCTS, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Alle Pakete eines Produkts abrufen
|
||||
*/
|
||||
function getProductPackages($productId) {
|
||||
global $PRODUCTS;
|
||||
return $PRODUCTS[$productId]['packages'] ?? [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Ein bestimmtes Paket abrufen
|
||||
*/
|
||||
function getPackage($productId, $packageId) {
|
||||
global $PRODUCTS;
|
||||
return $PRODUCTS[$productId]['packages'][$packageId] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Preis eines Pakets abrufen
|
||||
*/
|
||||
function getPackagePrice($productId, $packageId) {
|
||||
$package = getPackage($productId, $packageId);
|
||||
return $package['price'] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Minimalen Preis eines Produkts abrufen
|
||||
*/
|
||||
function getMinPrice($productId) {
|
||||
global $PRODUCTS;
|
||||
return $PRODUCTS[$productId]['min_price'] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Preis formatiert ausgeben
|
||||
*/
|
||||
function formatPrice($price, $withCurrency = true) {
|
||||
return $withCurrency ? $price . '€' : $price;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generiert HTML für eine Paket-Karte
|
||||
*/
|
||||
function renderPackageCard($productId, $packageId, $package) {
|
||||
$featuredClass = $package['featured'] ? ' featured' : '';
|
||||
$featuredBadge = $package['featured'] ? '<div class="featured-badge">Beliebt</div>' : '';
|
||||
|
||||
$specsHtml = '';
|
||||
foreach ($package['specs'] as $spec) {
|
||||
$specsHtml .= sprintf(
|
||||
'<div class="spec-item"><span class="spec-label">%s:</span><span class="spec-value">%s</span></div>',
|
||||
htmlspecialchars($spec['label']),
|
||||
htmlspecialchars($spec['value'])
|
||||
);
|
||||
}
|
||||
|
||||
$featuresHtml = '';
|
||||
foreach ($package['features'] as $feature) {
|
||||
$featuresHtml .= sprintf('<div class="feature">✓ %s</div>', htmlspecialchars($feature));
|
||||
}
|
||||
|
||||
return sprintf('
|
||||
<div class="package-card glass-card%s">
|
||||
%s
|
||||
<div class="package-header">
|
||||
<h3 class="package-name">%s</h3>
|
||||
<div class="package-price">
|
||||
<span class="price">%s€</span>
|
||||
<span class="period">/Monat</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="package-specs">
|
||||
%s
|
||||
</div>
|
||||
<div class="package-features">
|
||||
%s
|
||||
</div>
|
||||
<a href="contact.php?package=%s-%s" class="btn btn-primary">Jetzt bestellen</a>
|
||||
</div>',
|
||||
$featuredClass,
|
||||
$featuredBadge,
|
||||
htmlspecialchars($package['name']),
|
||||
$package['price'],
|
||||
$specsHtml,
|
||||
$featuresHtml,
|
||||
$productId,
|
||||
$packageId
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generiert HTML für alle Pakete eines Produkts
|
||||
*/
|
||||
function renderAllPackages($productId) {
|
||||
$packages = getProductPackages($productId);
|
||||
$html = '';
|
||||
foreach ($packages as $packageId => $package) {
|
||||
$html .= renderPackageCard($productId, $packageId, $package);
|
||||
}
|
||||
return $html;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user