后台模块中安装好以后打开模版目录:phpcms/templates/default/guestbook/
异步提交和读取你可以选择在index、register、list_type三个模版里做都行,看你自己的需要。这里就删繁就简了。
我是直接在 index 模版文件下做的,所以添加留言板时的地址为:
http://localhost/index.php?m=guestbook&c=index
在 register 模版文件下做的,留言板地址为:
http://localhost/index.php?m=guestbook&c=index&a=register
前端处理部分
我把 index、register、list_type 三个都删除重新做简单点,新建index.html文件写入以下代码:
注意,这个地方需要在header模板中引入 <script type="text/javascript" src="{JS_PATH}jquery.min.js"></script>
{template "content","header"}
<div style="width:940px;margin: 0px auto;">
<h3>留言输入框</h3>
<form method="post" name="myform" id="myform">
昵称:<input type="text" id="name" name="name" placeholder="请输入昵称!">
邮箱:<input type="text" name="email" id="email" placeholder="请输入邮箱!">
<textarea name="introduce" id="introduce" placeholder="请输入您的回复内容!"></textarea>
<a href="javascript:replysub();">提交回复</a>
</form>
这里是信息提示:<span id="show-msg" style="display: none;"></span>
<h3>留言列表</h3>
{pc:guestbook action="lists" typeid="0" siteid="$siteid" page="$_GET[page]" order="desc" num="10" return="data"}
<ol id="list">
{loop $data $v}
<li>#{$v[guestid]}楼 - 昵称:{$v[name]} - 邮箱:{$v[email]} - 内容:{$v[introduce]} - 管理员神回复:{$v[reply]} - </li>
{/loop}
</ol>
{$pages}
{/pc}
</div>
<script type="text/javascript">
var Msg1 = "大哥,别走,您的昵称没有填正确!";
var Msg2 = "大哥,请输入正确的邮箱号!";
var Msg3 = "大哥,来了总要写点内容吧!";
var Msg4 = "留言提交成功,感谢支持!";
var Msg5 = "参数错误,请稍后再试!";
function replysub(){
//Jq验证一下输入的信息是否正确
if ( $("#name").val()=="" || $("#name").val().length < 4 ){
animateshowmsg(Msg1);
}
else if ($("#email").val()=="" || ( $("#email").val()!="" && !/.+@.+\.[a-zA-Z]{2,4}$/.test($("#email").val()) )){
animateshowmsg(Msg2);
}
else if ( $("#introduce").val()=="" || $("#introduce").val().length < 2){
animateshowmsg(Msg3);
}
else{
$.ajax({
cache: false,
url:"{APP_PATH}index.php?m=guestbook&c=index&a=register&siteid={$siteid}",
type:"POST",
data:$("#myform").serialize(),
success: function(data) {
if(data=="error"){
animateshowmsg(Msg5);
}
else{
$("#list").find("li").eq(0).before(data);//在第一条前插入新的留言,如需审核才展示,请删除这条,就是只异步提交
//注意,如果没有一条留言,这里会添加不上,你可以再添加一个if判断
animateshowmsg(Msg4);//留言后信息提示
$("#myform input,#myform textarea").val("");//留言后清空输入框
}
}
});
}
}
function animateshowmsg(Msg){
$("#show-msg").html(Msg).fadeIn();
setTimeout(function(){
$("#show-msg").fadeOut();
}, 2000);//提示信息的时间
}
</script>
{template "content","footer"}
这样基本就成形了,前台打开 http://localhost/index.php?m=guestbook&c=index 应该是下面这样的
新建一个模版文件作为新增留言读取的载体,在phpcms/templates/default/guestbook/ 下
新建show.html写入以下代码,这个文件就是显示最新的一条留言,然后用JQ把新增的最新留言读取再追加至页面。
{pc:guestbook action="lists" typeid="0" siteid="$siteid" page="$_GET[page]" order="desc" num="1" return="data"}
{loop $data $v}
<li>#{$v[guestid]}楼 - 昵称:{$v[name]} - 邮箱:{$v[email]} - 内容:{$v[introduce]} - 管理员神回复:{$v[reply]} - </li>
{/loop}
{/pc}
后端处理部分
打开目录:phpcms/modules/guestbook/ index.php
大约在35行左右,修改register()整个函数为:
public function register() {
$siteid = SITEID;
if(isset($_POST['name'])){
/*修改原函数,再增加一层保护以防别人跳过JS验证刷留言*/
if($_POST['name']==""){
echo error;
}
else if ($_POST['email']==""){
echo error;
}
else
{
$guestbook_db = pc_base::load_model(guestbook_model);
/*添加用户数据*/
/*修改添加'passed'=>'1' 意思就是默认为已经审核 如果要审核的请去除就行*/
/*注意修改的时候这里的数据添加需要和前端的输入框,后台的数据库表一一对应,否则会报错*/
$sql = array('siteid'=>$siteid,'typeid'=>$_POST['typeid'],'name'=>$_POST['name'],'email'=>$_POST['email'],'introduce'=>$_POST['introduce'],'passed'=>'1','addtime'=>time());
$guestbook_db->insert($sql);
include template('guestbook', 'show').$_POST['data'];//添加成功直接返回刚才添加的模板show.html里的最新一条信息 简单粗暴
}
}
else {
$setting = getcache('guestbook', 'commons');
if($setting[$siteid]['is_post']=='0'){
showmessage(L('suspend_application'), HTTP_REFERER);
}
$this->type = pc_base::load_model('type_model');
$types = $this->type->get_types($siteid);//获取站点下所有留言板分类
pc_base::load_sys_class('form', '', 0);
$setting = getcache('guestbook', 'commons');
$SEO = seo(SITEID, '', L('application_guestbook'), '', '');
include template('guestbook', 'index'); //修改以防出错默认载入index模版,不改也行
}
}
然后就可以了。
注意看代码上面的注释, 如果你要留言本分类,根据原文件修改一下typeid部分就行,没有一条留言的时候, $("#list").find("li").eq(0).before(data);// 会找不到留言列表,所以你留言一条然后刷新一下,后面就正常了。如果你实在无法忍受,你也可以增加一个if判断
var obj = $("#list").find("li");
if(obj.length >0){
$(" #list").find("li").eq(0).before(data);
}else{
$(" #list ").append(data);
};
增加留言者IP获取功能可以在 phpcms/modules/guestbook/ index.php 数据库添加的时候调用系统公共函数 $ip=ip();
然后在数据库新建好相关的表就行。如果有问题请回复!
将留言板数据发送到指定邮箱。
注意:首先你的后台邮箱配置必须是可以使用的~这是前提条件
步骤1:下载留言板模块地址
步骤2:修改留言板后台模版setting.tpl.php中添加如下代码:
<tr>
<th>邮件提醒地址:</th>
<td><input type="text" size="30" name='setting[mail]' value='<?php echo $mail; ?>' class=”input-text”></td>
</tr>
步骤3:然后到模块的index.php中添加相关的sendmail,这个需要在输出成功提示之前添加,而且会相应的减慢访客的留言提交速度,在非必要的情况下不建议使用邮件提醒,代码如下:
/*发送邮件通知*/
$message = '姓名:'.$_POST["name"].'QQ:'.$_POST['qq'].'手机:'.$_POST["phone"].'邮箱:'.$_POST["email"].'留言内容:'.$_POST["introduce"];
$setting = getcache('guestbook', 'commons');
pc_base::load_sys_func('mail');
$mails = explode(',',$setting[$siteid]['mail']);//多个邮件用, 分割
if (is_array($mails)) {
foreach ($mails as $m) {
sendmail($m,'网站有新的留言请及时查看',$message);
}
}
至此网站开发之给PHPCMS留言模块加发送到邮箱提醒就弄好了~
2020年10月更新
关于垃圾信息过滤,这里采用正在匹配内容里是否包含中文的方法:
在phpcms/modules/guestbook/ index.php中function register()中加入红色的代码
if ( $_POST[ 'name' ] == "" ) {
echo error;
} else if ( $_POST[ 'email' ] == "" ) {
echo error;
} else if (!preg_match("/[\x7f-\xff]/", $_POST[ 'introduce' ])) {
echo error;
} else {
$guestbook_db = pc_base::load_model( guestbook_model );
相关文章
PHPCMS 统计栏目下子栏目数量的代码2024-11-12
PHPCMS V9 上传图片或附件后后台退出需要重新登录的解决办法2021-06-19
PHPCMS 推荐位输出组图的方法2020-12-30
PHPCMS内容页自定义下拉菜单循环输出数值的方法2020-12-17
PHPCMS v9 search模块搜索栏目名称二次开发2020-02-20
Ajax返回列表定位到之前浏览的位置2020-01-05
PHPCMS删除文章后数据库中仍有删除文章中的关键词解决办法2019-11-13
PHPCMS中TAG模板、COMMENT模板等不能使用{SITEURL($SITEID)}函数2019-11-13
PHPCMS V9编辑器中新增上传mp4视频(上传视频并插入HTML5的video标签)的功能2019-10-30
PHPCMS一些漏洞修复及解决方案2019-07-10