2025-11-01 16:11:20 +01:00
|
|
|
<?php
|
|
|
|
|
$startTime = microtime(true);
|
|
|
|
|
$publicDir = realpath($_SERVER['DOCUMENT_ROOT']);
|
|
|
|
|
$customCssPath = __DIR__ . '/../../custom/styles/base.css';
|
|
|
|
|
$defaultCssPath = __DIR__ . '/../styles/base.css';
|
|
|
|
|
$cssPath = file_exists($customCssPath) ? $customCssPath : $defaultCssPath;
|
|
|
|
|
$cssUrl = file_exists($customCssPath) ? '/app/styles/base.css' : '/app/default-styles/base.css';
|
|
|
|
|
$cssHash = file_exists($cssPath) ? hash_file('md5', $cssPath) : 'file_not_found';
|
|
|
|
|
if (isset($GLOBALS['_SERVER']['SCRIPT_FILENAME'])) { $includingFile = $_SERVER['SCRIPT_FILENAME']; }
|
|
|
|
|
if (!empty($includingFile)) { $pageName = pathinfo($includingFile, PATHINFO_FILENAME); }
|
|
|
|
|
if (!in_array(basename(dirname($includingFile)), ['latest', 'live', 'frozen']) && basename(dirname($includingFile)) !== '') { $dirName = basename(dirname($includingFile)); }
|
|
|
|
|
function getActiveClass($href) { return rtrim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/') === rtrim($href, '/') ? 'active' : ''; }
|
|
|
|
|
?>
|
|
|
|
|
|
2025-10-02 16:54:47 +02:00
|
|
|
<!DOCTYPE html>
|
2025-11-01 16:11:20 +01:00
|
|
|
<html lang="<?= htmlspecialchars($currentLang ?? 'en') ?>">
|
2025-10-02 16:54:47 +02:00
|
|
|
<head>
|
|
|
|
|
<meta charset="UTF-8">
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
2025-11-01 16:11:20 +01:00
|
|
|
<link rel="stylesheet" href="<?= $cssUrl ?>?v=<?= $cssHash ?>">
|
|
|
|
|
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
|
|
|
|
|
<link rel="icon" href="/favicon.png" type="image/png">
|
|
|
|
|
<title><?= htmlspecialchars($pageTitle ?? 'Site Title') ?></title>
|
2025-10-02 16:54:47 +02:00
|
|
|
</head>
|
2025-11-01 16:11:20 +01:00
|
|
|
|
|
|
|
|
<body class="<?php if (isset($dirName)) echo 'section-' . $dirName . ' '; ?><?php if (isset($pageName)) echo 'page-' . $pageName; ?>">
|
|
|
|
|
<div class="grid-container">
|
|
|
|
|
<header class="contain">
|
|
|
|
|
<div>
|
|
|
|
|
<div class="logo">
|
|
|
|
|
<a href="/">
|
|
|
|
|
<svg width="200" height="60" viewBox="0 0 200 60" xmlns="http://www.w3.org/2000/svg">
|
|
|
|
|
<text x="10" y="40" font-family="Arial, sans-serif" font-size="32" font-weight="bold" fill="currentColor">LOGO</text>
|
|
|
|
|
</svg>
|
|
|
|
|
</a>
|
|
|
|
|
</div>
|
|
|
|
|
<nav>
|
|
|
|
|
<ul>
|
|
|
|
|
<a href="/" class="button <?php echo getActiveClass('/'); ?>"><li><?= htmlspecialchars($translations['home'] ?? 'Home') ?></li></a>
|
|
|
|
|
<?php if (!empty($navigation)): ?>
|
|
|
|
|
<?php foreach ($navigation as $item): ?>
|
|
|
|
|
<a href="<?= htmlspecialchars($item['url']) ?>" class="button <?php echo getActiveClass($item['url']); ?>"><li><?= htmlspecialchars($item['title']) ?></li></a>
|
|
|
|
|
<?php endforeach; ?>
|
|
|
|
|
<?php endif; ?>
|
|
|
|
|
</ul>
|
|
|
|
|
</nav>
|
|
|
|
|
</div>
|
|
|
|
|
</header>
|
|
|
|
|
|
|
|
|
|
<main>
|
|
|
|
|
<?php echo $content ?? ''; ?>
|
|
|
|
|
</main>
|
|
|
|
|
|
|
|
|
|
<footer>
|
|
|
|
|
<div class="contain">
|
|
|
|
|
<p><?= htmlspecialchars($translations['footer_text'] ?? 'Footer content goes here') ?></p>
|
|
|
|
|
<?php $endTime = microtime(true); $pageLoadTime = round(($endTime - $startTime) * 1000, 2); ?>
|
|
|
|
|
<p class="generated"><?= htmlspecialchars($translations['footer_handcoded'] ?? 'This page was generated in') ?> <?php echo $pageLoadTime; ?><?= htmlspecialchars($translations['footer_page_time'] ?? 'ms') ?></p>
|
|
|
|
|
</div>
|
|
|
|
|
</footer>
|
|
|
|
|
</div>
|
2025-10-02 16:54:47 +02:00
|
|
|
</body>
|
|
|
|
|
</html>
|