找回密码
 立即注册
查看: 126|回复: 0

Typecho 文章部分加密插件PartiallyPassword下载

[复制链接]

97

主题

0

回帖

489

积分

管理员

积分
489
发表于 2026-3-28 23:39:43 来自手机 | 显示全部楼层 |阅读模式
#### 基础用法

**在书写加密语法之前,请先将对应文章下方“自定义字段”中“是否开启文章部分加密”一项调整为“开启”状态。** 该项目默认为“关闭”状态,在此情况下,任何加密语法都不会被解析。

下面的所有例子都包含一个“文本部分”和一个“配置部分”,其中上方的“文本部分”是需要在 Typecho 编辑器中书写的内容,下方的“配置部分”是需要在文章下方“自定义字段”中“密码组”一项内填入的内容。

```text
不需要密码的内容

[ppblock]
输入密码可见的内容
[/ppblock]

不需要密码的内容
```

```json
["123456"]
```

这就是一个最简单的例子。你也可以进一步给加密块添加附加信息:

```text
[ppblock ex="请输入密码"]
输入密码可见的内容
[/ppblock]
```

```json
["123456"]
```

附加信息将会在输入密码处显示。

如果你想书写一段 `[ppblock]...[/ppblock]` 形式的文本,但不希望它被解析,请使用 `[[ppblock]...[/ppblock]]`,两侧多余的方括号会被自动移除。

#### 插入多个加密块

```text
不需要密码的内容

[ppblock]
需要密码的内容 A,id = 0
[/ppblock]

不需要密码的内容

[ppblock pwd="喵"]
需要密码的内容 B,id = 1
[/ppblock]

不需要密码的内容

[ppblock ex="给我密码"]
需要密码的内容 C,id = 2
[/ppblock]

不需要密码的内容
```

```json
{
    "0": "123456",
    "喵": "miao~",
    "2": "000000"
}
```

每个加密块都会被赋予一个 `id`,它从 0 开始依次增加。加密块密码的寻找逻辑如下:

1. 检查 `pwd` 属性
    - 若该属性存在,从第 2 步继续后续操作 →
    - 若该属性不存在,从第 3 步继续后续操作 →
2. 寻找 JSON 中是否有索引为 `pwd` 的值的项目
    - 是,使用该项目作为当前块的密码,结束 √
    - 否,从第 4 步继续后续操作 →
3. 寻找 JSON 中是否有索引为 `id` 的值的项目
    - 是,使用该项目作为当前块的密码,结束 √
    - 否,从第 4 步继续后续操作 →
4. 寻找 JSON 中是否有索引为 `fallback` 的项目
    - 是,使用该项目作为当前块的密码,结束 √
    - 否,当前块展现为“密码未设置”错误提示 ×

在上例中,三个加密块的密码依次是 `123456`、`miao~` 和 `000000`。

下面的例子演示 `fallback` 的功能:

```text
不需要密码的内容

[ppblock]
需要密码的内容 A,id = 0
[/ppblock]

不需要密码的内容

[ppblock pwd="喵" ex="给我密码"]
需要密码的内容 B,id = 1
[/ppblock]

不需要密码的内容
```

```json
{
    "1": "miao~",
    "fallback": "123456"
}
```

这个例子中,两个加密块的密码都是 `123456`。第二个加密块虽然指定了 `pwd` 属性,但密码组中没有对应的项目,因此也不再检查是否有符合 `id` 的项目,而是直接使用 `fallback`。

这种使用 `pwd` 属性指定密码的方式称为“命名密码”。当只使用索引时,密码组配置可以简写为一个 `string[]` 类型的 JSON 数组,例如:

```text
不需要密码的内容

[ppblock]
需要密码的内容 A,id = 0
[/ppblock]

不需要密码的内容

[ppblock ex="给我密码"]
需要密码的内容 B,id = 1
[/ppblock]

不需要密码的内容
```

```json
["123456", "miao~"]
```

这在加密块比较少或密码不重用时非常方便。

#### 不同密码对应不同内容

自 v3.0.0 起,引入了一种新的标记 `ppswitch`。下面是一个例子:

```text
不需要密码的内容

[ppswitch]
公共内容(可选)
[case pwd="p1"]
输入了 p1 的情况
[/case]
[case pwd="p2"]
输入了 p2 的情况
[/case]
[/ppswitch]
```

```json
{
    "p1": "111111",
    "p2": "222222"
}
```

当未输入密码时,展现为:

```text
不需要密码的内容

```

如果输入 `111111`(即 `p1` 的值),则展现为:

```text
不需要密码的内容

公共内容(可选)
输入了 p1 的情况
```

输入 `222222`(即 `p2` 的值)后的展现类推。

有两点需要特别注意:

1. `case` 标记必须指定 `pwd` 属性,否则无论如何都不会显示,而且,除非指定 `pwd="fallback"`,否则不会在找不到密码时自动采用 `fallback` 的值;
2. `ppswitch` 与 `ppblock` 共用一套 `id` 系统,尽管 `ppswitch` 默认不会寻找密码组中索引为 `id` 的值的项目。

关于第二点,下面这个例子可能能够帮助理解:

```text
[ppblock]
这个加密块的 id = 0
[/ppblock]

[ppswitch]
这个加密块的 id = 1
[case pwd="0"]
你输入了上一个加密块的密码
[/case]
[case pwd="2"]
你输入了下一个加密块的密码
[/case]
[/ppswitch]

[ppblock]
这个加密块的 id = 2
[/ppblock]
```

```json
{
    "0": "000000",
    "2": "123456"
}
```

可以看到,中间的 `ppswitch` 占用了一个 `id`,但是无法直接通过它的 `id` 为它指定密码(除非设置 `[case pwd="1"]`,但这时它是一个索引为 `1` 的命名密码)。这种设计是出于多个 `case` 时难以规定默认行为的考虑。

### 提示

- 请勿不成对或嵌套地使用标记,它的展现无法预期。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|且惜论坛

GMT+8, 2026-4-19 19:39 , Processed in 0.045264 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表