From d350daa1d88e36912465209c16d5baf1f56b52bb Mon Sep 17 00:00:00 2001 From: igor Date: Mon, 15 Jun 2026 04:38:05 +0200 Subject: [PATCH] imlemented step 16 by Gemini - Template --- src/Services/Renderer.php | 22 +++++- src/Templates/base.php | 7 -- src/Templates/css/site.css | 101 ++++++++++++++++++++++++++++ src/Templates/sections/about.php | 16 +++++ src/Templates/sections/contact.php | 51 ++++++++++++++ src/Templates/sections/faq.php | 21 ++++++ src/Templates/sections/gallery.php | 20 ++++++ src/Templates/sections/hero.php | 18 +++++ src/Templates/sections/pricing.php | 13 ++++ src/Templates/sections/services.php | 28 ++++++++ src/Utils/Helpers.php | 15 +++++ 11 files changed, 302 insertions(+), 10 deletions(-) create mode 100644 src/Templates/sections/about.php create mode 100644 src/Templates/sections/contact.php create mode 100644 src/Templates/sections/faq.php create mode 100644 src/Templates/sections/gallery.php create mode 100644 src/Templates/sections/hero.php create mode 100644 src/Templates/sections/pricing.php create mode 100644 src/Templates/sections/services.php create mode 100644 src/Utils/Helpers.php diff --git a/src/Services/Renderer.php b/src/Services/Renderer.php index fd1829c..5d03445 100644 --- a/src/Services/Renderer.php +++ b/src/Services/Renderer.php @@ -6,6 +6,8 @@ namespace App\Services; use Exception; +require_once __DIR__ . '/../Utils/Helpers.php'; + class Renderer { private FileStorage $storage; @@ -41,13 +43,27 @@ class Renderer $siteCssSource = $this->templatesPath . DIRECTORY_SEPARATOR . 'css' . DIRECTORY_SEPARATOR . 'site.css'; copy($siteCssSource, $assetsDir . DIRECTORY_SEPARATOR . 'site.css'); - // 3. Render HTML + // 3. Render Content Sections + $sectionsHtml = ''; + $selectedSections = $projectData['wizard_data']['modules']['sections'] ?? []; + + foreach ($selectedSections as $sectionId) { + try { + $sectionsHtml .= $this->renderTemplate("sections/{$sectionId}", [ + 'project' => $projectData + ]); + } catch (Exception $e) { + error_log("Renderer: Failed to render section $sectionId: " . $e->getMessage()); + } + } + + // 4. Render HTML base template $html = $this->renderTemplate('base', [ 'project' => $projectData, - 'content' => '' + 'content' => $sectionsHtml ]); - // 4. Save to exports + // 5. Save to exports return file_put_contents($projectExportDir . DIRECTORY_SEPARATOR . 'index.html', $html) !== false; } diff --git a/src/Templates/base.php b/src/Templates/base.php index 5085581..0783f84 100644 --- a/src/Templates/base.php +++ b/src/Templates/base.php @@ -8,13 +8,6 @@ $identity = $project['wizard_data']['identity'] ?? []; $contact = $project['wizard_data']['contact'] ?? []; $visuals = $project['wizard_data']['visuals'] ?? []; $assets = $project['wizard_data']['assets'] ?? []; - -// Helper function for safe output -if (!function_exists('e')) { - function e($value) { - return htmlspecialchars((string)($value ?? ''), ENT_QUOTES, 'UTF-8'); - } -} ?> diff --git a/src/Templates/css/site.css b/src/Templates/css/site.css index f636772..05bc765 100644 --- a/src/Templates/css/site.css +++ b/src/Templates/css/site.css @@ -81,3 +81,104 @@ footer { padding: 4rem 0; margin-top: 2rem; } + +/* Section specific */ +.section-header { + text-align: center; + margin-bottom: 3rem; +} + +/* Hero */ +.hero { + background-color: #f3f4f6; + text-align: center; + padding: 8rem 1.5rem; +} + +.hero h1 { + font-size: 3rem; + font-weight: 800; +} + +.hero .subtitle { + font-size: 1.25rem; + color: #4b5563; + margin-bottom: 2rem; +} + +/* Services */ +.services-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 2rem; +} + +.service-card { + padding: 2rem; + border: 1px solid #e5e7eb; + border-radius: 0.5rem; + transition: transform 0.2s; +} + +.service-card:hover { + transform: translateY(-5px); +} + +.price { + font-weight: 700; + color: var(--primary-color); + margin-top: 1rem; +} + +/* Gallery */ +.gallery-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 1rem; +} + +.gallery-item img { + width: 100%; + height: 250px; + object-fit: cover; + border-radius: 0.5rem; +} + +/* FAQ */ +.faq-list { + max-width: 800px; + margin: 0 auto; +} + +.faq-item { + margin-bottom: 2rem; + border-bottom: 1px solid #e5e7eb; + padding-bottom: 1.5rem; +} + +/* Contact */ +.contact-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 4rem; +} + +.contact-form .form-group { + margin-bottom: 1rem; +} + +.contact-form input, .contact-form textarea { + width: 100%; + padding: 0.75rem; + border: 1px solid #e5e7eb; + border-radius: 0.25rem; +} + +@media (max-width: 768px) { + .contact-grid { + grid-template-columns: 1fr; + } + .hero h1 { + font-size: 2rem; + } +} diff --git a/src/Templates/sections/about.php b/src/Templates/sections/about.php new file mode 100644 index 0000000..dbe185c --- /dev/null +++ b/src/Templates/sections/about.php @@ -0,0 +1,16 @@ + +
+
+
+

+
+
+ +
+
+
diff --git a/src/Templates/sections/contact.php b/src/Templates/sections/contact.php new file mode 100644 index 0000000..7becf23 --- /dev/null +++ b/src/Templates/sections/contact.php @@ -0,0 +1,51 @@ + +
+
+
+

Kontakt

+
+
+
+

Kde nás nájdete

+

Adresa: ,

+

Email:

+

Telefón:

+ + +
+ + + + + + +
+ +
+ + +
+

Napíšte nám

+
+
+ +
+
+ +
+
+ +
+ +
+
+ +
+
+
diff --git a/src/Templates/sections/faq.php b/src/Templates/sections/faq.php new file mode 100644 index 0000000..0832509 --- /dev/null +++ b/src/Templates/sections/faq.php @@ -0,0 +1,21 @@ + +
+
+
+

Časté otázky (FAQ)

+
+
+ +
+

+

+
+ +
+
+
diff --git a/src/Templates/sections/gallery.php b/src/Templates/sections/gallery.php new file mode 100644 index 0000000..11227f2 --- /dev/null +++ b/src/Templates/sections/gallery.php @@ -0,0 +1,20 @@ + + diff --git a/src/Templates/sections/hero.php b/src/Templates/sections/hero.php new file mode 100644 index 0000000..d678274 --- /dev/null +++ b/src/Templates/sections/hero.php @@ -0,0 +1,18 @@ + +
+
+ +
+
diff --git a/src/Templates/sections/pricing.php b/src/Templates/sections/pricing.php new file mode 100644 index 0000000..9ca5801 --- /dev/null +++ b/src/Templates/sections/pricing.php @@ -0,0 +1,13 @@ + +
+
+
+

Cenník

+
+

Informácie o cenách našich služieb nájdete v sekcii Služby alebo nás kontaktujte pre individuálnu ponuku.

+
+
diff --git a/src/Templates/sections/services.php b/src/Templates/sections/services.php new file mode 100644 index 0000000..72eaf68 --- /dev/null +++ b/src/Templates/sections/services.php @@ -0,0 +1,28 @@ + +
+
+
+

Naše služby

+
+
+ +
+

+

+ +
+ +
+ +
+ +

+ +
+
diff --git a/src/Utils/Helpers.php b/src/Utils/Helpers.php new file mode 100644 index 0000000..2665de0 --- /dev/null +++ b/src/Utils/Helpers.php @@ -0,0 +1,15 @@ +