Typecho(handsome)文章部分加密插件(PartiallyPassword)支持对某一篇文章的特定部分创建密码,访客需要正确输入密码才能查看内容。

由于typecho默认的加密功能是全部文章加密,但我需求是只加密需要的部分,最起码能告诉特定的读者加密的密码是多少。在此之前网上的插件最好的也只有标题和摘要没有加密,但把密码提示放在标题或者摘要处太蛋疼了。
我把需求在群里说了后,群里有人提到typecho曾经有一款能部分加密文章的插件,只不过作者已经停止更新了。
此时,可靠的ucw大佬再次出现,他也对文章的部分加密有需求,但他的时间并不多。当他问我是选择让他编写文章部分加密插件还是黑条隐藏一段文字的时,我考虑到黑条隐藏文字已经有不算太好的解决方案,最后决定求助ucw大佬编写文字部分加密插件。最终就有了这款:Typecho 文章部分加密插件(PartiallyPassword).
关于黑条隐藏文字的方案可以看看我的这篇文章的第二个例子。


其实直接访问GitHub阅读readme即可,我这里就拷贝下readme内容。

安装 Installation

A. 直接下载 Download directly

访问本项目的Release页面,下载最新的Release版本,解压后将其中的文件夹重命名为PartiallyPassword并移动到 Typecho 插件目录下。

Visit the Release page of our project, download the latest Release version, unzip it, and then rename the folder to PartiallyPassword and move it to the Typecho plugin directory.

B. 从仓库克隆 Clone from repo

在 Typecho 插件目录下启动终端,执行命令即可。

Start the terminal in the Typecho plugin directory and execute the command below.

git clone https://github.com/wuxianucw/PartiallyPassword.git

或下载压缩包(Download ZIP)并解压,将其中的文件夹重命名为PartiallyPassword并移动到 Typecho 插件目录下。

Or Download ZIP and unzip it, rename the folder to PartiallyPassword and move it to the Typecho plugin directory.

使用方法 Usage

初始化 Initialization

启用插件,在设置界面填写页面公共HTML和密码区域HTML,即完成全部初始化工作。默认填入的HTML是一套非常简单的演示样式,建议根据主题特性进行自定义修改。

Activate the plugin, fill in the Page Public HTML and Password Area HTML in the settings page, and that is all initialization work. The default HTML is a very simple presentation style, it is recommended to customize the changes according to your theme features.

调用方法举例 Samples

基础用法 Basic

不加密的内容
something that doesn't require password
[ppblock]
加密的内容
something that requires password
[/ppblock]
别的东西
something else...

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

This is the simplest demo. You can also add ex attribute, just like:

[ppblock ex="Please Enter Password"]
加密的内容
something that requires password
[/ppblock]

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

Additional Content set by ex attribute will be displayed at the password-inputting area.

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

If you still need a text like [ppblock]...[/ppblock], please use [[ppblock]...[/ppblock]]. Extra square brackets are automatically removed.

插入多个区块 Multiple blocks

This is a simple demo.
[ppblock]
AAA
[/ppblock]
Something else...
[ppblock ex="Haha, one more"]
BBB
[/ppblock]
Something else...
[ppblock ex="Another!"]
CCC
[/ppblock]
end

如果你只配置了一个密码,那么输入这个密码后,所有被加密的内容都可见。
如果你配置的密码数量小于加密区块(ppblock)的数量,那么将会产生循环。假设有n个区块、m个密码,即当n>m时,第m+1个区块将会使用第1个密码,第m+2个区块将会使用第2个密码,以此类推。第i个区块实际使用的密码为第(i-1)%m+1个密码。但我们不推荐这种设置,因为它并不一定能够正常工作。
如果你配置的密码数量大于加密区块的数量,多余的密码将被舍弃。

为上例配置3个密码,即可达到不同区块使用不同密码的目的。

If you only have one password configured, all encrypted content will be visible after entering this password.
If you configure a smaller number of passwords than the number of encrypted blocks (ppblocks), then you will start a loop. Suppose there are n blocks, m passwords, ie when n>m, the m+1-th block will use the first password. The m+2-th block will use the second password, and so on. The password actually used by the i-th block is the (i-1)%m+1-th password. But we don't recommend this setting because it doesn't necessarily work as you think.
If the number of passwords you configure is greater than the number of encrypted blocks, the extra password will be discarded.

For the above example, configure three passwords to achieve different passwords for different blocks.

提示 Tips

目前插件启用后会报PHP错误,暂时先关掉PHP报错或者等作者更新吧

PHP的报错信息是handsome提供的,你需要在主题\handsome\libs\Config.php内找到:

const PHP_ERROR_DISPLAY = 'on';//on 开启php错误输出,off强制关闭php错误输出
const HANDSOME_DEBUG_DISPLAY = 'on'; //on 开启handsome调试信息,off 关闭handsome调试信息显示

改成off即可。


更新:master已修复这个bug,git clone或者wget下载master分支即可。release将在下个版本更新。

  • 此版本尚未对基于text的调用进行内容替换操作,部分依赖这一属性的功能中,加密内容仍然有可能暴露,此时请向我提出issue,我会尽快在后续版本中修复相关问题。

This version has not yet done a content replacement operation based on the text call. In some functions that depend on this property, the encrypted content may still be exposed. Please submit an issue to me at this time, I will fix the related issue in the subsequent version as soon as possible.

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

Do not use the [ppblock] tag unpaired or nested, it will not be displayed as expected.

TODO List

 在Widget_Abstract_Contents的excerpt下挂接函数,屏蔽所有[ppblock]以及其中的内容,不判断cookie。(Since v1.1.0)
 寻找一个方案可以直接操作$widget->text取出的内容,实现完美屏蔽。
 现有的鉴权逻辑较为不完善,应增加提交密码时的后端相关处理,并合理优化流程。
 默认外观需要优化,包括样式和插入位置。 已经完成优化,现在的默认样式是一套极简风格的密码输入框。插入位置暂时没有特别有效的优化方案。(Since v1.1.1)

插件启用后,每个文章编辑器底部就会出现“是否开启文章部分加密”,默认是关闭的,如果找不到直接用ctrl f查找,不是设置高级选项内的公开度

如果需要支持中文密码,需要设置插件代码内:type="password"改成type="text"


项目地址:wuxianucw/PartiallyPassword

最后修改:2019 年 12 月 07 日
如果觉得我的文章对你有用,请随意赞赏