PHPCMS留言板实现异步提交前后端修改方法

2016-11-05 浏览:2248
PHPCMS留言板实现异步提交前后端修改方法
评论:(0)复制地址

首先必须确保你是从这里下的留言版插件

留言板 UTF-8 2.5版本.rar


后台模块中安装好以后打开模版目录: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 );






评论:(0)复制地址

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。