帝国cms 评论增加可输入显示个人网址链接功能
2019-09-16 站长 站长日志
帝国cms 评论增加可输入显示个人网址链接功能
你可能会发现有些网站评论留言的时候,可以输入个人网址,评论提交通过后,页面显示的评论内容姓名上会显示你的个人网址的链接,这让很多有自己的站点、博客、空间等的小伙伴更积极的评论留言。
那我在“帝国cms整合多彩主题评论插件2.0(7.0~7.5)”的基础上,也增加了这一功能。
实现步骤如下:
一、修改模板及样式
编辑文件:/e/extend/lgyPl2/config.php
'logintemp'=>'<a href="/e/member/login/">登录</a> <p><input id="comment-author" name="author" size="12" value="" placeholder="您的大名"><input id="comment-email" name="email" size="20" value="" placeholder="电子邮件"><input id="comment-url" name="url" size="38" value="" placeholder="个人网址,e.g.,https://www.ivu4e.com"><input type="checkbox" id="comment-bake-cookie" name="bakecookie" onclick="!this.checked?forgetMe(this.form):rememberMe(this.form)" value="1" accesskey="r"><label for="comment-bake-cookie">记住我的信息</label></p>',
样式根据自己的需要调整吧。
实现“记住我的信息”功能,通过把信息保存在Cookie中来实现,加载评论框的时候从Cookie中读取显示出来;其实也可以使用localStorage来实现。
二、数据表添加字段
urlgo,字段名不标准,用来记录个人网址的访问次数。
三、表单提交数据的添加及格式验证
编辑文件:/e/extend/lgyPl2/data/lgyPl.2.0.js
var formData = { enews:'AddPl', id:id, classid:classid, repid:repid, key:key.val(), nomember:that.islogin?0:1, saytext:saytext.val(), img:img.val(), username:that.config.randname, author:document.lgyPl_v2_form.author?document.lgyPl_v2_form.author.value:'', email:document.lgyPl_v2_form.email?document.lgyPl_v2_form.email.value:'', url:document.lgyPl_v2_form.url?document.lgyPl_v2_form.url.value:'' }; if(!formData.saytext){ that.toast('请先说点什么吧'); saytext.focus(); return false; } var reg = /^[u4E00-u9FA5A-Za-z0-9]+$/; if (formData.author != undefined && formData.author.length > 0){ if(!reg.test(formData.author)){ that.toast('姓名格式错误,可包含中文、英文及数字'); return false; } } var reg = /^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$/; if (formData.email != undefined && formData.email.length > 0){ if(!reg.test(formData.email)){ that.toast('邮箱格式错误'); return false; } } var reg = /b(?:(?:https?|ftp)://|www.)[-a-z0-9+&@#/%?=~_|!:,.;]*[-a-z0-9+&@#/%=~_|]/i; if (formData.url != undefined && formData.url.length > 0){ if(!reg.test(formData.url)){ that.toast('个人网址格式错误'); return false; } }
四、后台保存评论内容代码修改
编辑文件:/e/extend/lgyPl2/class/plfun.php
同样要对数据进行验证
$author = trim(RepPostVar($add[author])); if ($author){ if (strlen($author) < 5 || strlen($author) > 20){ lgyPl_v2::printerror("AuthorLenFail","history.go(-1)",1); } if (!preg_match("/^[u4E00-u9FA5A-Za-z0-9]+$/",$author)) { lgyPl_v2::printerror("AuthorFail","history.go(-1)",1); } } $email = trim(RepPostStr($add['email'])); if ($email) { if (strlen($email) < 5 || strlen($email) > 80){ lgyPl_v2::printerror("EmailLenFail","history.go(-1)",1); } if (!preg_match("/^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$/",$email)) { lgyPl_v2::printerror("EmailFail","history.go(-1)",1); } } $url = trim(RepPostStr($add['url'])); if ($url){ if (strlen($url) < 5 || strlen($url) > 50){ lgyPl_v2::printerror("UrlLenFail","history.go(-1)",1); } if (!preg_match("/b(?:(?:https?|ftp)://|www.)[-a-z0-9+&@#/%?=~_|!:,.;]*[-a-z0-9+&@#/%=~_|]/i",$url)) { lgyPl_v2::printerror("UrlFail","history.go(-1)",1); } }
修改插入SQL语句;
对跳转的处理,添加记数,统计个人网址被访问了多少次
//页面跳转 function redirectTo($url){ header('content-type:text/html;charset=uft-8'); //重定向页面 header('location:'.$url); exit(); } //记数并跳转到个人网址 function DoUrlGo($add){ global $empire,$dbtbpre,$class_r; $classid=(int)$add['classid']; $id=(int)$add['id']; $plid=(int)$add['plid']; $errUrl = "/404.html"; //专题 $doaction=$add['doaction']; if($doaction=='dozt') { if(!$classid||!$plid) { redirectTo($errUrl); } $infor=$empire->fetch1("select ztid,restb from {$dbtbpre}enewszt where ztid='$classid'"); if(!$infor['ztid']) { redirectTo($errUrl); } $pubid='-'.$classid; } else//信息 { if(!$classid||!$id||!$plid||!$class_r[$classid][tbname]) { redirectTo($errUrl); } $infor=$empire->fetch1("select classid,restb from {$dbtbpre}ecms_".$class_r[$classid][tbname]." where id='$id' limit 1"); if(!$infor['classid']) { redirectTo($errUrl); } $pubid=ReturnInfoPubid($classid,$id); } $plrow = $empire->fetch1("select url from {$dbtbpre}enewspl_".$infor['restb']." where plid='$plid'"); $url=$plrow['url']?$plrow['url']:""; if ($url){ $empire->query("update {$dbtbpre}enewspl_".$infor['restb']." set urlgo=urlgo+1 where plid='$plid'"); redirectTo($url); }else{ redirectTo($errUrl); } }
小结
修改的地方比较多,文中只列出一些主要的部分,如果有需要的话,后续提供一个完整的下载链接。
注意:这里面有一个坑,php的正则表达式处理与Javascript不一致,姓名验证的功能JS处理正常,php就不行了。参考:php正则表达式处理方面的一个坑,php中文正则表达式