后台把「正文目录」和「浮动目录」分成两块(#1)

浮动目录本来就没有手动/自动之分:它不读正文,没有地方写 [TOC],
要么显示要么不显示。代码层面早已如此(rail 只由 float 决定),
真正的问题是后台十项排成一列,「添加方式」「自动插入位置」跟在
浮动选项后面,看着像两种目录共用的设置。

- 新增三个 info 类型分组小标题:正文里的目录 / 浮动目录 /
  两份目录共用的设置。用 info 而不是 heading —— heading 会另起
  标签页,info 只渲染成一行 h4 + 说明,不进标签页菜单、不生成表单字段。
- 选项按归属重新分段:正文段(toc_inline / inline_align / mode /
  anchor)、浮动段(toc_float / float_side)、共用段(default /
  title / levels / numbering)。顺序变了,但选项 id 与存库键不变。
- 「添加方式」说明收窄为只管正文那一份;「浮动显示」说明补上
  「它没有手动/自动之分」;「自动插入位置」清掉过时的
  「目录位置 = 正文中间」字样。
- 顺带修掉「自动插入位置」控件被定义两遍(后台会渲染两个同名下拉)。

验证:guard330 63/0、其 falsify 15/15(新增 V37~V41 守三段归属)、
admin330_tab_check 88/0(新增分组几何判据)、其 falsify 16/16、
toc 逻辑 101/0 与 53/0、rail 几何 73/0、inline 几何 23/0、
包校验 69/0、其 falsify 13/13。
前台零变化:本次只动后台分组与文案,未改任何渲染逻辑。
This commit is contained in:
2026-10-25 14:36:19 +08:00
parent 4a2d62b1aa
commit 71f8a733f5
2 changed files with 45 additions and 12 deletions
+44 -11
View File
@@ -396,6 +396,25 @@ function kratos_options()
'type' => 'heading',
);
/* ── 分组标题:正文里的那一份 ──────────────────────────────
*
* 用 info 类型而不是 heading:heading 会另起一个标签页
* (framework 里 `case "heading"` 会 $counter++ 并新建
* #options-group-N),info 只渲染成一行 <h4> + 说明文字,
* 既不进标签页菜单,也不生成表单字段(见
* class-options-interface.php 的 :24 / :59 / :91)。
*
* 加这两条小标题的原因:浮动目录和正文目录是两件互不相干的事,
* 但原来的选项排成一长列,「添加方式」「自动插入位置」跟在
* 「浮动显示」后面,看着像是两种目录共用的设置,容易让人以为
* 浮动目录也分手动/自动。 */
$options[] = array(
'name' => __('正文里的目录', 'kratos'),
'desc' => __('下面这几项只影响<b>正文流里</b>那一份目录 —— 它跟着文章一起排版,会占正文位置。', 'kratos'),
'id' => 'toc_group_inline',
'type' => 'info',
);
$options[] = array(
'name' => __('在正文中显示', 'kratos'),
'desc' => __('勾选后,在文章正文里插一份目录。<br>它和下面的「浮动显示」<b>互不影响</b>:两个都勾就同时出现两份(正文一份、边上浮一份),只勾一个就只出现一种。', 'kratos'),
@@ -416,9 +435,21 @@ function kratos_options()
),
);
$options[] = array(
'name' => __('添加方式', 'kratos'),
'desc' => __('<b>手动</b>:不自动加,只有正文里手写了 <b>[TOC]</b> 的地方才显示(老文章的行为,升级后不会突然多出目录)。<br><b>自动</b>:由主题自己在「自动插入位置」处加一份,不用改任何文章。<br>本项<b>只管正文里的那一份</b>;浮动目录不受它影响(浮动目录没有地方写 <b>[TOC]</b>,勾了就一直在)。', 'kratos'),
'id' => 'toc_mode',
'std' => 'manual',
'type' => 'select',
'options' => array(
'manual' => __('手动(只在写 [TOC] 的地方显示)', 'kratos'),
'auto' => __('自动添加', 'kratos'),
),
);
$options[] = array(
'name' => __('自动插入位置', 'kratos'),
'desc' => __('只在「添加方式 = 自动」且勾选了「在正文中显示」时起作用。<br><b>第一个标题之前</b>取正文里最先出现的 h1 或 h2 —— 文章大标题在正文之外,不会被算进去;一个 h1/h2 都没有时退回插在文章开头。', 'kratos'),
'desc' => __('只在「添加方式 = 自动」且勾选了「在正文中显示」时起作用;手动方式下插入点由你自己写的 <b>[TOC]</b> 决定。<br><b>第一个标题之前</b>取正文里最先出现的 h1 或 h2 —— 文章大标题在正文之外,不会被算进去;一个 h1/h2 都没有时退回插在文章开头。', 'kratos'),
'id' => 'toc_anchor',
'std' => 'first',
'type' => 'select',
@@ -429,9 +460,16 @@ function kratos_options()
),
);
$options[] = array(
'name' => __('浮动目录', 'kratos'),
'desc' => __('下面两项只影响<b>浮在页面边上</b>那一份 —— 它不占正文位置,和正文里的目录互不相干。', 'kratos'),
'id' => 'toc_group_float',
'type' => 'info',
);
$options[] = array(
'name' => __('浮动显示', 'kratos'),
'desc' => __('勾选后,目录变成贴在页面边缘的浮动面板,点边上的小标签滑出,<b>不占正文位置</b>。窄屏(手机)上是从边缘滑出的抽屉,不会挤占正文。<br>与「在正文中显示」互相独立,可以同时勾选。', 'kratos'),
'desc' => __('勾选后,目录变成贴在页面边缘的浮动面板,点边上的小标签滑出,<b>不占正文位置</b>。窄屏(手机)上是从边缘滑出的抽屉,不会挤占正文。<br>与「在正文中显示」互相独立,可以同时勾选。<b>它没有手动/自动之分</b>:勾了就一直在,不勾就不出现。', 'kratos'),
'id' => 'toc_float',
'std' => '',
'type' => 'checkbox',
@@ -450,15 +488,10 @@ function kratos_options()
);
$options[] = array(
'name' => __('添加方式', 'kratos'),
'desc' => __('<b>手动</b>:不自动加,只有正文里手写了 <b>[TOC]</b> 的地方才显示(老文章的行为,升级后不会突然多出目录)。<br><b>自动</b>:由主题自己加,不用改任何文章。', 'kratos'),
'id' => 'toc_mode',
'std' => 'manual',
'type' => 'select',
'options' => array(
'manual' => __('手动(只在写 [TOC] 的地方显示)', 'kratos'),
'auto' => __('自动添加', 'kratos'),
),
'name' => __('两份目录共用的设置', 'kratos'),
'desc' => __('下面几项对正文里和浮动的那一份<b>同时生效</b>。', 'kratos'),
'id' => 'toc_group_common',
'type' => 'info',
);
$options[] = array(