bare-site/html/app/view/_footer.phtml
cclohmar b93de83519 bare-site v1.0 — zero-dependency PHP micro-framework
7 languages, 3 pages (What/How/Start), 80-line router, 98KB total.

Features:
- No database, no Composer, no build step — just files on disk
- nginx PHP isolation: only index.php executes
- Bot detection with browser heuristic bypass
- Rate limiting, structured weekly logs, geo-location, Telegram alerts
- Multi-language: Accept-Language auto-detect, nav dropdown
- Article sub-page routing via /start/{slug}
- Apache + Caddy config alternatives documented in Start page
- Sample config — no real keys or secrets
2026-06-25 14:12:46 +00:00

46 lines
1.8 KiB
PHTML

<?php
# _footer.phtml
?>
</div>
<footer class="footer">
<div class="footer-content">
<div class="footer-info"><p>Powered by <strong>bare-site</strong></p></div>
<div class="footer-copyright">
<p>A zero-dependency PHP micro-framework. No database required.</p>
</div>
</div>
</footer>
<?php if (DEBUG): ?>
<div class="Debug"><!-- <?php echo json_encode($_SESSION, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT); ?> --></div>
<?php endif; ?>
<script>
document.addEventListener('DOMContentLoaded', function() {
const hamburger = document.querySelector(".hamburger");
const navMenu = document.querySelector(".nav-menu");
if (hamburger && navMenu) {
hamburger.addEventListener("click", () => {
hamburger.classList.toggle("active");
navMenu.classList.toggle("active");
document.body.style.overflow = navMenu.classList.contains('active') ? 'hidden' : '';
});
document.querySelectorAll(".nav-menu a").forEach(n => n.addEventListener("click", () => {
hamburger.classList.remove("active");
navMenu.classList.remove("active");
document.body.style.overflow = '';
}));
}
document.querySelectorAll('.dropdown').forEach(function(dropdown) {
const button = dropdown.querySelector('.dropbtn');
const content = dropdown.querySelector('.dropdown-content');
content.style.display = 'none';
button.addEventListener('click', function() {
content.style.display = content.style.display === 'block' ? 'none' : 'block';
});
});
});
</script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
</body>
</html>