chore: 重写初始提交(清空历史,整理后全量提交)

This commit is contained in:
ywxapp
2026-08-16 16:54:14 +08:00
commit 6c1a106bc1
1808 changed files with 238144 additions and 0 deletions
@@ -0,0 +1,48 @@
<!-- 右侧栏:热门文章 / 分类 / 标签云 / 最新评论(前台共用 fb-aside 风格) -->
<aside class="fb-aside">
<div class="fb-widget">
<h4>热门文章</h4>
<ul class="fb-hot">
{volist name="hotArticles" id="a"}
<li>
<span class="rank">{$i}</span>
<a href="{:url('blog/article/detail', ['id' => $a.id])}">{$a.title}</a>
</li>
{/volist}
</ul>
</div>
<div class="fb-widget">
<h4>文章分类</h4>
<ul class="fb-catlist">
{volist name="categories" id="c"}
<li><a href="{:url('blog/category/index', ['id' => $c.id])}">{$c.name}<span class="cnt">{$c.card_count|default=0}</span></a></li>
{/volist}
</ul>
</div>
<div class="fb-widget">
<h4>标签云</h4>
<div class="fb-tagcloud">
{volist name="tags" id="t"}
<a href="{:url('blog/tag/index', ['id' => $t.id])}">{$t.name}</a>
{/volist}
</div>
</div>
{notempty name="latestComments"}
{if !$latestComments->isEmpty()}
<div class="fb-widget">
<h4>最新评论</h4>
<ul class="fb-cmt">
{volist name="latestComments" id="cmt"}
<li>
<span class="who">{$cmt.user.nickname|default='匿名'}</span>
<span class="txt">{$cmt.content}</span>
</li>
{/volist}
</ul>
</div>
{/if}
{/notempty}
</aside>
+22
View File
@@ -0,0 +1,22 @@
{extend name="layout" /}
{assign name="nav_active" value="about"/}
{block name="title"}关于我们 - {$siteConf.site_name|default='博客'}{/block}
{block name="content"}
<div class="fb-layout">
<main class="fb-content">
<div class="fb-page">
<h3>关于我们</h3>
<img src="/static/blog/img/portrait.jpg" alt="" style="width:96px;height:96px;border-radius:50%;margin:0 0 16px;border:3px solid var(--theme);">
<p class="lead">TP-Blog 是一个基于 ThinkPHP 8 开发的现代化博客系统,致力于提供简洁、高效、安全的博客解决方案。</p>
<h3>技术栈</h3>
<div class="layui-progress layui-progress-big" lay-showpercent="true" style="margin-bottom:10px;"><em>PHP</em><div class="layui-progress-bar" lay-percent="80%"></div></div>
<div class="layui-progress layui-progress-big" lay-showpercent="true" style="margin-bottom:10px;"><em>MySQL</em><div class="layui-progress-bar layui-bg-blue" lay-percent="70%"></div></div>
<div class="layui-progress layui-progress-big" lay-showpercent="true"><em>Layui</em><div class="layui-progress-bar layui-bg-orange" lay-percent="90%"></div></div>
<h3 style="margin-top:18px;">联系我们</h3>
<p>邮箱:admin@example.com<br/>GitHubhttps://github.com/yourname/tp-blog</p>
</div>
</main>
{include file="index/_sidebar" /}
</div>
{/block}
@@ -0,0 +1,47 @@
{extend name="layout" /}
{block name="title"}联系我们 - {$siteConf.site_name|default='博客'}{/block}
{block name="content"}
<div class="fb-layout">
<main class="fb-content">
<div class="fb-page">
<h3>联系我们</h3>
<p>邮箱:admin@example.com</p>
<p>工作时间:周一至周五 9:00-18:00</p>
<form class="layui-form" onsubmit="return false;">
<div class="layui-form-item">
<label class="layui-form-label">姓名</label>
<div class="layui-input-block"><input type="text" name="name" required lay-verify="required" placeholder="请输入您的姓名" class="layui-input"></div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">邮箱</label>
<div class="layui-input-block"><input type="text" name="email" required lay-verify="required|email" placeholder="请输入您的邮箱" class="layui-input"></div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">留言</label>
<div class="layui-input-block"><textarea name="message" required lay-verify="required" placeholder="请输入您的留言" class="layui-textarea"></textarea></div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="fb-btn" lay-submit lay-filter="contactSubmit">提交留言</button>
<button type="reset" class="fb-btn ghost">重置</button>
</div>
</div>
</form>
</div>
</main>
{include file="index/_sidebar" /}
</div>
{/block}
{block name="script"}
<script>
layui.use(['form', 'layer'], function(){
var form = layui.form, layer = layui.layer;
form.on('submit(contactSubmit)', function(){
layer.msg('感谢您的留言,我们会尽快与您联系!');
return false;
});
});
</script>
{/block}
+124
View File
@@ -0,0 +1,124 @@
{extend name="layout" /}
{block name="title"}{$siteConf.site_name|default='博客'} - 首页{/block}
{block name="content"}
<!-- Hero 推荐 -->
{notempty name="recommendedArticles"}
{if !$recommendedArticles->isEmpty()}
<div class="fb-hero">
<div class="fb-hero-grid">
{volist name="recommendedArticles" id="rec" offset="0" length="1"}
<a class="fb-hero-main" href="{:url('blog/article/detail', ['id' => $rec.id])}">
<img src="{$rec.cover_image|default='/static/blog/img/pic.jpg'}" alt="{$rec.title}">
<div class="fb-hero-cap">
<span class="tag">{$rec.category.name|default='推荐'}</span>
<h2>{$rec.title}</h2>
</div>
</a>
{/volist}
<div class="fb-hero-sub">
{volist name="recommendedArticles" id="rec" offset="1" length="2"}
<a class="fb-hero-sub-item" href="{:url('blog/article/detail', ['id' => $rec.id])}">
<img src="{$rec.cover_image|default='/static/blog/img/code.jpg'}" alt="{$rec.title}">
<div class="fb-hero-cap">
<h3>{$rec.title}</h3>
</div>
</a>
{/volist}
</div>
</div>
</div>
{/if}
{/notempty}
<div class="fb-layout">
<!-- 左:文章流 -->
<main class="fb-content">
<div class="fb-section-title"><h2>最新文章</h2></div>
{if $articles->isEmpty()}
<div class="fb-empty"><p>站点还没有发布文章,敬请期待。</p></div>
{else}
<div class="fb-post-list">
{volist name="articles" id="article"}
<article class="fb-post">
<a class="thumb" href="{:url('blog/article/detail', ['id' => $article.id])}">
<img src="{$article.cover_image|default='/static/blog/img/book.jpg'}" alt="{$article.title}">
</a>
<div class="body">
<span class="cat">{$article.category.name|default='默认'}</span>
<h3><a href="{:url('blog/article/detail', ['id' => $article.id])}">{$article.title}</a></h3>
<p class="summary">{$article.summary|default='(暂无描述)'}</p>
<div class="meta">
<a class="author" href="{:url('blog/article/author', ['id' => $article.uid])}">
<img src="{$article.user.avatar|default='/static/blog/img/avatar.jpg'}" alt="">
{$article.user.nickname|default='佚名'}
</a>
<span><i class="layui-icon layui-icon-read"></i> {$article.view_count|default=0}</span>
<span><i class="layui-icon layui-icon-praise"></i> {$article.like_count|default=0}</span>
<span class="sp">{$article.create_text}</span>
</div>
</div>
</article>
{/volist}
</div>
{/if}
</main>
<!-- 右:侧栏 -->
<aside class="fb-aside">
<div class="fb-widget">
<div class="fb-stat">
<div><div class="num">{$total_articles|default=0}</div><div class="lbl">文章</div></div>
<div><div class="num">{$total_categories|default=0}</div><div class="lbl">分类</div></div>
<div><div class="num">{$total_views|default=0}</div><div class="lbl">阅读</div></div>
</div>
</div>
<div class="fb-widget">
<h4>热门文章</h4>
<ul class="fb-hot">
{volist name="hotArticles" id="a"}
<li>
<span class="rank">{$i}</span>
<a href="{:url('blog/article/detail', ['id' => $a.id])}">{$a.title}</a>
</li>
{/volist}
</ul>
</div>
<div class="fb-widget">
<h4>文章分类</h4>
<ul class="fb-catlist">
{volist name="categories" id="c"}
<li><a href="{:url('blog/category', ['id' => $c.id])}">{$c.name}<span class="cnt">{$c.card_count|default=0}</span></a></li>
{/volist}
</ul>
</div>
<div class="fb-widget">
<h4>标签云</h4>
<div class="fb-tagcloud">
{volist name="tags" id="t"}
<a href="{:url('blog/tag', ['id' => $t.id])}">{$t.name}</a>
{/volist}
</div>
</div>
{notempty name="latestComments"}
{if !$latestComments->isEmpty()}
<div class="fb-widget">
<h4>最新评论</h4>
<ul class="fb-cmt">
{volist name="latestComments" id="cmt"}
<li>
<span class="who">{$cmt.user.nickname|default='匿名'}</span>
<span class="txt">{$cmt.content}</span>
</li>
{/volist}
</ul>
</div>
{/if}
{/notempty}
</aside>
</div>
{/block}
@@ -0,0 +1,35 @@
{extend name="layout" /}
{block name="title"}附近文章{/block}
{block name="content"}
<div class="main article">
<div class="layui-tab layui-tab-brief">
<ul class="layui-tab-title"><li class="layui-this">附近文章(半径 {$radius} km</li></ul>
</div>
<div id="geo-tip" class="item"><div class="item-content"><h3>正在获取您的位置…</h3></div></div>
{if empty($list)}
<div class="item"><div class="item-content"><h3>附近暂无文章</h3><p>可在 URL 手动传 ?lat=&lng= 查看</p></div></div>
{else}
{volist name="list" id="item"}
<div class="item">
<div class="item-content">
<h3><a href="{$item.url}">{$item.title}</a></h3>
<p class="meta"><span>{$item.category}</span>{if $item.distance}<span>约 {$item.distance} km</span>{/if}</p>
</div>
</div>
{/volist}
{/if}
</div>
<script>
(function(){
var tip = document.getElementById('geo-tip');
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(p){
if (tip) tip.style.display='none';
window.location.href = '/blog/nearby?lat='+p.coords.latitude+'&lng='+p.coords.longitude+'&radius=10';
}, function(){ if (tip) tip.querySelector('h3').textContent='获取位置失败,可在 URL 手动传 ?lat=&lng='; });
} else if (tip) {
tip.querySelector('h3').textContent='浏览器不支持定位,请在 URL 手动传 ?lat=&lng=';
}
})();
</script>
{/block}
@@ -0,0 +1,33 @@
{extend name="layout" /}
{block name="title"}搜索:{$keyword} - 静谧博客{/block}
{block name="content"}
<div class="main article">
<div class="layui-tab layui-tab-brief">
<ul class="layui-tab-title"><li class="layui-this">搜索:{$keyword}</li></ul>
</div>
{if $articles->isEmpty()}
<div class="item"><div class="item-content"><h3>没有找到相关文章</h3><p>尝试更换关键词搜索</p></div></div>
{else}
{volist name="articles" id="article"}
<div class="item">
{if $article.cover_image}<img src="{$article.cover_image}" alt="{$article.title}">{/if}
<div class="item-content">
<h3><a href="{:url('blog/article/detail', ['id' => $article.id])}">{$article.title}</a></h3>
<span class="Subtitle">{$article.category.name|default='默认'}</span><br/>
<p>{$article.summary}</p>
<a href="{:url('blog/article/detail', ['id' => $article.id])}"><button class="layui-btn">阅读全文</button></a>
</div>
<div class="date-box">
<div class="date">
<h4>{:date('d', strtotime($article.create_text))}</h4>
<span>{:date('Y/m', strtotime($article.create_text))}</span>
</div>
</div>
</div>
{/volist}
<div id="demo1">{$articles|raw}</div>
{/if}
</div>
{include file="index/_sidebar" /}
{/block}