query("SELECT * FROM groups WHERE is_visible=1 AND display='grid' ORDER BY sort_order, id")->fetchAll(); $tabGroups = $pdo->query("SELECT * FROM groups WHERE is_visible=1 AND display='tabs' ORDER BY sort_order, id")->fetchAll(); $engines = $pdo->query("SELECT * FROM engines WHERE is_active=1 ORDER BY sort_order, id")->fetchAll(); // 合集区的显示方式(后台「设置 → 合集显示方式」): // tabs = 标签页折叠(默认)—— 一次只平铺当前这一个合集 // flat = 全部平铺 —— 每个合集各占一块,一眼看全、不用点 $collLayout = setting('collections_layout', 'tabs') === 'flat' ? 'flat' : 'tabs'; // 默认引擎 $defSlug = setting('default_engine', 'bing'); $default = null; foreach ($engines as $en) { if ($en['slug'] === $defSlug) { $default = $en; break; } } if ($default === null) { $default = $engines[0] ?? null; } $primary = setting('primary_color', '#2F6BF7'); function sites_of(int $gid): array { $st = db()->prepare("SELECT * FROM sites WHERE group_id=? AND is_visible=1 ORDER BY sort_order, id"); $st->execute([$gid]); return $st->fetchAll(); } function site_label(array $s): string { return $s['short_name'] !== '' ? $s['short_name'] : ($s['name'] !== '' ? $s['name'] : domain_of($s['url'])); } /** 渲染一个网站格(网格板块与合集共用) */ function site_tile(array $s): void { $label = site_label($s); $src = icon_src($s['icon']); ?>
  • <?= e(site_name()) ?> · <?= e(setting('subtitle', '个人网站导航')) ?>

    $g, 'items' => $items]; } } ?>
    合集
    $c): ?>
    $c): ?>