让Z-Blog评论必须填邮箱、网址等信息
鸣谢@隔壁老李、@拓源网、@沉冰浮水、@豫唐网络四位大佬的思路及技术支撑,使得小道又学会了一个巧妙地姿势。
缘起啊,说来话长。有位道友找小道换友链,结果在写评论的时候,居然邮箱、主页什么的全都没填,小道一看,无法通知他,心中愤愤不平,真是气得七窍生烟。于是我,修道的老李,心里想着,不能再让这种事发生了,决定尝试搞个Z-Blog评论强制填写邮箱、网址的功能。说实话,起初我在拓源主题的Z-Blog群里有些忐忑,毕竟小道对Z-Blog的那些钩子、机制也不甚了了,早已忘得七七八八,心里多少有点不好意思开口。不过转念一想,不问又如何能进步?那不成了道途上的障碍?其实隔壁的老李,那才是真有悟性,写代码时下笔如有神助,一写一个准,我看了也是心生佩服。虽说修道有成,我在这编程之道上,还得多向那老李请教一二啊。
于是,我根据隔壁老李和沉冰浮水提供的思路,巧妙地写下了下面的代码,主要是几个功能,邮箱必填和网址必填,而且是完全需要填写正确的内容,否则正则判断后不正确,你还得重新填写对应内容。这样一来,我如果回复了用户的评论后,就可以完美的通过邮箱或者更加高级、暴力的方式去通知评论者,长话短说,不多废话,代码如下:
/* 评论邮箱,网址必填 */ Add_Filter_Plugin('Filter_Plugin_PostComment_Core', 'PostComment_Core'); function PostComment_Core(&$cmt) { global $zbp; // 获取 POST 请求中的 Email, HomePage 和 username 参数 $Email = GETVars("email", "POST"); $homepage = GETVars("HomePage", "POST"); // 判断当前用户是否为站长 $is_admin = $zbp->user->Level == 1; // 站长的权限级别通常是 1 // 如果不是站长,则执行验证 if (!$is_admin) { // 使用系统内置的 CheckRegExp 进行初步验证 if (!CheckRegExp($email, '[email]')) { $cmt->IsThrow = true; $error_code_invalid_email = 16; // 自定义的错误代码 $zbp->lang['error'][$error_code_invalid_email] = '邮箱格式不正确'; // 错误提示信息 $zbp->ShowError($error_code_invalid_email, __FILE__, __LINE__); // 抛出错误 } if (!CheckRegExp($homepage, '[homepage]')) { $cmt->IsThrow = true; $error_code_invalid_homepage = 17; // 自定义的错误代码 $zbp->lang['error'][$error_code_invalid_homepage] = '网址格式不正确'; // 错误提示信息 $zbp->ShowError($error_code_invalid_homepage, __FILE__, __LINE__); // 抛出错误 } // 邮箱的正则表达式 - 更严格的正则 $email_strict_pattern = '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/'; // 主页的正则表达式 - 更严格的正则 $homepage_strict_pattern = '/^https?:\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(\/.*)?$/'; // 更严格的邮箱格式验证 if (!preg_match($email_strict_pattern, $email)) { $cmt->IsThrow = true; $error_code_strict_email = 18; // 自定义的错误代码 $zbp->lang['error'][$error_code_strict_email] = '邮箱格式不符合更严格的要求,邮箱必须是能接受到频道通知的可用邮箱。'; // 错误提示信息 $zbp->ShowError($error_code_strict_email, __FILE__, __LINE__); // 抛出错误 } // 更严格的主页格式验证 if (!preg_match($homepage_strict_pattern, $homepage)) { $cmt->IsThrow = true; $error_code_strict_homepage = 19; // 自定义的错误代码 $zbp->lang['error'][$error_code_strict_homepage] = '网址格式不符合更严格的要求,网址例如:https://www.dao.js.cn/'; // 错误提示信息 $zbp->ShowError($error_code_strict_homepage, __FILE__, __LINE__); // 抛出错误 } } }
这个代码很随意,可以直接插在主题的include.php的底部直接使用,我是使用的拓源主题,如果是其他主题或许提示的错误代码有所不同,诸君要慢慢摸索。另外隔壁老李也发布了这方面的文章。