帝国cms 评论增加可输入显示个人网址链接功能
微wx笑
2019-09-16【帝国CMS】
353
12
2关键字:
评论
你可能会发现有些网站评论留言的时候,可以输入个人网址,评论提交通过后,页面显示的评论内容姓名上会显示你的个人网址的链接,这让很多有自己的站点、博客、空间等的小伙伴更积极的评论留言。
目录
帝国cms 评论增加可输入显示个人网址链接功能
你可能会发现有些网站评论留言的时候,可以输入个人网址,评论提交通过后,页面显示的评论内容姓名上会显示你的个人网址的链接,这让很多有自己的站点、博客、空间等的小伙伴更积极的评论留言。
那我在“帝国cms整合多彩主题评论插件2.0(7.0~7.5)”的基础上,也增加了这一功能。
实现步骤如下:
一、修改模板及样式
编辑文件:/e/extend/lgyPl2/config.php
1 | '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,字段名不标准,用来记录个人网址的访问次数。
phome_enewspl 数据表字段解释(评论主表) |
字段名 | 类型 | 解释 | 附加说明 |
plid | int(11) | 评论ID | |
username | varchar(30) | 评论者 | 如果是会员评论则是用户名 |
sayip | varchar(20) | 评论者IP | |
saytime | datetime | 发表时间 | |
id | int(11) | 信息ID | |
checked | tinyint(1) | 是否审核 | 0为已审核,1为未审核 |
classid | smallint(6) | 栏目ID | |
zcnum | smallint(6) | 支持数 | |
fdnum | smallint(6) | 反对数 | |
userid | int(11) | 用户ID | 会员评论为用户ID,匿名评论为0 |
isgood | tinyint(1) | 是否推荐 | 1为推荐评论,0为不推荐 |
stb | varchar(6) | 存放副表名 |
三、表单提交数据的添加及格式验证
编辑文件:/e/extend/lgyPl2/data/lgyPl.2.0.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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
同样要对数据进行验证
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | $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语句;
对跳转的处理,添加记数,统计个人网址被访问了多少次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | //页面跳转 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中文正则表达式
本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/EmpireCMS/2019-09-16/216.html
而发生