文章目录(TOC)目前「显示位置」是一个三选一的下拉:正文中间 / 页面左侧 / 页面右侧,三者互斥。选了左侧或右侧,正文里一份目录都不放。
实际需求是:在正文中显示 与 左右浮动显示 是两个互相独立的能力,可以同时开启。两者不是「页面的哪一栏」,而是两类不同的呈现方式。
两者互不互斥:允许只开其一,也允许全开。全开时同一篇文章里正文一份 + 浮动一份,两份目录指向同一批锚点。
已与需求方确认:指目录块在正文容器内部的左对齐或右对齐(即显示在文章页面的左侧还是右侧),受正文栏宽度约束,不是浮动到页面边缘。
[TOC]
the_content
get_the_content()
opacity: 0
inc/theme-options.php
toc_place
inc/theme-toc.php
yang_toc_plan()
yang_toc_inject()
assets/css/toc.css
assets/js/toc.js
首版需求描述与实现现状存在理解偏差,经与需求方确认,澄清如下。
原先被实现为「三选一」的 正文中间 / 页面左侧 / 页面右侧,把「放在哪里」和「怎么对齐」混成了同一个选项。实际这是两个正交的维度。
正文中间 / 页面左侧 / 页面右侧
两个显示开关,互相独立、可同时勾选
「在正文中显示」的子选项
「浮动显示」的子选项
两者全开时是正常的合法状态,不是冲突:正文一份 + 浮动一份,共用同一批锚点。
已确认:无需处理。不考虑从旧版 toc_place 三选一配置迁移,直接按新结构实现即可。
注:本评论由讨论内容整理而成,已去除其中的认证凭据等敏感信息。
已实现并发布 3.2.31,提交 4a2d62b(提交信息带 #1)。
4a2d62b
子选项随开关显隐:「正文中的对齐」「自动插入位置」跟「在正文中显示」;「浮动方向」跟「浮动显示」。
max-width: min(100%, 28em)
checkbox 用 !empty() 判断会把「键不存在」和「键明确为空」混成一件事 → 新装站点后台框显示勾上、页面却不出目录。已改用 array_key_exists() 区分的三态判断。
!empty()
array_key_exists()
按讨论结论不做迁移,3.2.30 的旧位置设置直接作废。默认 inline=1 / float=0,升级后页面与升级前一致。
正文对齐那条量的是真实像素位移:同一份正文、同样的宽度,靠右比靠左的目录块左边缘右移 348px,宽度不变(不是被压窄)。只断言 data-align 字符串存在是不够的 —— 属性对而画面不动正是这个需求最典型的假绿。
data-align
kratos_yang.zip
这轮讨论澄清了一个语义问题,结论整理如下。
实测把「添加方式」在手动 / 自动之间切换,浮动目录的有无与左右方向均不受影响:
即 rail(是否浮动)只由「浮动显示」开关决定,与 mode 正交。这一版没有改动任何判断逻辑。
rail
mode
原来十项排成一长列,顺序是: 在正文中显示 → 正文中的对齐 → 自动插入位置 → 浮动显示 → 浮动方向 → 添加方式 → 默认状态 → …
在正文中显示
正文中的对齐
自动插入位置
浮动显示
浮动方向
添加方式
默认状态
「添加方式」「自动插入位置」排在浮动选项之后,视觉上像是两种目录共用的设置 —— 于是会让人以为浮动目录也分手动、自动。
在同一个「自动目录」标签页内,用框架的 info 类型加三行小标题:
info
用 info 而不是 heading,是因为 heading 会另起一个标签页(框架里 case "heading" 会新建 #options-group-N),而 info 只渲染成一行 <h4> + 说明,既不进标签页菜单也不生成表单字段 —— 正是需要的组内小标题。
heading
case "heading"
#options-group-N
<h4>
正文那一份与浮动那一份读的是同一个设置,所以两种目录都会按这里选的状态决定「一进来是展开还是先收起」。你的要求是保留,实现上也确实是这样,无需改动。
上一版选项定义里 「自动插入位置」被写了两遍(后一个会覆盖前一个),后台会渲染出两个同名下拉框。已删掉多余的一份,并加了检查项防止再犯。
71f8a73
#1
theme-update/
用户确认需求完成,关闭此单。3.2.31(正文/浮动拆成两个独立开关)+ 3.2.32(后台按归属切成三段)均已发布。
No dependencies set.
The note is not visible to the blocked user.
背景
文章目录(TOC)目前「显示位置」是一个三选一的下拉:正文中间 / 页面左侧 / 页面右侧,三者互斥。选了左侧或右侧,正文里一份目录都不放。
实际需求是:在正文中显示 与 左右浮动显示 是两个互相独立的能力,可以同时开启。两者不是「页面的哪一栏」,而是两类不同的呈现方式。
需求
1. 显示方式改为两个独立开关(可同时勾选)
两者互不互斥:允许只开其一,也允许全开。全开时同一篇文章里正文一份 + 浮动一份,两份目录指向同一批锚点。
2. 勾选「在正文中显示」后,再展开两个子选项
3. 勾选「浮动显示」后,再展开子选项
4. 保持不变的既有能力
[TOC])/ 自动关键约束
[TOC]永远优先:正文里只要有手写标记,就按标记位置渲染,不再自动插第二份。老文章升级后不能突然多出目录。the_content(缓存插件 / OEmbed /get_the_content())时标题没有 id,浮动面板条目会全部点不动,且外观完全正常、极难排查 —— 这种情况宁可不显示。opacity: 0之类方式占据原位吃掉正文点击。影响范围(初判)
inc/theme-options.php:toc_place单下拉拆成「开关 + 子选项」结构inc/theme-toc.php:yang_toc_plan()决策表、yang_toc_inject()插入逻辑、浮动渲染前置闸门assets/css/toc.css/assets/js/toc.js:正文内对齐与浮动面板需能共存验收标准
[TOC]的页面,无论后台怎么配,都不出现第二份目录需求澄清记录
首版需求描述与实现现状存在理解偏差,经与需求方确认,澄清如下。
一、最初的偏差
原先被实现为「三选一」的
正文中间 / 页面左侧 / 页面右侧,把「放在哪里」和「怎么对齐」混成了同一个选项。实际这是两个正交的维度。二、确认后的结构
两个显示开关,互相独立、可同时勾选
「在正文中显示」的子选项
「浮动显示」的子选项
两者全开时是正常的合法状态,不是冲突:正文一份 + 浮动一份,共用同一批锚点。
三、关于老配置迁移
已确认:无需处理。不考虑从旧版
toc_place三选一配置迁移,直接按新结构实现即可。四、流程约定(本项目通用)
完成情况
已实现并发布 3.2.31,提交
4a2d62b(提交信息带 #1)。一、按本单澄清的两点落地
二、后台控件(共 10 个,同一标签页)
子选项随开关显隐:「正文中的对齐」「自动插入位置」跟「在正文中显示」;「浮动方向」跟「浮动显示」。
三、两处需要记录的实现要点
max-width: min(100%, 28em),窄屏自动退化整栏宽。四、顺手修掉的一处默认值错配
checkbox 用
!empty()判断会把「键不存在」和「键明确为空」混成一件事 → 新装站点后台框显示勾上、页面却不出目录。已改用array_key_exists()区分的三态判断。五、老配置
按讨论结论不做迁移,3.2.30 的旧位置设置直接作废。默认 inline=1 / float=0,升级后页面与升级前一致。
六、验证结果
正文对齐那条量的是真实像素位移:同一份正文、同样的宽度,靠右比靠左的目录块左边缘右移 348px,宽度不变(不是被压窄)。只断言
data-align字符串存在是不够的 —— 属性对而画面不动正是这个需求最典型的假绿。七、发布
kratos_yang.zip公网 md5 与本地一致;解包核对版本 3.2.31、旧字段 0 残留。补充修正(3.2.32):浮动目录不存在「手动 / 自动」这一维度
这轮讨论澄清了一个语义问题,结论整理如下。
1. 你的原话要点
[TOC]那个标记。2. 核查结果:代码本来就是对的
实测把「添加方式」在手动 / 自动之间切换,浮动目录的有无与左右方向均不受影响:
即
rail(是否浮动)只由「浮动显示」开关决定,与mode正交。这一版没有改动任何判断逻辑。3. 真正的问题:后台的排列方式让人误解
原来十项排成一长列,顺序是:
在正文中显示→正文中的对齐→自动插入位置→浮动显示→浮动方向→添加方式→默认状态→ …「添加方式」「自动插入位置」排在浮动选项之后,视觉上像是两种目录共用的设置 —— 于是会让人以为浮动目录也分手动、自动。
4. 改法:按归属切成三段(不新增标签页、不新增设置项)
在同一个「自动目录」标签页内,用框架的
info类型加三行小标题:用
info而不是heading,是因为heading会另起一个标签页(框架里case "heading"会新建#options-group-N),而info只渲染成一行<h4>+ 说明,既不进标签页菜单也不生成表单字段 —— 正是需要的组内小标题。5. 文案同步收窄
[TOC],勾了就一直在)」。[TOC]决定;清掉上一版残留的「目录位置 = 正文中间」这种已经不存在的说法(那个三选一在 3.2.31 已作废)。6. 「默认状态」确认对两种目录都有效(保留,未改)
正文那一份与浮动那一份读的是同一个设置,所以两种目录都会按这里选的状态决定「一进来是展开还是先收起」。你的要求是保留,实现上也确实是这样,无需改动。
7. 顺带修掉的真 bug
上一版选项定义里 「自动插入位置」被写了两遍(后一个会覆盖前一个),后台会渲染出两个同名下拉框。已删掉多余的一份,并加了检查项防止再犯。
8. 验收情况
9. 交付
71f8a73(信息带#1),已推送 main。theme-update/下的 zip + readme + update.json,未解包覆盖服务器主题目录,你在后台自己点升级即可。用户确认需求完成,关闭此单。3.2.31(正文/浮动拆成两个独立开关)+ 3.2.32(后台按归属切成三段)均已发布。