chore: 重写初始提交(清空历史,整理后全量提交)
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{$shareTitle|default='收藏夹分享'} - {$seo.title|default='网址导航'}</title>
|
||||
<meta name="keywords" content="{$seo.keywords|default=''}">
|
||||
<meta name="description" content="{$seo.description|default=''}">
|
||||
<meta name="robots" content="noindex,nofollow">
|
||||
<link rel="stylesheet" href="/static/haonav/css/nav.css">
|
||||
<style>
|
||||
.share-wrap { max-width: 960px; margin: 30px auto; padding: 0 16px; }
|
||||
.share-head { background: var(--nav-card); color: var(--nav-card-text); border-radius: 18px; padding: 30px; text-align: center; box-shadow: 0 8px 30px rgba(0,0,0,.15); }
|
||||
.share-head h1 { font-size: 26px; margin: 0 0 10px; }
|
||||
.share-head .meta { color: var(--nav-muted); font-size: 13px; }
|
||||
.share-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 14px; margin-top: 22px; }
|
||||
.share-card { display: flex; align-items: center; gap: 10px; background: var(--nav-card); color: var(--nav-card-text); border-radius: 12px; padding: 14px; text-decoration: none; box-shadow: 0 4px 14px rgba(0,0,0,.08); transition: transform .15s, box-shadow .15s; }
|
||||
.share-card:hover { transform: translateY(-3px); box-shadow: 0 8px 22px rgba(0,0,0,.16); }
|
||||
.share-card img { width: 34px; height: 34px; border-radius: 8px; object-fit: cover; background: var(--nav-tag-bg); flex-shrink: 0; }
|
||||
.share-card .t { font-size: 14px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
||||
.share-empty, .share-invalid { background: var(--nav-card); color: var(--nav-card-text); border-radius: 18px; padding: 60px 30px; text-align: center; box-shadow: 0 8px 30px rgba(0,0,0,.15); margin-top: 22px; }
|
||||
.share-invalid .big { font-size: 48px; margin-bottom: 14px; }
|
||||
.share-actions { text-align: center; margin-top: 24px; }
|
||||
.btn { padding: 12px 28px; border: none; border-radius: 22px; font-size: 15px; font-weight: 600; cursor: pointer; text-decoration: none; display: inline-block; }
|
||||
.btn-primary { background: var(--nav-primary); color: #fff; }
|
||||
.btn-primary:hover { filter: brightness(1.08); }
|
||||
.btn-secondary { background: transparent; color: var(--nav-primary); border: 2px solid var(--nav-primary); margin-left: 10px; }
|
||||
#cloneTip { font-size: 13px; color: var(--nav-muted); margin-top: 12px; }
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="navbar">
|
||||
<div class="navbar-content">
|
||||
<a href="/haonav/index.html" class="logo">🚀 网址导航</a>
|
||||
<div class="nav-actions">
|
||||
<div class="nav-links"><a href="/haonav/index.html">首页</a><a href="/haonav/rank.html">排行榜</a><a href="/haonav/submit.html">投稿</a></div>
|
||||
<button class="icon-btn" id="themeToggle" title="切换暗黑模式">🌙</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="share-wrap">
|
||||
{if $valid}
|
||||
<div class="share-head">
|
||||
<h1>⭐ {$shareTitle}</h1>
|
||||
<p class="meta">好友分享的收藏夹 · 共 {$count} 个网站</p>
|
||||
</div>
|
||||
|
||||
{if $count > 0}
|
||||
<div class="share-grid" id="shareGrid">
|
||||
{volist name="list" id="it"}
|
||||
<a class="share-card" href="{$it.url}" target="_blank" rel="noopener nofollow"
|
||||
data-title="{$it.title}" data-url="{$it.url}" data-icon="{$it.icon}">
|
||||
<img src="{$it.icon|default='/static/haonav/img/default.png'}" alt="" onerror="this.src='/static/haonav/img/default.png'">
|
||||
<span class="t">{$it.title}</span>
|
||||
</a>
|
||||
{/volist}
|
||||
</div>
|
||||
|
||||
<div class="share-actions">
|
||||
<button class="btn btn-primary" id="cloneBtn">📥 一键收藏到我的导航</button>
|
||||
<a class="btn btn-secondary" href="/haonav/index.html">去我的导航</a>
|
||||
<p id="cloneTip"></p>
|
||||
</div>
|
||||
{else/}
|
||||
<div class="share-empty">这个收藏夹还是空的~</div>
|
||||
{/if}
|
||||
|
||||
{else/}
|
||||
<div class="share-invalid">
|
||||
<div class="big">🔒</div>
|
||||
<h2>{$shareTitle}</h2>
|
||||
<p style="color:var(--nav-muted);margin-top:10px;">链接可能已被关闭分享或不存在。</p>
|
||||
<div class="share-actions"><a class="btn btn-primary" href="/haonav/index.html">返回首页</a></div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<script src="/static/haonav/js/nav.js"></script>
|
||||
<script>
|
||||
// 一键把分享的收藏夹合并到本机「我的导航」(localStorage),回首页后 nav.js 会自动上云
|
||||
(function () {
|
||||
var btn = document.getElementById('cloneBtn');
|
||||
if (!btn) { return; }
|
||||
btn.addEventListener('click', function () {
|
||||
var FAV_KEY = 'haonav_fav';
|
||||
var cur = [];
|
||||
try { cur = JSON.parse(localStorage.getItem(FAV_KEY)) || []; } catch (e) { cur = []; }
|
||||
var seen = {};
|
||||
cur.forEach(function (x) { seen[x.url] = 1; });
|
||||
var added = 0;
|
||||
Array.prototype.forEach.call(document.querySelectorAll('.share-card'), function (el) {
|
||||
var url = el.getAttribute('data-url');
|
||||
if (!url || seen[url]) { return; }
|
||||
seen[url] = 1;
|
||||
cur.push({ id: 0, title: el.getAttribute('data-title'), url: url, icon: el.getAttribute('data-icon') });
|
||||
added++;
|
||||
});
|
||||
localStorage.setItem(FAV_KEY, JSON.stringify(cur));
|
||||
var tip = document.getElementById('cloneTip');
|
||||
tip.textContent = added > 0 ? ('已添加 ' + added + ' 个到本机,去首页即可同步~') : '这些网站都已在你的收藏中';
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,127 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>申请收录 / 广告合作 - 网址导航</title>
|
||||
<link rel="stylesheet" href="/static/haonav/css/nav.css">
|
||||
<style>
|
||||
.apply-tabs{display:flex;gap:10px;margin-bottom:18px;}
|
||||
.apply-tabs button{flex:1;padding:10px;border:1px solid var(--nav-border,#e5e5e5);background:var(--nav-card-bg,#fff);color:var(--nav-card-text,#333);border-radius:10px;cursor:pointer;font-size:15px;}
|
||||
.apply-tabs button.active{background:#667eea;color:#fff;border-color:#667eea;}
|
||||
.hp-field{position:absolute;left:-9999px;opacity:0;height:0;overflow:hidden;}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="navbar">
|
||||
<div class="navbar-content">
|
||||
<a href="/haonav/index.html" class="logo">🚀 网址导航</a>
|
||||
<form class="search-box" id="searchForm">
|
||||
<select id="searchEngine">
|
||||
<option value="baidu" {$config.default_engine == 'baidu' ? 'selected' : ''}>百度</option>
|
||||
<option value="bing" {$config.default_engine == 'bing' ? 'selected' : ''}>必应</option>
|
||||
<option value="google" {$config.default_engine == 'google' ? 'selected' : ''}>Google</option>
|
||||
<option value="sogou" {$config.default_engine == 'sogou' ? 'selected' : ''}>搜狗</option>
|
||||
<option value="site" {$config.default_engine == 'site' ? 'selected' : ''}>站内</option>
|
||||
</select>
|
||||
<input type="text" id="searchInput" autocomplete="off" placeholder="搜索网站 / 关键词">
|
||||
<button type="submit">🔍 搜索</button>
|
||||
</form>
|
||||
<div class="nav-actions">
|
||||
<div class="nav-links">
|
||||
<a href="/haonav/index.html">首页</a>
|
||||
<a href="/haonav/rank.html">排行榜</a>
|
||||
<a href="/haonav/submit.html">投稿</a>
|
||||
<a href="/haonav/apply.html" class="active">合作申请</a>
|
||||
</div>
|
||||
<button class="icon-btn" id="themeToggle" title="切换暗黑模式">🌙</button>
|
||||
<div class="user-area" id="userArea">
|
||||
<button class="nav-btn" id="btnLogin">登录</button>
|
||||
<button class="nav-btn nav-btn-primary" id="btnRegister">注册</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="main-content">
|
||||
<div class="submit-box">
|
||||
<h2>🤝 申请收录 / 广告合作</h2>
|
||||
<div class="apply-tabs">
|
||||
<button type="button" class="active" data-type="1">友链 / 收录申请</button>
|
||||
<button type="button" data-type="2">广告合作</button>
|
||||
</div>
|
||||
<form id="applyForm">
|
||||
<input type="hidden" name="type" value="1">
|
||||
<!-- 蜜罐字段:请勿填写 -->
|
||||
<div class="hp-field" aria-hidden="true">
|
||||
<input type="text" name="website" tabindex="-1" autocomplete="off">
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label>网站 / 品牌名称 *</label>
|
||||
<input type="text" name="title" required maxlength="100" placeholder="例如:某某工具站">
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label>网址 *</label>
|
||||
<input type="url" name="url" required placeholder="https://...">
|
||||
</div>
|
||||
<div class="form-row" id="slotRow" style="display:none;">
|
||||
<label>意向广告位</label>
|
||||
<select name="slot">
|
||||
<option value="">不确定 / 由站长推荐</option>
|
||||
{foreach $slots as $sk=>$sv}<option value="{$sk}">{$sv}</option>{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label>说明</label>
|
||||
<textarea name="description" maxlength="500" placeholder="友链:一句话介绍您的网站;广告:投放需求、预算与周期等"></textarea>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label>联系方式 *</label>
|
||||
<input type="text" name="contact" required maxlength="100" placeholder="邮箱 / QQ / 微信,审核结果将通过它联系您">
|
||||
</div>
|
||||
<button type="submit" class="btn-primary">提交申请</button>
|
||||
<div class="form-msg" id="applyMsg"></div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p>© 2026 网址导航 - 让上网更简单</p>
|
||||
</div>
|
||||
|
||||
<script src="/static/haonav/js/nav.js"></script>
|
||||
<script src="/static/haonav/js/auth.js"></script>
|
||||
<script>
|
||||
(function () {
|
||||
var form = document.getElementById('applyForm');
|
||||
var msg = document.getElementById('applyMsg');
|
||||
var typeInput = form.querySelector('input[name="type"]');
|
||||
var slotRow = document.getElementById('slotRow');
|
||||
document.querySelectorAll('.apply-tabs button').forEach(function (btn) {
|
||||
btn.addEventListener('click', function () {
|
||||
document.querySelectorAll('.apply-tabs button').forEach(function (b) { b.classList.remove('active'); });
|
||||
btn.classList.add('active');
|
||||
typeInput.value = btn.dataset.type;
|
||||
slotRow.style.display = btn.dataset.type === '2' ? '' : 'none';
|
||||
});
|
||||
});
|
||||
form.addEventListener('submit', function (e) {
|
||||
e.preventDefault();
|
||||
var fd = new FormData(form);
|
||||
msg.textContent = '提交中...';
|
||||
fetch('/haonav/apply.html', {
|
||||
method: 'POST',
|
||||
headers: { 'X-Requested-With': 'XMLHttpRequest' },
|
||||
body: fd
|
||||
}).then(function (r) { return r.json(); }).then(function (res) {
|
||||
msg.textContent = res.message || res.msg || '';
|
||||
if (res.code === 0) { form.reset(); typeInput.value = document.querySelector('.apply-tabs button.active').dataset.type; }
|
||||
}).catch(function () { msg.textContent = '网络异常,请稍后再试'; });
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,115 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{$info.title|default='网址分类'} - {$seo.title|default='网址导航'}</title>
|
||||
<meta name="keywords" content="{$info.keywords | default='网址导航,分类'}">
|
||||
<meta name="description" content="{$info.description | default='网址导航分类'}">
|
||||
{notempty name="info"}<link rel="canonical" href="{$siteUrl|default=''}/haonav/category/{$info.id}.html">{/notempty}
|
||||
<link rel="stylesheet" href="/static/haonav/css/nav.css">
|
||||
<style>
|
||||
.website-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 14px; }
|
||||
.website-item {
|
||||
padding: 12px 15px; background: var(--nav-card); border-radius: 10px; display: flex; align-items: center; gap: 12px;
|
||||
cursor: pointer; transition: all .3s; text-decoration: none; color: var(--nav-card-text); position: relative;
|
||||
box-shadow: 0 2px 10px rgba(0,0,0,.08);
|
||||
}
|
||||
.website-item:hover { background: var(--nav-primary); color: #fff; transform: translateY(-2px); }
|
||||
.website-item:hover .website-item-info h3, .website-item:hover .website-item-info p { color: #fff; }
|
||||
.website-item-icon { width: 44px; height: 44px; border-radius: 8px; display: flex; align-items: center; justify-content: center; background: var(--nav-tag-bg); font-size: 16px; overflow: hidden; flex-shrink: 0; }
|
||||
.website-item-icon img { width: 100%; height: 100%; object-fit: cover; }
|
||||
.website-item-info { min-width: 0; }
|
||||
.website-item-info h3 { font-size: 15px; margin-bottom: 3px; transition: color .3s; }
|
||||
.website-item-info p { font-size: 12px; color: var(--nav-muted); transition: color .3s; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
|
||||
.website-item .qr-btn { position: absolute; right: 10px; top: 8px; opacity: 0; cursor: pointer; font-size: 13px; color: var(--nav-muted); }
|
||||
.website-item:hover .qr-btn { opacity: 1; color: #fff; }
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="navbar">
|
||||
<div class="navbar-content">
|
||||
<a href="/haonav/index.html" class="logo">🚀 网址导航</a>
|
||||
<form class="search-box" id="searchForm">
|
||||
<select id="searchEngine">
|
||||
<option value="baidu">百度</option>
|
||||
<option value="bing">必应</option>
|
||||
<option value="google">Google</option>
|
||||
<option value="sogou">搜狗</option>
|
||||
<option value="site" selected>站内</option>
|
||||
</select>
|
||||
<input type="text" id="searchInput" autocomplete="off" placeholder="搜索网站 / 关键词">
|
||||
<button type="submit">🔍 搜索</button>
|
||||
</form>
|
||||
<div class="nav-actions">
|
||||
<div class="nav-links">
|
||||
<a href="/haonav/index.html">首页</a>
|
||||
<a href="/haonav/rank.html">排行榜</a>
|
||||
<a href="/haonav/submit.html">投稿</a>
|
||||
</div>
|
||||
<button class="icon-btn" id="themeToggle" title="切换暗黑模式">🌙</button>
|
||||
<div class="user-area" id="userArea">
|
||||
<button class="nav-btn" id="btnLogin">登录</button>
|
||||
<button class="nav-btn nav-btn-primary" id="btnRegister">注册</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="main-content">
|
||||
<div class="section-title">
|
||||
<h2>📋 {$info.title}</h2>
|
||||
</div>
|
||||
<div class="website-list">
|
||||
{volist name="info.links" id="link"}
|
||||
<a href="/haonav/site/{$link.id}.html" class="website-item">
|
||||
<span class="website-item-icon"><img src="{$link.show_icon}" loading="lazy" alt="{$link.title}"></span>
|
||||
<span class="website-item-info">
|
||||
<h3>{$link.title}</h3>
|
||||
<p>{$link.description|default='暂无描述'}</p>
|
||||
</span>
|
||||
<span class="qr-btn js-qr" data-url="{$link.url}" title="二维码">▦</span>
|
||||
</a>
|
||||
{/volist}
|
||||
</div>
|
||||
<!-- 二级子分类 -->
|
||||
{volist name="info.children" id="sub"}
|
||||
<div class="sub-category" style="margin-top:24px;">
|
||||
<div class="sub-title"><span>{$sub.icon} {$sub.title}</span></div>
|
||||
<div class="website-list">
|
||||
{volist name="sub.links" id="link"}
|
||||
<a href="/haonav/site/{$link.id}.html" class="website-item">
|
||||
<span class="website-item-icon"><img src="{$link.show_icon}" loading="lazy" alt="{$link.title}"></span>
|
||||
<span class="website-item-info">
|
||||
<h3>{$link.title}</h3>
|
||||
<p>{$link.description|default='暂无描述'}</p>
|
||||
</span>
|
||||
<span class="qr-btn js-qr" data-url="{$link.url}" title="二维码">▦</span>
|
||||
</a>
|
||||
{/volist}
|
||||
</div>
|
||||
</div>
|
||||
{/volist}
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p>© 2026 网址导航 - 让上网更简单</p>
|
||||
</div>
|
||||
|
||||
<div class="qr-mask" id="qrMask">
|
||||
<div class="qr-box">
|
||||
<img id="qrImg" src="" alt="二维码">
|
||||
<p id="qrText"></p>
|
||||
<span class="close">关闭</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 登录 / 注册 弹层由全局组件 auth.js 自动注入 -->
|
||||
|
||||
<script src="/static/haonav/js/nav.js"></script>
|
||||
<script src="/static/haonav/js/auth.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,143 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{$info.title|default='网址详情'} - {$seo.title|default='网址导航'}</title>
|
||||
{notempty name="info"}
|
||||
<meta name="keywords" content="{$info.keywords|default=''}">
|
||||
<meta name="description" content="{$info.description|default=''}">
|
||||
<link rel="canonical" href="{$siteUrl|default=''}/haonav/site/{$info.id}.html">
|
||||
{/notempty}
|
||||
{notempty name="jsonld"}<script type="application/ld+json">{$jsonld|raw}</script>{/notempty}
|
||||
<link rel="stylesheet" href="/static/haonav/css/nav.css">
|
||||
<style>
|
||||
.detail-container {
|
||||
background: var(--nav-card); color: var(--nav-card-text); border-radius: 20px; padding: 50px;
|
||||
max-width: 600px; width: 100%; text-align: center; box-shadow: 0 10px 40px rgba(0,0,0,.3);
|
||||
animation: fadeIn .5s ease; margin: 30px auto;
|
||||
}
|
||||
@keyframes fadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }
|
||||
.website-icon-large { width: 100px; height: 100px; border-radius: 50%; display: flex; align-items: center; justify-content: center; margin: 0 auto 24px; background: var(--nav-tag-bg); font-size: 44px; overflow: hidden; box-shadow: 0 5px 20px rgba(102,126,234,.4); }
|
||||
.website-icon-large img { width: 100%; height: 100%; object-fit: cover; }
|
||||
.website-name-large { font-size: 30px; font-weight: bold; margin-bottom: 14px; }
|
||||
.website-desc-large { font-size: 15px; color: var(--nav-muted); margin-bottom: 26px; line-height: 1.6; }
|
||||
.countdown-box { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 22px; border-radius: 15px; margin: 26px 0; color: #fff; }
|
||||
.countdown-number { font-size: 56px; font-weight: bold; margin: 0; animation: pulse 1s infinite; }
|
||||
@keyframes pulse { 0%,100% { transform: scale(1); } 50% { transform: scale(1.1); } }
|
||||
.action-buttons { display: flex; gap: 14px; justify-content: center; margin-top: 26px; flex-wrap: wrap; }
|
||||
.btn { padding: 14px 32px; border: none; border-radius: 25px; font-size: 15px; font-weight: 600; cursor: pointer; text-decoration: none; display: inline-block; }
|
||||
.btn-primary { background: var(--nav-primary); color: #fff; }
|
||||
.btn-primary:hover { filter: brightness(1.08); transform: translateY(-2px); }
|
||||
.btn-secondary { background: transparent; color: var(--nav-primary); border: 2px solid var(--nav-primary); }
|
||||
.info-text { font-size: 13px; color: var(--nav-muted); margin-top: 18px; line-height: 1.6; }
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="navbar">
|
||||
<div class="navbar-content">
|
||||
<a href="/haonav/index.html" class="logo">🚀 网址导航</a>
|
||||
<div class="nav-actions">
|
||||
<div class="nav-links"><a href="/haonav/index.html">首页</a><a href="/haonav/rank.html">排行榜</a><a href="/haonav/submit.html">投稿</a></div>
|
||||
<button class="icon-btn" id="themeToggle" title="切换暗黑模式">🌙</button>
|
||||
<div class="user-area" id="userArea">
|
||||
<button class="nav-btn" id="btnLogin">登录</button>
|
||||
<button class="nav-btn nav-btn-primary" id="btnRegister">注册</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="detail-container">
|
||||
<img src="{$info.show_icon}" class="website-icon-large" id="websiteIcon" alt="{$info.title}">
|
||||
<h1 class="website-name-large" id="websiteName">{$info.title}</h1>
|
||||
|
||||
<div class="rating-box" id="ratingBox" data-id="{$info.id}">
|
||||
<div class="stars" id="rateStars">
|
||||
<span class="star" data-score="1">★</span>
|
||||
<span class="star" data-score="2">★</span>
|
||||
<span class="star" data-score="3">★</span>
|
||||
<span class="star" data-score="4">★</span>
|
||||
<span class="star" data-score="5">★</span>
|
||||
</div>
|
||||
<div class="rating-meta">
|
||||
<span class="rating-score" id="ratingScore">{$info.rating|default='0.0'}</span>
|
||||
<span class="rating-count" id="ratingCount">{$info.rating_count|default='0'} 人评分</span>
|
||||
</div>
|
||||
</div>
|
||||
<p class="rating-tip" id="ratingTip">点击星星即可评分(需登录)</p>
|
||||
|
||||
<p class="website-desc-large" id="websiteDesc">{$info.description | default='暂无描述'}</p>
|
||||
|
||||
<!-- 广告位:详情页内联 -->
|
||||
{notempty name="ads.detail_inline"}
|
||||
<div class="ad-box ad-detail-inline">
|
||||
<span class="ad-label">广告</span>
|
||||
{volist name="ads.detail_inline" id="ad"}
|
||||
{if $ad.type == 1}
|
||||
<a class="ad-item" href="/haonav/ad/click?id={$ad.id}" target="_blank" rel="nofollow">
|
||||
<img src="{$ad.image}" alt="{$ad.title}" loading="lazy">
|
||||
</a>
|
||||
{else/}
|
||||
{$ad.code|raw}
|
||||
{/if}
|
||||
{/volist}
|
||||
</div>
|
||||
{/notempty}
|
||||
|
||||
<img src="/haonav/snapshot.html?id={$info.id}" alt="网站预览" loading="lazy"
|
||||
style="width:100%;border-radius:12px;margin:0 0 22px;display:none;box-shadow:0 4px 16px rgba(0,0,0,.15);"
|
||||
onload="if(this.naturalWidth>120){this.style.display='block';}">
|
||||
|
||||
<div class="countdown-box">
|
||||
<div class="countdown-title">⏳ 正在为您跳转到目标网站</div>
|
||||
<p class="countdown-number" id="countdown">3</p>
|
||||
</div>
|
||||
|
||||
<div class="action-buttons">
|
||||
<a href="{$info.outbound_url | default='/'}" class="btn btn-primary" id="skipBtn">立即跳转</a>
|
||||
<a href="index.html" class="btn btn-secondary">返回首页</a>
|
||||
<button class="btn btn-secondary js-qr" data-url="{$info.url}" style="cursor:pointer;">分享二维码</button>
|
||||
</div>
|
||||
|
||||
<p class="info-text">⚠️ 温馨提示:如果不想等待,可点击「立即跳转」。如果跳转失败,请检查网络或直接访问目标网址。</p>
|
||||
</div>
|
||||
|
||||
<div class="qr-mask" id="qrMask">
|
||||
<div class="qr-box">
|
||||
<img id="qrImg" src="" alt="二维码">
|
||||
<p id="qrText"></p>
|
||||
<span class="close">关闭</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 登录 / 注册 弹层由全局组件 auth.js 自动注入 -->
|
||||
|
||||
<script src="/static/haonav/js/nav.js"></script>
|
||||
<script src="/static/haonav/js/auth.js"></script>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
var url = document.getElementById('skipBtn').href;
|
||||
if (!url) { return; }
|
||||
var countdown = 3;
|
||||
var el = document.getElementById('countdown');
|
||||
var timer = setInterval(function () {
|
||||
countdown--;
|
||||
el.textContent = countdown;
|
||||
if (countdown <= 0) {
|
||||
clearInterval(timer);
|
||||
window.location.href = url;
|
||||
}
|
||||
}, 1000);
|
||||
document.getElementById('skipBtn').addEventListener('click', function (e) {
|
||||
e.preventDefault();
|
||||
clearInterval(timer);
|
||||
window.location.href = url;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,277 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{$seo.title|default='网址导航 - 首页'}</title>
|
||||
<meta name="keywords" content="{$seo.keywords|default='网址导航,常用网址,上网导航'}">
|
||||
<meta name="description" content="{$seo.description|default='简洁实用的网址导航,支持分类管理、搜索聚合、我的导航与暗黑模式'}">
|
||||
<link rel="canonical" href="{$siteUrl|default=''}/haonav/index.html">
|
||||
{notempty name="jsonld"}<script type="application/ld+json">{$jsonld|raw}</script>{/notempty}
|
||||
<link rel="stylesheet" href="/static/haonav/css/nav.css">
|
||||
<link rel="manifest" href="/static/haonav/manifest.json">
|
||||
<meta name="theme-color" content="#667eea">
|
||||
<style>
|
||||
.widget-row{display:flex;gap:16px;margin-bottom:18px;flex-wrap:wrap;}
|
||||
.weather-widget{background:var(--nav-card-bg,#fff);color:var(--nav-card-text,#333);border-radius:12px;padding:14px 18px;display:flex;align-items:center;gap:12px;box-shadow:0 2px 10px rgba(0,0,0,.06);min-width:220px;flex-wrap:wrap;}
|
||||
.weather-widget .w-city{font-weight:700;font-size:16px;}
|
||||
.weather-widget .w-temp{color:#f76b1c;font-weight:700;}
|
||||
.weather-widget .w-tips{color:var(--nav-muted,#999);font-size:12px;width:100%;}
|
||||
.hotsearch-widget{flex:1;min-width:280px;background:var(--nav-card-bg,#fff);border-radius:12px;padding:12px 16px;box-shadow:0 2px 10px rgba(0,0,0,.06);}
|
||||
.hotsearch-widget .hs-head{display:flex;justify-content:space-between;align-items:center;font-weight:700;color:var(--nav-card-text,#333);margin-bottom:8px;}
|
||||
.hotsearch-widget .hs-tabs a{font-weight:400;font-size:13px;color:var(--nav-muted,#999);cursor:pointer;margin-left:10px;}
|
||||
.hotsearch-widget .hs-tabs a.active{color:#1E9FFF;font-weight:700;}
|
||||
.hotsearch-widget .hs-list{list-style:none;margin:0;padding:0;columns:2;column-gap:24px;}
|
||||
.hotsearch-widget .hs-list li{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:14px;break-inside:avoid;}
|
||||
.hotsearch-widget .hs-list li .rk{width:18px;text-align:center;color:#bbb;font-weight:700;font-style:normal;}
|
||||
.hotsearch-widget .hs-list li:nth-child(1) .rk,.hotsearch-widget .hs-list li:nth-child(2) .rk,.hotsearch-widget .hs-list li:nth-child(3) .rk{color:#f76b1c;}
|
||||
.hotsearch-widget .hs-list li a{color:var(--nav-card-text,#333);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
|
||||
.hotsearch-widget .hs-list li a:hover{color:#1E9FFF;}
|
||||
@media (max-width:640px){.hotsearch-widget .hs-list{columns:1;}}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- 顶部导航栏 -->
|
||||
<div class="navbar">
|
||||
<div class="navbar-content">
|
||||
<a href="/haonav/index.html" class="logo">🚀 网址导航</a>
|
||||
<form class="search-box" id="searchForm">
|
||||
<select id="searchEngine">
|
||||
<option value="baidu" {$config.default_engine == 'baidu' ? 'selected' : ''}>百度</option>
|
||||
<option value="bing" {$config.default_engine == 'bing' ? 'selected' : ''}>必应</option>
|
||||
<option value="google" {$config.default_engine == 'google' ? 'selected' : ''}>Google</option>
|
||||
<option value="sogou" {$config.default_engine == 'sogou' ? 'selected' : ''}>搜狗</option>
|
||||
<option value="site" {$config.default_engine == 'site' ? 'selected' : ''}>站内</option>
|
||||
</select>
|
||||
<input type="text" id="searchInput" autocomplete="off" placeholder="搜索网站 / 关键词,或按 / 聚焦">
|
||||
<button type="submit">🔍 搜索</button>
|
||||
</form>
|
||||
<div class="nav-actions">
|
||||
<div class="nav-links">
|
||||
<a href="/haonav/index.html" class="active">首页</a>
|
||||
<a href="/haonav/rank.html">排行榜</a>
|
||||
<a href="/haonav/submit.html">投稿</a>
|
||||
<a href="/haonav/search.html">全站搜索</a>
|
||||
</div>
|
||||
<button class="icon-btn" id="themeToggle" title="切换暗黑模式">🌙</button>
|
||||
<button class="icon-btn" id="pwaInstallBtn" title="安装为桌面应用" style="display:none;">📲</button>
|
||||
<button class="icon-btn" id="setHomeBtn" title="设为首页 / 收藏本站">📌</button>
|
||||
<select id="bgPicker" title="切换背景" style="border:none;border-radius:20px;padding:6px 8px;background:var(--nav-tag-bg);color:var(--nav-card-text);cursor:pointer;">
|
||||
<option value="default">默认背景</option>
|
||||
<option value="linear-gradient(135deg,#11998e 0%,#38ef7d 100%)">清新绿</option>
|
||||
<option value="linear-gradient(135deg,#2193b0 0%,#6dd5ed 100%)">天空蓝</option>
|
||||
<option value="linear-gradient(135deg,#ee9ca7 0%,#ffdde1 100%)">樱花粉</option>
|
||||
<option value="linear-gradient(135deg,#232526 0%,#414345 100%)">暗夜灰</option>
|
||||
</select>
|
||||
<!-- 会员区:未登录显示登录/注册,已登录显示头像下拉 -->
|
||||
<div class="user-area" id="userArea">
|
||||
<button class="nav-btn" id="btnLogin">登录</button>
|
||||
<button class="nav-btn nav-btn-primary" id="btnRegister">注册</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="main-content">
|
||||
<!-- 广告位:首页顶部 -->
|
||||
{notempty name="ads.home_top"}
|
||||
<div class="ad-box ad-home-top">
|
||||
<span class="ad-label">广告</span>
|
||||
{volist name="ads.home_top" id="ad"}
|
||||
{if $ad.type == 1}
|
||||
<a class="ad-item" href="/haonav/ad/click?id={$ad.id}" target="_blank" rel="nofollow">
|
||||
<img src="{$ad.image}" alt="{$ad.title}" loading="lazy">
|
||||
</a>
|
||||
{else/}
|
||||
{$ad.code|raw}
|
||||
{/if}
|
||||
{/volist}
|
||||
</div>
|
||||
{/notempty}
|
||||
|
||||
<!-- 顶部小组件:天气 + 实时热搜 -->
|
||||
<div class="widget-row">
|
||||
<div class="weather-widget" id="weatherWidget" style="display:none;">
|
||||
<span class="w-city" id="wCity"></span>
|
||||
<span class="w-type" id="wType"></span>
|
||||
<span class="w-temp" id="wTemp"></span>
|
||||
<span class="w-tips" id="wTips"></span>
|
||||
</div>
|
||||
<div class="hotsearch-widget" id="hotSearchWidget" style="display:none;">
|
||||
<div class="hs-head"><span>🔥 实时热搜</span> <span class="hs-tabs" id="hsTabs">
|
||||
<a data-src="baidu" class="active">百度</a>
|
||||
<a data-src="weibo">微博</a>
|
||||
<a data-src="zhihu">知乎</a>
|
||||
</span></div>
|
||||
<ol class="hs-list" id="hotSearchList"></ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 我的导航(收藏) -->
|
||||
<div class="mynav">
|
||||
<div class="mynav-head">
|
||||
<h3>⭐ 我的导航 <span class="tip" id="myNavTip">(点击卡片上的 ★ 收藏,可拖拽排序)</span></h3>
|
||||
<button class="nav-btn" id="favShareBtn" title="生成分享链接,把收藏夹分享给好友">🔗 分享收藏夹</button>
|
||||
</div>
|
||||
<div class="mynav-list" id="myNavList"></div>
|
||||
<div class="mynav-empty" id="myNavEmpty">还没有收藏,点击任意网址卡片右上角的 ★ 添加到这里~</div>
|
||||
</div>
|
||||
|
||||
<!-- 热门推荐 -->
|
||||
<div class="hot-recommend">
|
||||
<h3>🔥 热门推荐</h3>
|
||||
<div class="hot-grid">
|
||||
{volist name='hotspot' id='vo'}
|
||||
<div class="hot-item">
|
||||
<a href="/haonav/site/{$vo.id}.html" target="_blank" style="display:flex;align-items:center;gap:10px;text-decoration:none;color:inherit;flex:1;min-width:0;">
|
||||
<span class="hot-icon"><img src="{$vo.show_icon}" loading="lazy" alt="{$vo.title}"></span>
|
||||
<span class="hot-info">
|
||||
<h4>{$vo.title}</h4>
|
||||
<p>{$vo.description |default='暂无描述'}</p>
|
||||
{if $vo.rating_count > 0}<span class="website-rating">⭐ {$vo.rating} ({$vo.rating_count})</span>{/if}
|
||||
</span>
|
||||
</a>
|
||||
<span class="qr-btn js-qr" data-url="{$vo.url}" title="二维码">▦</span>
|
||||
</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{volist name="data" id="vo" key="k"}
|
||||
<!-- 分类区块 -->
|
||||
<div class="category-block" id="cat-{$k}">
|
||||
<div class="section-title">
|
||||
<h2>📋 <a href="/haonav/category/{$vo.id}.html" target="_blank"> {$vo.title} </a></h2>
|
||||
</div>
|
||||
<div class="website-grid">
|
||||
{volist name="vo.links" id="site"}
|
||||
<div class="website-card" data-sid="{$site.id}">
|
||||
<span class="fav-btn js-fav" data-id="{$site.id}" data-title="{$site.title}" data-url="{$site.url}" data-icon="{$site.show_icon}" title="收藏">★</span>
|
||||
<span class="qr-btn js-qr" data-url="{$site.url}" title="二维码">▦</span>
|
||||
<a href="/haonav/site/{$site.id}.html" target="_blank" title="{$site.title}" style="text-decoration:none;color:inherit;display:block;">
|
||||
<div class="website-icon"><img src="{$site.show_icon}" loading="lazy" alt="{$site.title}"></div>
|
||||
<div class="website-name">{$site.title}</div>
|
||||
{if $site.rating_count > 0}<div class="website-rating">⭐ {$site.rating}<span class="rc">({$site.rating_count})</span></div>{/if}
|
||||
</a>
|
||||
</div>
|
||||
{/volist}
|
||||
</div>
|
||||
<!-- 二级子分类 -->
|
||||
{volist name="vo.children" id="sub"}
|
||||
<div class="sub-category">
|
||||
<div class="sub-title"><span>{$sub.icon} {$sub.title}</span></div>
|
||||
<div class="website-grid">
|
||||
{volist name="sub.links" id="site"}
|
||||
<div class="website-card" data-sid="{$site.id}">
|
||||
<span class="fav-btn js-fav" data-id="{$site.id}" data-title="{$site.title}" data-url="{$site.url}" data-icon="{$site.show_icon}" title="收藏">★</span>
|
||||
<span class="qr-btn js-qr" data-url="{$site.url}" title="二维码">▦</span>
|
||||
<a href="/haonav/site/{$site.id}.html" target="_blank" title="{$site.title}" style="text-decoration:none;color:inherit;display:block;">
|
||||
<div class="website-icon"><img src="{$site.show_icon}" loading="lazy" alt="{$site.title}"></div>
|
||||
<div class="website-name">{$site.title}</div>
|
||||
{if $site.rating_count > 0}<div class="website-rating">⭐ {$site.rating}<span class="rc">({$site.rating_count})</span></div>{/if}
|
||||
</a>
|
||||
</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</div>
|
||||
{/volist}
|
||||
</div>
|
||||
{/volist}
|
||||
|
||||
<!-- 友情链接 / 推荐 -->
|
||||
<div class="hot-recommend">
|
||||
<div class="section-title"><h2>🤝 友情链接</h2></div>
|
||||
<div class="hot-grid">
|
||||
{volist name='links' id='vo'}
|
||||
<div class="hot-item">
|
||||
<a href="{$vo.url}" target="_blank" style="display:flex;align-items:center;gap:10px;text-decoration:none;color:inherit;flex:1;min-width:0;">
|
||||
<span class="hot-icon"><img src="{$vo.show_icon}" loading="lazy" alt="{$vo.title}"></span>
|
||||
<span class="hot-info">
|
||||
<h4>{$vo.title}</h4>
|
||||
<p>{$vo.description |default='暂无描述'}</p>
|
||||
{if $vo.rating_count > 0}<span class="website-rating">⭐ {$vo.rating} ({$vo.rating_count})</span>{/if}
|
||||
</span>
|
||||
</a>
|
||||
<span class="qr-btn js-qr" data-url="{$vo.url}" title="二维码">▦</span>
|
||||
</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</div>
|
||||
<!-- 广告位:首页底部 -->
|
||||
{notempty name="ads.home_bottom"}
|
||||
<div class="ad-box ad-home-bottom">
|
||||
<span class="ad-label">广告</span>
|
||||
{volist name="ads.home_bottom" id="ad"}
|
||||
{if $ad.type == 1}
|
||||
<a class="ad-item" href="/haonav/ad/click?id={$ad.id}" target="_blank" rel="nofollow">
|
||||
<img src="{$ad.image}" alt="{$ad.title}" loading="lazy">
|
||||
</a>
|
||||
{else/}
|
||||
{$ad.code|raw}
|
||||
{/if}
|
||||
{/volist}
|
||||
</div>
|
||||
{/notempty}
|
||||
</div>
|
||||
|
||||
<!-- 底部 -->
|
||||
<div class="footer">
|
||||
<p>© 2026 网址导航 - 让上网更简单 | <a href="/haonav/apply.html">申请收录</a> | <a href="/haonav/apply.html">广告合作</a> | <a href="#" rel="nofollow">关于我们</a></p>
|
||||
<p><a target="_blank" rel="nofollow" href="http://beian.miit.gov.cn/">{$siteConf.beian |default='蜀ICP备2022005627号-3'}</a></p>
|
||||
</div>
|
||||
|
||||
<!-- 二维码弹层 -->
|
||||
<div class="qr-mask" id="qrMask">
|
||||
<div class="qr-box">
|
||||
<img id="qrImg" src="" alt="二维码">
|
||||
<p id="qrText"></p>
|
||||
<span class="close">关闭</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 收藏夹分享弹层 -->
|
||||
<div class="qr-mask" id="favShareMask">
|
||||
<div class="qr-box" style="max-width:460px;text-align:left;">
|
||||
<h3 style="margin:0 0 14px;">🔗 分享我的收藏夹</h3>
|
||||
<label style="display:flex;align-items:center;gap:8px;font-size:14px;margin-bottom:12px;cursor:pointer;">
|
||||
<input type="checkbox" id="favShareToggle"> 开启分享(关闭后链接立即失效)
|
||||
</label>
|
||||
<input type="text" id="favShareTitle" placeholder="分享页标题,如:我的常用网址" maxlength="100"
|
||||
style="width:100%;padding:9px 12px;border:1px solid var(--nav-border,#ddd);border-radius:8px;font-size:14px;margin-bottom:12px;box-sizing:border-box;">
|
||||
<div id="favShareLinkBox" style="display:none;">
|
||||
<div style="display:flex;gap:8px;">
|
||||
<input type="text" id="favShareLink" readonly
|
||||
style="flex:1;padding:9px 12px;border:1px solid var(--nav-border,#ddd);border-radius:8px;font-size:13px;box-sizing:border-box;">
|
||||
<button class="nav-btn nav-btn-primary" id="favShareCopy">复制</button>
|
||||
</div>
|
||||
<p style="font-size:12px;color:var(--nav-muted);margin:8px 0 0;">被访问 <b id="favShareViews">0</b> 次 · <a href="#" id="favShareReset">重置链接</a>(旧链接失效)</p>
|
||||
</div>
|
||||
<p id="favShareMsg" style="font-size:13px;color:var(--nav-muted);margin:12px 0 0;"></p>
|
||||
<div style="text-align:right;margin-top:16px;"><span class="close" style="cursor:pointer;color:var(--nav-primary);">关闭</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 登录 / 注册 弹层由全局组件 auth.js 自动注入,无需在此书写 -->
|
||||
|
||||
<!-- 设为首页 / 收藏本站 提示弹层 -->
|
||||
<div class="qr-mask" id="homeTipMask">
|
||||
<div class="qr-box" style="max-width:440px;text-align:left;">
|
||||
<h3 style="margin:0 0 12px;">📌 把导航带在身边</h3>
|
||||
<p style="margin:0 0 8px;font-size:14px;"><b>收藏本站:</b>按 <kbd>Ctrl</kbd> + <kbd>D</kbd>(Mac:<kbd>⌘</kbd> + <kbd>D</kbd>)加入书签。</p>
|
||||
<p style="margin:0 0 8px;font-size:14px;"><b>设为浏览器首页:</b></p>
|
||||
<ol style="margin:0 0 8px;padding-left:20px;font-size:13px;line-height:1.8;color:var(--nav-muted,#666);">
|
||||
<li>Chrome / Edge:设置 → 启动时 → 打开特定网页,填入本站地址</li>
|
||||
<li>Firefox:设置 → 主页 → 自定义网址,填入本站地址</li>
|
||||
</ol>
|
||||
<p style="margin:0 0 4px;font-size:13px;color:var(--nav-muted,#666);">本站地址:<span id="homeTipUrl" style="user-select:all;"></span></p>
|
||||
<span class="close">关闭</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/static/haonav/js/nav.js"></script>
|
||||
<script src="/static/haonav/js/auth.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,77 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>热门排行榜 - 网址导航</title>
|
||||
<link rel="stylesheet" href="/static/haonav/css/nav.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="navbar">
|
||||
<div class="navbar-content">
|
||||
<a href="/haonav/index.html" class="logo">🚀 网址导航</a>
|
||||
<form class="search-box" id="searchForm">
|
||||
<select id="searchEngine">
|
||||
<option value="baidu" {$config.default_engine == 'baidu' ? 'selected' : ''}>百度</option>
|
||||
<option value="bing" {$config.default_engine == 'bing' ? 'selected' : ''}>必应</option>
|
||||
<option value="google" {$config.default_engine == 'google' ? 'selected' : ''}>Google</option>
|
||||
<option value="sogou" {$config.default_engine == 'sogou' ? 'selected' : ''}>搜狗</option>
|
||||
<option value="site" {$config.default_engine == 'site' ? 'selected' : ''}>站内</option>
|
||||
</select>
|
||||
<input type="text" id="searchInput" autocomplete="off" placeholder="搜索网站 / 关键词">
|
||||
<button type="submit">🔍 搜索</button>
|
||||
</form>
|
||||
<div class="nav-actions">
|
||||
<div class="nav-links">
|
||||
<a href="/haonav/index.html">首页</a>
|
||||
<a href="/haonav/rank.html" class="active">排行榜</a>
|
||||
<a href="/haonav/submit.html">投稿</a>
|
||||
</div>
|
||||
<button class="icon-btn" id="themeToggle" title="切换暗黑模式">🌙</button>
|
||||
<div class="user-area" id="userArea">
|
||||
<button class="nav-btn" id="btnLogin">登录</button>
|
||||
<button class="nav-btn nav-btn-primary" id="btnRegister">注册</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="main-content">
|
||||
<div class="section-title"><h2>🏆 热门排行榜(按点击量)</h2></div>
|
||||
<div class="rank-list" style="margin-top:14px;">
|
||||
{volist name='list' id='vo' key='k'}
|
||||
<a class="rank-item" href="/haonav/site/{$vo.id}.html" target="_blank">
|
||||
<span class="rank-no">{$k}</span>
|
||||
<span class="rank-icon"><img src="{$vo.show_icon}" loading="lazy" alt=""></span>
|
||||
<span class="rank-meta">
|
||||
<h4>{$vo.title} {if $vo.status_code > 0 && $vo.status_code >= 400}<span class="dead-badge">疑似失效</span>{/if}</h4>
|
||||
<p>{$vo.description|default='暂无描述'}</p>
|
||||
{if $vo.rating_count > 0}<span class="rank-rating">⭐ {$vo.rating} ({$vo.rating_count})</span>{/if}
|
||||
</span>
|
||||
<span class="rank-clicks">{$vo.click_count} 次</span>
|
||||
</a>
|
||||
{/volist}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p>© 2026 网址导航 - 让上网更简单</p>
|
||||
</div>
|
||||
|
||||
<div class="qr-mask" id="qrMask">
|
||||
<div class="qr-box">
|
||||
<img id="qrImg" src="" alt="二维码">
|
||||
<p id="qrText"></p>
|
||||
<span class="close">关闭</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 登录 / 注册 弹层由全局组件 auth.js 自动注入 -->
|
||||
|
||||
<script src="/static/haonav/js/nav.js"></script>
|
||||
<script src="/static/haonav/js/auth.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,64 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>站内搜索 - 网址导航</title>
|
||||
<link rel="stylesheet" href="/static/haonav/css/nav.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="navbar">
|
||||
<div class="navbar-content">
|
||||
<a href="/haonav/index.html" class="logo">🚀 网址导航</a>
|
||||
<form class="search-box" id="searchForm">
|
||||
<select id="searchEngine">
|
||||
<option value="site" selected>站内</option>
|
||||
<option value="baidu">百度</option>
|
||||
<option value="bing">必应</option>
|
||||
<option value="google">Google</option>
|
||||
<option value="sogou">搜狗</option>
|
||||
</select>
|
||||
<input type="text" id="searchInput" autocomplete="off" value="{$q}" placeholder="搜索网站 / 关键词">
|
||||
<button type="submit">🔍 搜索</button>
|
||||
</form>
|
||||
<div class="nav-actions">
|
||||
<div class="nav-links">
|
||||
<a href="/haonav/index.html">首页</a>
|
||||
<a href="/haonav/rank.html">排行榜</a>
|
||||
<a href="/haonav/submit.html">投稿</a>
|
||||
</div>
|
||||
<button class="icon-btn" id="themeToggle" title="切换暗黑模式">🌙</button>
|
||||
<div class="user-area" id="userArea">
|
||||
<button class="nav-btn" id="btnLogin">登录</button>
|
||||
<button class="nav-btn nav-btn-primary" id="btnRegister">注册</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="main-content">
|
||||
<div class="section-title"><h2>🔍 站内搜索 {if $q}:<span style="color:var(--nav-primary)">{$q}</span>{/if}</h2></div>
|
||||
<div class="rank-list" id="searchResults" style="margin-top:14px;"></div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p>© 2026 网址导航 - 让上网更简单</p>
|
||||
</div>
|
||||
|
||||
<div class="qr-mask" id="qrMask">
|
||||
<div class="qr-box">
|
||||
<img id="qrImg" src="" alt="二维码">
|
||||
<p id="qrText"></p>
|
||||
<span class="close">关闭</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 登录 / 注册 弹层由全局组件 auth.js 自动注入 -->
|
||||
|
||||
<script src="/static/haonav/js/nav.js"></script>
|
||||
<script src="/static/haonav/js/auth.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,84 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>网址投稿 - 网址导航</title>
|
||||
<link rel="stylesheet" href="/static/haonav/css/nav.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="navbar">
|
||||
<div class="navbar-content">
|
||||
<a href="/haonav/index.html" class="logo">🚀 网址导航</a>
|
||||
<form class="search-box" id="searchForm">
|
||||
<select id="searchEngine">
|
||||
<option value="baidu" {$config.default_engine == 'baidu' ? 'selected' : ''}>百度</option>
|
||||
<option value="bing" {$config.default_engine == 'bing' ? 'selected' : ''}>必应</option>
|
||||
<option value="google" {$config.default_engine == 'google' ? 'selected' : ''}>Google</option>
|
||||
<option value="sogou" {$config.default_engine == 'sogou' ? 'selected' : ''}>搜狗</option>
|
||||
<option value="site" {$config.default_engine == 'site' ? 'selected' : ''}>站内</option>
|
||||
</select>
|
||||
<input type="text" id="searchInput" autocomplete="off" placeholder="搜索网站 / 关键词">
|
||||
<button type="submit">🔍 搜索</button>
|
||||
</form>
|
||||
<div class="nav-actions">
|
||||
<div class="nav-links">
|
||||
<a href="/haonav/index.html">首页</a>
|
||||
<a href="/haonav/rank.html">排行榜</a>
|
||||
<a href="/haonav/submit.html" class="active">投稿</a>
|
||||
</div>
|
||||
<button class="icon-btn" id="themeToggle" title="切换暗黑模式">🌙</button>
|
||||
<div class="user-area" id="userArea">
|
||||
<button class="nav-btn" id="btnLogin">登录</button>
|
||||
<button class="nav-btn nav-btn-primary" id="btnRegister">注册</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="main-content">
|
||||
<div class="submit-box">
|
||||
<h2>📝 提交网址</h2>
|
||||
<form id="submitForm">
|
||||
<div class="form-row">
|
||||
<label>网站名称 *</label>
|
||||
<input type="text" name="title" required placeholder="例如:百度">
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label>网址 *</label>
|
||||
<input type="url" name="url" required placeholder="https://...">
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label>所属分类 *</label>
|
||||
<select name="cid" required>
|
||||
<option value="">请选择分类</option>
|
||||
{volist name='cates' id='c'}<option value="{$c.id}">{$c.title}</option>{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label>描述</label>
|
||||
<textarea name="description" placeholder="一句话介绍这个网站"></textarea>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label>关键词</label>
|
||||
<input type="text" name="keywords" placeholder="用逗号分隔,便于搜索">
|
||||
</div>
|
||||
<button type="submit" class="btn-primary">提交审核</button>
|
||||
<div class="form-msg" id="submitMsg"></div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p>© 2026 网址导航 - 让上网更简单</p>
|
||||
</div>
|
||||
|
||||
<!-- 登录 / 注册 弹层由全局组件 auth.js 自动注入 -->
|
||||
|
||||
<script src="/static/haonav/js/nav.js"></script>
|
||||
<script src="/static/haonav/js/auth.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Reference in New Issue
Block a user