Markowe fonty lokalnie, wersjonowanie assetow, seed strony zgodny z dialektem CMS
This commit is contained in:
@@ -0,0 +1,23 @@
|
|||||||
|
-- Seed v3 strony `home`: WYŁĄCZNIE elementy dozwolone dialektem CMS
|
||||||
|
-- (div/p/span/h1-h6/a/img/ul/ol/li/strong/em/table... — BEZ section/article/figure;
|
||||||
|
-- renderer Content::html usuwa niedozwolone elementy WRAZ Z ZAWARTOŚCIĄ).
|
||||||
|
UPDATE cms_pages SET
|
||||||
|
title = 'Strona główna',
|
||||||
|
draft_json = '{}',
|
||||||
|
draft_html = '',
|
||||||
|
draft_css = '',
|
||||||
|
draft_seo_title = 'FDMTech — monitoring produkcji | BlackBox Sensory, OEE',
|
||||||
|
draft_seo_description = 'Monitoring produkcji: rzeczywisty odczyt nakładu, czas pracy i przestoje maszyn, OEE i raporty. Urządzenie BlackBox Sensory.',
|
||||||
|
published_html = '<div class="hero" aria-labelledby="hero-title"><div class="hero-inner"><div><h1 id="hero-title">Porządek w pomiarach Twojej produkcji</h1><p class="hero-lede">FDMTech buduje <strong>BlackBox Sensory</strong>, licznik produkcji przy maszynie. Zlicza sztuki z czujników, zapisuje je z czasem i pokazuje, kiedy maszyna pracuje, a kiedy stoi.</p><p class="hero-actions"><a class="btn btn-primary" href="/kontakt">Zapytaj o bezpłatny audyt</a><a class="btn btn-ghost" href="#pomiary">Zobacz, co mierzy BlackBox</a></p></div></div></div><div class="wrap"><div class="section" id="pomiary" aria-labelledby="pomiary-title"><h2 id="pomiary-title">Co mierzy BlackBox</h2><p>BlackBox Sensory zlicza impulsy z czujników przy maszynie i zamienia je na sztuki. Z pomiaru powstają liczba produkcji, tempo, czas pracy i przestoje.</p><ul class="measure-list"><li><h3>Liczba sztuk</h3><p>Impulsy z czujnika optycznego lub enkodera, przeliczone na sztuki. Licznik całkowity i licznik sesji.</p></li><li><h3>Takt i tempo</h3><p>Odstępy między impulsami dają takt maszyny i tempo w sztukach na godzinę, do porównania z normą.</p></li><li><h3>Praca i przestoje</h3><p>Strumień impulsów rozróżnia pracę od postoju. Przerwy w sygnale trafiają do rejestru z czasem trwania.</p></li><li><h3>Znacznik czasu</h3><p>Każdy odczyt niesie czas, więc wracasz do konkretnej zmiany, godziny i nakładu.</p></li></ul></div><div class="section" aria-labelledby="druk-title"><div class="print-grid"><div><h2 id="druk-title">Drukarnie i powtarzalna produkcja książek</h2><p>Ten sam tytuł wraca po miesiącach — porównaj tempo i przestoje z poprzednim nakładem zamiast zgadywać.</p><ul><li>Ten sam zestaw pomiarów dla pierwszego nakładu i dodruku.</li><li>Liczba sztuk i tempo z czasem, do własnej dokumentacji partii.</li><li>Audyt zaczyna się od Twoich potrzeb, nie od cennika.</li></ul></div><div><h2>Od czego zacząć</h2><p>Opowiedz, co produkujesz i co chcesz sprawdzać. Oddzwaniamy z propozycją rozmowy.</p><p><a href="/kontakt">Umów bezpłatny audyt</a></p></div></div></div><div class="audit-band" aria-labelledby="audyt-title"><div><h2 id="audyt-title">Bezpłatny audyt</h2><p>Zapytanie trafia do zespołu FDMTech. Odpowiadamy zwykle w ciągu jednego dnia roboczego.</p></div><a class="btn btn-primary" href="/kontakt">Przejdź do formularza</a></div><div class="section" aria-labelledby="kontakt-title"><h2 id="kontakt-title">Kontakt</h2><p>FDMTech Bartosz Pulchny, Krakowska 67/1, 71-017 Szczecin, NIP 852-251-80-36, tel. <a href="tel:+48533873555">533 873 555</a>. Pełny formularz na stronie <a href="/kontakt">Kontakt</a>.</p></div></div>',
|
||||||
|
published_css = '.hero-inner{grid-template-columns:1fr;max-width:56rem}',
|
||||||
|
published_title = 'FDMTech — monitoring produkcji',
|
||||||
|
seo_title = 'FDMTech — monitoring produkcji | BlackBox Sensory, OEE',
|
||||||
|
seo_description = 'Monitoring produkcji: rzeczywisty odczyt nakładu, czas pracy i przestoje maszyn, OEE i raporty. Urządzenie BlackBox Sensory.',
|
||||||
|
status = 'published',
|
||||||
|
published_at = UTC_TIMESTAMP(),
|
||||||
|
version = 3,
|
||||||
|
updated_by = 1,
|
||||||
|
updated_at = UTC_TIMESTAMP()
|
||||||
|
WHERE slug = 'home';
|
||||||
|
INSERT INTO cms_revisions (page_id, version, snapshot_json, created_by, created_at)
|
||||||
|
SELECT id, 3, '{}', 1, UTC_TIMESTAMP() FROM cms_pages WHERE slug = 'home';
|
||||||
@@ -25,4 +25,4 @@ Formularz aplikacji dostępny pod `/kontakt` (trasa zarezerwowana, zawsze dział
|
|||||||
|
|
||||||
`APP_DEMO=true` w środowisku/.env uruchamia dane demonstracyjne bez łączenia z DB. Domyślnie false. Demo otrzymuje `noindex, nofollow`. Awaria DB w produkcyjnym trybie zawsze zwraca 503. Brak home.php: semantyczna strona demo aplikacji. Brak layout.php: techniczny dokument HTML z globalną nawigacją i stopką z `app/View.php`, bez prac nad stylistyką.
|
`APP_DEMO=true` w środowisku/.env uruchamia dane demonstracyjne bez łączenia z DB. Domyślnie false. Demo otrzymuje `noindex, nofollow`. Awaria DB w produkcyjnym trybie zawsze zwraca 503. Brak home.php: semantyczna strona demo aplikacji. Brak layout.php: techniczny dokument HTML z globalną nawigacją i stopką z `app/View.php`, bez prac nad stylistyką.
|
||||||
|
|
||||||
Zasoby lokalne `/assets/...`. CSP blokuje skrypty publikacji, inline event handlers, zewnętrzne skrypty, iframes i obiekty. Obrazy HTTPS są dopuszczone (media CMS muszą być publicznie dostępne). Nie używać inline style w home; CSS projektanta pozostaje w site.css.
|
Zasoby lokalne `/assets/...` (wersjonowane query `?v=N`, bo serwer wysyła długi cache). CSP blokuje skrypty publikacji, inline event handlers, zewnętrzne skrypty, iframes i obiekty. Obrazy HTTPS są dopuszczone (media CMS muszą być publicznie dostępne). Nie używać inline style w home; CSS projektanta pozostaje w site.css. Fonty marki wyłącznie lokalnie w `/assets/fonts/` (latin-ext obowiązkowo); brak ładowania z Google Fonts.
|
||||||
|
|||||||
+2
-2
@@ -54,12 +54,12 @@ final class View
|
|||||||
. '<title>' . $e($meta['title']) . '</title><meta name="description" content="' . $e($meta['description']) . '">'
|
. '<title>' . $e($meta['title']) . '</title><meta name="description" content="' . $e($meta['description']) . '">'
|
||||||
. '<meta name="robots" content="' . $e($meta['robots']) . '">'
|
. '<meta name="robots" content="' . $e($meta['robots']) . '">'
|
||||||
. ($meta['canonical'] !== '' ? '<link rel="canonical" href="' . $e($meta['canonical']) . '">' : '')
|
. ($meta['canonical'] !== '' ? '<link rel="canonical" href="' . $e($meta['canonical']) . '">' : '')
|
||||||
. '<link rel="stylesheet" href="/assets/css/site.css">' . $cmsStyleTag . '</head><body>'
|
. '<link rel="stylesheet" href="/assets/css/site.css?v=2">' . $cmsStyleTag . '</head><body>'
|
||||||
. '<header><a href="/">' . $e($site['name']) . '</a><nav aria-label="Nawigacja główna">' . $navigation . '</nav></header>'
|
. '<header><a href="/">' . $e($site['name']) . '</a><nav aria-label="Nawigacja główna">' . $navigation . '</nav></header>'
|
||||||
. $content . '<footer><p>' . $e($site['name']) . '</p>'
|
. $content . '<footer><p>' . $e($site['name']) . '</p>'
|
||||||
. ($site['contact_email'] !== '' ? '<a href="mailto:' . $e($site['contact_email']) . '">' . $e($site['contact_email']) . '</a>' : '')
|
. ($site['contact_email'] !== '' ? '<a href="mailto:' . $e($site['contact_email']) . '">' . $e($site['contact_email']) . '</a>' : '')
|
||||||
. ($site['contact_phone'] !== '' ? '<p>' . $e($site['contact_phone']) . '</p>' : '')
|
. ($site['contact_phone'] !== '' ? '<p>' . $e($site['contact_phone']) . '</p>' : '')
|
||||||
. '</footer><script src="/assets/js/site.js" defer></script></body></html>';
|
. '</footer><script src="/assets/js/site.js?v=2" defer></script></body></html>';
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function form(array $data): string
|
public static function form(array $data): string
|
||||||
|
|||||||
@@ -1,4 +1,46 @@
|
|||||||
/* FDMTech — warstwa projektanta. Jasne tło robocze, decyzyjny teal, sygnał limonki. */
|
/* FDMTech — warstwa projektanta. Jasne tło robocze, decyzyjny teal, sygnał limonki. */
|
||||||
|
@font-face {
|
||||||
|
font-family: "Bricolage Grotesque";
|
||||||
|
src: url("../fonts/bricolage-800.woff2") format("woff2");
|
||||||
|
font-weight: 800;
|
||||||
|
font-style: normal;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: "Bricolage Grotesque";
|
||||||
|
src: url("../fonts/bricolage-700.woff2") format("woff2");
|
||||||
|
font-weight: 700;
|
||||||
|
font-style: normal;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: "Bricolage Grotesque";
|
||||||
|
src: url("../fonts/bricolage-500.woff2") format("woff2");
|
||||||
|
font-weight: 500;
|
||||||
|
font-style: normal;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: "DM Sans";
|
||||||
|
src: url("../fonts/dmsans-400.woff2") format("woff2");
|
||||||
|
font-weight: 400;
|
||||||
|
font-style: normal;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: "DM Sans";
|
||||||
|
src: url("../fonts/dmsans-500.woff2") format("woff2");
|
||||||
|
font-weight: 500;
|
||||||
|
font-style: normal;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: "DM Sans";
|
||||||
|
src: url("../fonts/dmsans-700.woff2") format("woff2");
|
||||||
|
font-weight: 700;
|
||||||
|
font-style: normal;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
:root {
|
:root {
|
||||||
--teal: #102c32;
|
--teal: #102c32;
|
||||||
--teal-deep: #0b2025;
|
--teal-deep: #0b2025;
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -16,7 +16,7 @@ $isError = ($statusCode ?? 200) >= 400;
|
|||||||
<?php if (($meta['canonical'] ?? '') !== '') : ?>
|
<?php if (($meta['canonical'] ?? '') !== '') : ?>
|
||||||
<link rel="canonical" href="<?= $e($meta['canonical']) ?>">
|
<link rel="canonical" href="<?= $e($meta['canonical']) ?>">
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<link rel="stylesheet" href="/assets/css/site.css">
|
<link rel="stylesheet" href="/assets/css/site.css?v=2">
|
||||||
<?= $cmsStyleTag ?>
|
<?= $cmsStyleTag ?>
|
||||||
<link rel="icon" type="image/svg+xml" href="/assets/img/logo-pulse.svg">
|
<link rel="icon" type="image/svg+xml" href="/assets/img/logo-pulse.svg">
|
||||||
</head>
|
</head>
|
||||||
@@ -81,6 +81,6 @@ $isError = ($statusCode ?? 200) >= 400;
|
|||||||
<span>BlackBox Sensory to nazwa produktu FDMTech.</span>
|
<span>BlackBox Sensory to nazwa produktu FDMTech.</span>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
<script src="/assets/js/site.js" nonce="<?= $e($nonce ?? '') ?>" defer></script>
|
<script src="/assets/js/site.js?v=2" nonce="<?= $e($nonce ?? '') ?>" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user