main
xgkblog/header.php
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>