header.php4.1 KB
<?php
// 1. 引入配置文件并连接数据库
if (!file_exists(__DIR__ . '/config.php')) {
die('系统未安装!请先访问 <a href="install/">安装向导</a>');
}
require __DIR__ . '/config.php';
try {
$dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=utf8mb4";
$pdo = new PDO($dsn, DB_USER, DB_PASS, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
} catch (PDOException $e) {
die("数据库连接失败:" . $e->getMessage());
}
// 全局系统设置缓存(避免多次查库)
$_site_settings = null;
/**
* 获取系统设置项
* @param string $key 设置的键名 (如 site_name)
* @param string $default 如果该键不存在,返回的默认值
* @return string
*/
function get_setting($key, $default = '') {
global $pdo, $_site_settings;
// 只在第一次调用时查询数据库
if ($_site_settings === null) {
$_site_settings = [];
try {
$stmt = $pdo->query("SELECT setting_key, setting_value FROM settings");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$_site_settings[$row['setting_key']] = $row['setting_value'];
}
} catch (PDOException $e) {
// 如果表不存在或出错,静默处理,防止页面崩溃
}
}
return isset($_site_settings[$key]) ? $_site_settings[$key] : $default;
}
// --- 基础数据查询 (分类、页面) ---
$stmt_categories = $pdo->query("SELECT id, name, slug FROM categories ORDER BY id ASC");
$categories = $stmt_categories->fetchAll(PDO::FETCH_ASSOC);
$stmt_pages = $pdo->query("SELECT id, title, slug FROM pages ORDER BY id ASC");
$pages = $stmt_pages->fetchAll(PDO::FETCH_ASSOC);
?>
<title><?php echo htmlspecialchars(get_setting('site_name', '我的博客')); ?></title>
<meta name="description" content="<?php echo htmlspecialchars(get_setting('seo_desc', '默认的网站描述')); ?>">
<link rel="stylesheet" href="/assets/css/gkstyle.css">
<script src="/assets/js/main.js"></script>
<header>
<div class="header-inner">
<div class="logo"><a href="index.php"><?php echo htmlspecialchars(get_setting('site_name', '我的博客')); ?></a></div>
<!-- 导航菜单 -->
<nav class="nav-links" id="navMenu">
<a href="/">首页</a>
<a href="archive.php">归档</a>
<a href="links.php">友链</a>
<a href="search.php">搜索</a>
<!-- 【核心修复点】将 foreach ($pages as $page) 改为 foreach ($pages as $p) -->
<!-- 页面导航 -->
<?php foreach ($pages as $p): ?>
<a href="page.php?slug=<?php echo htmlspecialchars($p['slug']); ?>"><?php echo htmlspecialchars($p['title']); ?></a>
<?php endforeach; ?>
<!-- 分类导航 -->
<?php foreach ($categories as $category): ?>
<a href="category.php?id=<?php echo $category['id']; ?>"><?php echo htmlspecialchars($category['name']); ?></a>
<?php endforeach; ?>
</nav>
<div class="header-actions">
<!-- 搜索按钮 -->
<button class="icon-btn" id="openSearch" title="搜索">
<svg viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
</button>
<!-- 暗黑模式按钮 -->
<button class="icon-btn theme-toggle" id="themeToggle" title="切换主题">
<svg viewBox="0 0 24 24"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path></svg>
</button>
<!-- 汉堡菜单 -->
<button class="hamburger" id="menuToggle" aria-label="切换菜单">
<span></span><span></span><span></span>
</button>
</div>
</div>
</header>