本文共 345 个字数,平均阅读时长 ≈ 1分钟
涉及文件
/Joe/core/function.php
- 增加需要用到的函数
- 增加如下3个函数
#生成验证码
function comment_protection_code(){
$num1=rand(1,9);
$num2=rand(1,9);
$rand=rand(1,100)%3;
switch($rand){
case 0:
$ret=$num1 $num2;
$symbol='+';
break;
case 1:
$ret=$num1 - $num2;
$symbol='-';
break;
case 2:
$ret=$num1 * $num2;
$symbol='×';
break;
}
@session_start();
$_SESSION['verify']=$ret;
$_SESSION['verify_md5']=md5($num1.$num2);
@session_write_close();
echo "";
echo "n";
echo "";
}
#判断路由用到
function endsWith($haystack, $needle){
return $needle === '' || substr_compare($haystack, $needle, -strlen($needle)) === 0;
}
/Joe/public/comment.php
- 目的: 增加验证码输入框
- 搜索
输入网址
,在它的下方增加一个节点,用来输入验证码
...
#上方为原始代码
#下方为新增
fields->code ==='yes'): ?>
/Joe/core/core.php
- 目的: 在文章编辑时,增加设置开关
- 在
themeFields
方法中增加以下代码
$code = new Typecho_Widget_Helper_Form_Element_Radio (
'code',
array(
'no' => '否',
'yes' => '是'
),
'no',
'评论是否启用验证码',
'介绍:用于设置当前文章评论时是否需要输入验证码
'
);
$layout->addItem($code);
/Joe/assets/js/joe.global.js
- 目的: 在提交评论时,增加验证码校验参数
- 打开未压缩版js文件,搜索
激活评论提交
,用下方代码替换,然后压缩后替换同文件夹的joe.global.min.js
/* 激活评论提交 已修改 */
/* 激活评论提交 已修改 */
{
if ($('.joe_comment').length) {
let isSubmit = false;
$('.joe_comment__respond-form').on('submit', function (e) {
e.preventDefault();
const action = $('.joe_comment__respond-form').attr('action') '?time=' new Date();
const type = $('.joe_comment__respond-form').attr('data-type');
const parent = $('.joe_comment__respond-form').attr('data-coid');
const author = $(".joe_comment__respond-form .head input[name='author']").val();
const _ = $(".joe_comment__respond-form input[name='_']").val();
const mail = $(".joe_comment__respond-form .head input[name='mail']").val();
const url = $(".joe_comment__respond-form .head input[name='url']").val();
const sum = $(".joe_comment__respond-form .head input[name='sum']").val();
const num1 = $(".joe_comment__respond-form .head input[name='num1']").val();
const rand = $(".joe_comment__respond-form .head input[name='rand']").val();
const num2 = $(".joe_comment__respond-form .head input[name='num2']").val();
let text = $(".joe_comment__respond-form .body textarea[name='text']").val();
if (sum === '') return Qmsg.info('请输入验证信息!');
if (rand === '+') {
if (sum != Number(num1) Number(num2)) return Qmsg.warning('验证码错误,请重试!');
} else if (rand === '-') {
if (sum != Number(num1) - Number(num2)) return Qmsg.warning('验证码错误,请重试!');
} else if (rand === '×') {
if (sum != Number(num1) * Number(num2)) return Qmsg.warning('验证码错误,请重试!');
}
if (author.trim() === '') return Qmsg.info('请输入昵称!');
if (!/w ([- .]w )*@w ([-.]w )*.w ([-.]w )*/.test(mail)) return Qmsg.info('请输入正确的邮箱!');
if (type === 'text' && text.trim() === '') return Qmsg.info('请输入评论内容!');
if (type === 'draw') {
const txt = $('#joe_comment_draw')[0].toDataURL('image/webp', 0.1);
text = '{!{' txt '}!} ';
}
if (isSubmit) return;
isSubmit = true;
$('.joe_comment__respond-form .foot .submit button').html('发送中...');
$.ajax({
url: action,
type: "POST",
data: { author, mail, text, parent, url, _ },
dataType: "text",
success(res) {
let arr = [],
str = "";
arr = $(res).contents();
Array.from(arr).forEach((_) => {
if (_.parentNode.className === "container") str = _;
});
if (!/Joe/.test(res)) {
Qmsg.warning(str.textContent.trim() || "");
isSubmit = false;
$(".joe_comment__respond-form .foot .submit button").html("发表评论");
} else {
window.location.reload();
}
},
error() {
isSubmit = false;
$(".joe_comment__respond-form .foot .submit button").html("发表评论");
Qmsg.warning("发送失败!请刷新重试!");
},
});
});
}
}
自定义css
目的: 在输入框左侧增加竖形分割线,统一外观
添加方式:Joe主题设置->全局设置->自定义CSS,粘贴下面的代码
代码语言:javascript复制/*验证码处css*/
@media (min-width: 768px) {
.joe_comment__respond-form .head .list:nth-child(4) {
position: relative
}
.joe_comment__respond-form .head .list:nth-child(4)::before {
content: '';
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 1px;
height: 15px;
background: var(--classA)
}
.joe_comment__respond-form .head .list:nth-child(4)::before {
left: 0
}
}