3.2.16: 删三项无用功能、选项重排为 10 组、修移动端提示条偏左
删除 - 微信二维码:配置项 s_wechat / 隐藏上传 s_wechat_url、footer 浮动块、 默认图注册表条目、CSS 规则、wechat.png - Font Awesome:选项 g_fontawesome、theme-core 入队、58KB 样式、 assets/fonts/webfonts 全套字体(2.8MB,CSS 删后零引用) - 多人模式:选项 multiusers、page-content / page-toolbar 两处分支 选项重排(9 组 → 10 组) 全站配置 / 顶部导航 / 首页配置 / 文章配置 / 站长信息 / 页脚配置 / 哀悼模式 / 收录与统计 / 邮件通知 / 自定义代码 哀悼 5 个字段从「首页配置」独立成「哀悼模式」——它不是首页专属功能。 g_404/g_chrome/g_animate/g_gravatar 等归「全站配置」,s_copyright 归「页脚配置」。 修复 - footer.php 版权行此前无条件硬编码,后台 s_copyright 填了不生效 - 附加日期命中时 yang_mourning_today_name() 返回空串,提示条退化成 只说「今天是纪念日」而不给名字 - 小屏哀悼提示条 padding 写成 `7px 40px 7px 12px`(右宽左窄给关闭按钮 让位),内容盒中心 181 vs 视口中心 195,整体偏左 14px。关闭按钮本就 absolute 不占内部流,改为左右等宽 + 缩小按钮。桌面端同类错误 3.2.14 已修, 此处漏了同一个断点。 加载顺序 theme-options.php 可能早于 theme-mourning.php / theme-custom-code.php 加载, 新增 yang_opt_* 四个 function_exists 包装,避免裸调用导致后台白屏。 验证:静态断言 62/0 · 后台面板 14/0 · 反向验证 7/7 与 44/0 · 提示条 4 视口几何 20/0(注入旧 bug 精确复现 -14px)· 线上 3 视口 33/0
This commit is contained in:
+92
-22
@@ -180,28 +180,64 @@ function yang_is_mourning_today()
|
||||
$days = yang_mourning_days();
|
||||
|
||||
// 自定义附加日期(用户自己填的,如特定年份的哀悼日)
|
||||
if (kratos_option('g_rip_extra', '')) {
|
||||
$extra = kratos_option('g_rip_extra', '');
|
||||
foreach (preg_split('/[\s,,、;;]+/u', (string) $extra) as $one) {
|
||||
$one = trim($one);
|
||||
if ($one === '') {
|
||||
continue;
|
||||
}
|
||||
// 支持 MM-DD 与 YYYY-MM-DD 两种写法
|
||||
if (preg_match('/^\d{2}-\d{2}$/', $one)) {
|
||||
$days[] = $one;
|
||||
} elseif (preg_match('/^(\d{4})-(\d{2})-(\d{2})$/', $one, $m)) {
|
||||
// 带年份的只在当年生效,不是周年循环
|
||||
if ((int) $m[1] === (int) current_time('Y')) {
|
||||
$days[] = $m[2] . '-' . $m[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach (yang_mourning_extra_days() as $one) {
|
||||
$days[] = $one;
|
||||
}
|
||||
|
||||
return in_array($md, $days, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 把「附加日期」输入框里的自由文本解析成月日列表
|
||||
*
|
||||
* 支持两种写法,语义不同,不能混为一谈:
|
||||
* · `MM-DD` —— 每年循环(05-12 每年都会触发)
|
||||
* · `YYYY-MM-DD` —— 只在指定那年触发(2020-04-04 是一次性事件,
|
||||
* 明年 4 月 4 日不该再自动变黑白)
|
||||
*
|
||||
* 分隔符容错:空格、回车、英文逗号、中文逗号、顿号、分号都认,
|
||||
* 因为用户复制粘贴来源五花八门,要求他只准用半角空格不现实。
|
||||
*
|
||||
* 非法格式**静默跳过**而不是报错:这是个自由文本框,中途保存到
|
||||
* 一半(比如只打了 `10-`)不应该让整个后台保存失败。
|
||||
*/
|
||||
function yang_mourning_extra_days()
|
||||
{
|
||||
$raw = kratos_option('g_rip_extra', '');
|
||||
if (!is_string($raw) || trim($raw) === '') {
|
||||
return array();
|
||||
}
|
||||
|
||||
$out = array();
|
||||
foreach (preg_split('/[\s,,、;;]+/u', $raw) as $one) {
|
||||
$one = trim($one);
|
||||
if ($one === '') {
|
||||
continue;
|
||||
}
|
||||
if (preg_match('/^(\d{1,2})-(\d{1,2})$/', $one, $m)) {
|
||||
// MM-DD:补零后与 current_time('m')-current_time('d') 可比
|
||||
$out[] = sprintf('%02d-%02d', (int) $m[1], (int) $m[2]);
|
||||
} elseif (preg_match('/^(\d{4})-(\d{1,2})-(\d{1,2})$/', $one, $m)) {
|
||||
if ((int) $m[1] === (int) current_time('Y')) {
|
||||
$out[] = sprintf('%02d-%02d', (int) $m[2], (int) $m[3]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* 附加日期的原始文本(后台选项说明里回显"当前填的是什么"用)
|
||||
*
|
||||
* 单独抽出来是因为后台 desc 里要展示它,而 desc 在
|
||||
* kratos_options() 里拼装 —— 那里不该重复一遍取值逻辑。
|
||||
*/
|
||||
function yang_mourning_extra_raw()
|
||||
{
|
||||
$raw = kratos_option('g_rip_extra', '');
|
||||
return is_string($raw) ? trim($raw) : '';
|
||||
}
|
||||
|
||||
/**
|
||||
* 输出黑白样式
|
||||
*
|
||||
@@ -240,18 +276,26 @@ function yang_mourning_status_text()
|
||||
return __('当前为手动常开模式:站点一直黑白,与日期无关。', 'kratos');
|
||||
}
|
||||
if (!kratos_option('g_rip_auto', false)) {
|
||||
return __('自动哀悼未开启。', 'kratos');
|
||||
return __('自动哀悼未开启。(上面的「手动常开」也没勾,所以现在整站是彩色的。)', 'kratos');
|
||||
}
|
||||
|
||||
$days = yang_mourning_days();
|
||||
$extra = yang_mourning_extra_days();
|
||||
foreach ($extra as $one) {
|
||||
if (!in_array($one, $days, true)) {
|
||||
$days[] = $one;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($days)) {
|
||||
return __('自动哀悼已开启,但一个日期都没勾选,因此不会生效。', 'kratos');
|
||||
return __('自动哀悼已开启,但一个日期都没有 —— 清单没勾、附加日期也没填,因此不会生效。', 'kratos');
|
||||
}
|
||||
sort($days);
|
||||
$today = current_time('m') . '-' . current_time('d');
|
||||
$is = in_array($today, $days, true);
|
||||
return sprintf(
|
||||
/* translators: 1: 今天的月日, 2: 是否处于哀悼, 3: 勾选的日期列表 */
|
||||
__('今天是 %1$s,%2$s。已启用:%3$s', 'kratos'),
|
||||
/* translators: 1: 今天的月日, 2: 是否处于哀悼, 3: 生效的日期列表 */
|
||||
__('今天是 %1$s,%2$s。当前会变黑白的日期:%3$s', 'kratos'),
|
||||
$today,
|
||||
$is ? __('正在哀悼,站点已黑白', 'kratos') : __('不在哀悼日', 'kratos'),
|
||||
implode('、', $days)
|
||||
@@ -341,9 +385,17 @@ function yang_mourning_notice_bar()
|
||||
不同步下移的话,它会和提示条叠在一起、把站点标题遮住(实测重叠 31px)。
|
||||
这里只用一条 top 偏移把它挪到提示条下方;没有提示条时 --ymb-h 为 0。 */
|
||||
body.has-yang-mourning-bar .k-nav{top:var(--ymb-h,0px)}
|
||||
/* 小屏:左右 padding 必须等宽。
|
||||
曾写成 `7px 40px 7px 12px`(右宽左窄,给关闭按钮让位),
|
||||
结果内容盒中心 = 181,而视口中心 = 195,文字整体偏左 14px —— 桌面端同样
|
||||
的错在 3.2.14 修过,这里漏了同一个断点。
|
||||
关闭按钮本来就是 absolute、不占内部流,所以它的空间由"缩小自身"解决,
|
||||
不能靠单边 padding 去让:right:6px + 更小字号/内边距后宽度约 20px,
|
||||
落在右侧 40px 的 padding 区内,与文字不重叠。 */
|
||||
@media (max-width:560px){
|
||||
.yang-mourning-bar{font-size:12.5px;padding:7px 40px 7px 12px;letter-spacing:0}
|
||||
.yang-mourning-bar{font-size:12.5px;padding:7px 40px;letter-spacing:0}
|
||||
.yang-mourning-bar .ymb-inner{gap:6px}
|
||||
.yang-mourning-bar .ymb-close{right:6px;font-size:17px;padding:2px 5px}
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
@@ -429,13 +481,31 @@ function yang_mourning_page_is_current()
|
||||
* 今天哀悼的纪念日名称(用于提示条文案)
|
||||
*
|
||||
* 取第一个命中的,取不到返回空串。
|
||||
*
|
||||
* ── 为什么附加日期也要给个名字 ──────────────────────────────
|
||||
* 清单里的日期都有正式名称,附加日期是用户自己填的、系统不知道叫什么。
|
||||
* 早先这里只查 presets,于是用附加日期触发的哀悼,提示条会退化成
|
||||
* 「今天是纪念日,本站以黑白致哀」—— 名字丢了,而这条提示的全部意义
|
||||
* 就是告诉访客"今天是哪个纪念日"。所以附加日期命中时,明确说明
|
||||
* 这是自定义的纪念日,让文案仍然完整、不露出系统的无知。
|
||||
*/
|
||||
function yang_mourning_today_name()
|
||||
{
|
||||
if (!yang_is_mourning_today()) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$md = current_time('m') . '-' . current_time('d');
|
||||
$presets = yang_mourning_presets();
|
||||
|
||||
if (isset($presets[$md]) && in_array($md, yang_mourning_days(), true)) {
|
||||
return $presets[$md]['name'];
|
||||
}
|
||||
|
||||
// 命中的是「附加日期」里用户自己填的那一天
|
||||
if (in_array($md, yang_mourning_extra_days(), true)) {
|
||||
return __('纪念日', 'kratos');
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user