chore: 重写初始提交(清空历史,整理后全量提交)
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
/* MyBlog 皮肤(Discuz 式局部覆盖演示)
|
||||
激活方式:config/template.php 的 active_map 设 'blog' => 'myblog'
|
||||
静态资源发布到:public/static/templates/myblog/theme.css */
|
||||
.myblog-skin { --theme: #e0533d; }
|
||||
.myblog-skin .fb-nav {
|
||||
background: linear-gradient(90deg, #e0533d, #f0835a);
|
||||
box-shadow: 0 2px 10px rgba(224, 83, 61, .25);
|
||||
}
|
||||
.myblog-skin .fb-nav .logo,
|
||||
.myblog-skin .fb-nav .menu a { color: #fff; }
|
||||
.myblog-skin .fb-nav .menu a.active { border-bottom: 2px solid #fff; }
|
||||
.myblog-skin .fb-main a { color: var(--theme); }
|
||||
.myblog-skin .fb-footer { color: #e0533d; }
|
||||
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"name": "myblog",
|
||||
"title": "MyBlog 演示皮肤",
|
||||
"author": "ywxapp",
|
||||
"version": "1.0.0",
|
||||
"type": "template",
|
||||
"description": "blog 插件演示皮肤:局部覆盖 + 自定义主题色(Discuz 式)",
|
||||
"target_addon": [
|
||||
"blog"
|
||||
],
|
||||
"target_areas": [
|
||||
"frontend"
|
||||
],
|
||||
"preview": "preview.png",
|
||||
"require_framework": "1.0.0",
|
||||
"variables": {
|
||||
"primary": {
|
||||
"label": "主题主色",
|
||||
"default": "#2d8cf0",
|
||||
"type": "color"
|
||||
},
|
||||
"secondary": {
|
||||
"label": "辅助色",
|
||||
"default": "#ff7a45",
|
||||
"type": "color"
|
||||
},
|
||||
"body_bg": {
|
||||
"label": "页面背景",
|
||||
"default": "#f5f7fa",
|
||||
"type": "color"
|
||||
},
|
||||
"font_family": {
|
||||
"label": "正文字体",
|
||||
"default": "-apple-system, 'Microsoft YaHei', sans-serif",
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,179 @@
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{block name="title"}{$siteConf.site_name|default='博客'}{/block}</title>
|
||||
<meta name="description" content="{$siteConf.site_description|default=''}" />
|
||||
<link rel="stylesheet" href="/assets/layui/css/layui.css">
|
||||
<link rel="stylesheet" href="/static/blog/css/theme.css">
|
||||
<link rel="stylesheet" href="/static/templates/myblog/theme.css">
|
||||
<style>
|
||||
/* 主题色由后台「基本设置」配置,注入 CSS 变量驱动整站配色;皮肤可覆盖默认值 */
|
||||
:root { --theme: {$theme_color|default='#e0533d'}; }
|
||||
</style>
|
||||
{block name="style"}{/block}
|
||||
</head>
|
||||
<body class="has-tab myblog-skin">
|
||||
|
||||
<!-- 顶部导航 -->
|
||||
<div class="fb-nav">
|
||||
<div class="inner">
|
||||
<a href="{:url('blog/index/index')}" class="logo">{$siteConf.site_name|default='博客'}</a>
|
||||
<nav class="menu">
|
||||
<a href="{:url('blog/index/index')}" {if $nav_active=='index'}class="active"{/if}>首页</a>
|
||||
<a href="{:url('category/index')}" {if $nav_active=='category'}class="active"{/if}>分类</a>
|
||||
<a href="{:url('blog/tag/index')}" {if $nav_active=='tag'}class="active"{/if}>标签</a>
|
||||
<a href="{:url('blog/index/about')}" {if $nav_active=='about'}class="active"{/if}>关于</a>
|
||||
</nav>
|
||||
<form class="search" action="{:url('blog/search/index')}" method="get">
|
||||
<input type="text" name="keyword" placeholder="搜索文章..." autocomplete="off">
|
||||
<button type="submit"><i class="layui-icon layui-icon-search"></i></button>
|
||||
</form>
|
||||
<div class="user">
|
||||
{if $is_login}
|
||||
<a href="{:url('blog/article/author', ['id' => $current_uid])}">我的博客</a>
|
||||
<a href="{:url('/user/index/index')}">中心</a>
|
||||
{else}
|
||||
<a href="{:url('auth/login')}">登录</a>
|
||||
{/if}
|
||||
</div>
|
||||
<button class="hamburger" id="fbMenuBtn"><i class="layui-icon layui-icon-more-vertical"></i></button>
|
||||
</div>
|
||||
<div class="drawer" id="fbDrawer">
|
||||
<a href="{:url('index/index')}">首页</a>
|
||||
<a href="{:url('category')}">分类</a>
|
||||
<a href="{:url('/tag')}">标签</a>
|
||||
<a href="{:url('/index/about')}">关于</a>
|
||||
<div class="user">
|
||||
{if $is_login}
|
||||
<a href="{:url('/article/author', ['id' => $current_uid])}">我的博客</a>
|
||||
<a href="{:url('user/index')}">个人中心</a>
|
||||
{else}
|
||||
<a href="{:url('auth/login')}">登录</a>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 主体内容 -->
|
||||
<div class="fb-main">
|
||||
<div class="fb-wrap">
|
||||
{block name="body"}{/block}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 移动端底部 Tab 导航 -->
|
||||
<div class="fb-tabbar">
|
||||
<a href="{:url('/blog/index/index')}" {if $nav_active=='index'}class="active"{/if}><i class="layui-icon layui-icon-home"></i>首页</a>
|
||||
{if $is_login}
|
||||
<a href="{:url('/blog/article/author', ['id' => $current_uid])}"><i class="layui-icon layui-icon-username"></i>我的</a>
|
||||
{else}
|
||||
<a href="{:url('auth/login')}"><i class="layui-icon layui-icon-username"></i>我的</a>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<!-- 页脚 -->
|
||||
<footer class="fb-footer">
|
||||
<p>© {:date('Y')} {$siteConf.site_name|default='博客'}. All Rights Reserved.</p>
|
||||
</footer>
|
||||
|
||||
<script src="/assets/layui/layui.js"></script>
|
||||
<script>
|
||||
layui.use(['element', 'layer', 'form'], function(){
|
||||
var element = layui.element, layer = layui.layer, form = layui.form;
|
||||
window.layer = layer; window.layui = layui;
|
||||
var drawer = document.getElementById('fbDrawer');
|
||||
document.getElementById('fbMenuBtn').addEventListener('click', function(e){
|
||||
e.stopPropagation();
|
||||
drawer.classList.toggle('open');
|
||||
});
|
||||
document.addEventListener('click', function(e){
|
||||
if (!drawer.contains(e.target) && e.target.id !== 'fbMenuBtn' && !document.getElementById('fbMenuBtn').contains(e.target)) {
|
||||
drawer.classList.remove('open');
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- 全局登录弹窗(前台通用) -->
|
||||
<div id="globalLoginBox" style="display:none; padding: 20px 24px;">
|
||||
<form class="layui-form" id="globalLoginForm" lay-filter="globalLoginForm">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">用户名</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="username" lay-verify="required" placeholder="请输入用户名" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">密码</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="password" name="password" lay-verify="required" placeholder="请输入密码" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">验证码</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-row layui-col-space10">
|
||||
<div class="layui-col-xs7">
|
||||
<input type="text" name="captcha" lay-verify="required" placeholder="图形验证码" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-col-xs5">
|
||||
<img id="globalLoginCaptcha" src="{:url('user/ajax/verify')}" alt="点击刷新验证码" title="点击刷新验证码" style="height:38px;cursor:pointer;border-radius:2px;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit lay-filter="globalLoginSubmit">登 录</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重 置</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
layui.use(['layer', 'form', 'jquery'], function(){
|
||||
var layer = layui.layer, form = layui.form, $ = layui.$;
|
||||
var globalLoginIndex = null;
|
||||
function refreshGlobalCaptcha(){
|
||||
$('#globalLoginCaptcha').attr('src', '{:url(\'member/ajax/verify\')}?t=' + Date.now());
|
||||
}
|
||||
$('#globalLoginCaptcha').on('click', refreshGlobalCaptcha);
|
||||
window.openLogin = function(cb){
|
||||
globalLoginIndex = layer.open({
|
||||
type: 1, title: '用户登录', area: ['480px', 'auto'],
|
||||
content: $('#globalLoginBox'),
|
||||
success: function(){
|
||||
refreshGlobalCaptcha();
|
||||
$('#globalLoginForm')[0].reset();
|
||||
if (typeof cb === 'function') { window.__loginCb = cb; }
|
||||
}
|
||||
});
|
||||
};
|
||||
form.on('submit(globalLoginSubmit)', function(data){
|
||||
$.post('{:url(\'member/login/save\')}', data.field, function(res){
|
||||
if (res.code === 0) {
|
||||
layer.msg(res.message || '登录成功', {icon: 1});
|
||||
setTimeout(function(){
|
||||
if (globalLoginIndex) { layer.close(globalLoginIndex); }
|
||||
if (typeof window.__loginCb === 'function') {
|
||||
var cb = window.__loginCb; window.__loginCb = null; cb();
|
||||
} else { location.reload(); }
|
||||
}, 600);
|
||||
} else {
|
||||
layer.msg(res.message || '登录失败', {icon: 2});
|
||||
refreshGlobalCaptcha();
|
||||
}
|
||||
}, 'json');
|
||||
return false;
|
||||
});
|
||||
$(document).on('click', 'a[href*="auth/login"], a[href*="member/login"]', function(e){
|
||||
if ($(this).attr('target') === '_blank') { return; }
|
||||
e.preventDefault();
|
||||
window.openLogin();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user