很多朋友会有这种需求,在帝国cms后台发信息时想验证一下标题是否存在,如果存在了可以避免出现重复的信息。下面跟着cms大学小编一起来学习一下在帝国cms中的实现方法。
1、帝国cms后台 - 管理数据表 - 找到自己使用的数据表 - 修改title字段 - 输入表单使用下面的代码
找到代码
折叠XML/HTML 代码
- <input type=text name=title value="<?=ehtmlspecialchars(stripSlashes($r[title]))?>" size="60">
替换为
折叠XML/HTML 代码
- <input type=text name=title value="<?=ehtmlspecialchars(stripSlashes($r[title]))?>" size="60" onblur="checkTitle()">
在输入表单最下面加入如下代码
折叠JavaScript 代码
- <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/1.9.0/jquery.min.js"></script>
- <script type="text/javascript">
- function checkTitle()
- {
- var classid=<?=$_GET[classid]?>;
- var id=<?=$_GET[classid]?>;
- var tit=document.add.title.value;
- console.log("我是标题="+tit);
- console.log("我是classid="+classid);
- console.log("我是id="+id);
- $.ajax({
- url: 'ReTitleAjax.php?classid='+classid+'&id='+id+'&title='+tit,
- dataType:"json",
- cache: false,
- error: function(){
- alert("检测失败,请重试");
- },
- success: function(data){
- if (data==1){
- alert('重复标题');
- }
- if (data==0){
- //alert('可以添加信息');
- console.log("可以添加信息");
- }
- }
- });
- }
- </script>
接着新建一个php文件,保存在 /e/admin/ReTitleAjax.php ,代码如下
折叠PHP 代码
- define('EmpireCMSAdmin','1');
- require("../class/connect.php");
- require("../class/db_sql.php");
- require("../class/functions.php");
- require LoadLang("pub/fun.php");
- require("../data/dbcache/class.php");
- $link=db_connect();
- $empire=new mysqlquery();
- $editor=1;
- //验证用户
- $lur=is_login();
- $logininid=$lur['userid'];
- $loginin=$lur['username'];
- $loginrnd=$lur['rnd'];
- $loginlevel=$lur['groupid'];
- $loginadminstyleid=$lur['adminstyleid'];
- $classid=(int)$_GET['classid'];
- $id=(int)$_GET['id'];
- $title=AddAddsData($_GET['title']);
- $where='';
- if($id)
- {
- $where=' and id<>'.$id;
- }
- //已审核
- $num=$empire->gettotal("select count(*) as total from {$dbtbpre}ecms_".$class_r[$classid][tbname]." where title='".addslashes($title)."'".$where." limit 1");
- //未审核
- if(emptyempty($num))
- {
- $num=$empire->gettotal("select count(*) as total from {$dbtbpre}ecms_".$class_r[$classid][tbname]."_check where title='".addslashes($title)."'".$where." limit 1");
- }
- echo json_encode($num);
上面是采用post查询返回json结果的方式来实现查重,我们还可以通过get方式,js函数如下:
折叠JavaScript 代码
- <script type="text/javascript">
- function checkTitle()
- {
- var classid='<?=$_GET[classid]?>';
- var id='<?=$_GET[id]?>';
- var tit=document.add.title.value;
- var answerurl='ReTitleAjax.php';
- $.get(answerurl+"?classid="+classid+'<?=$ecms_hashur['ehref']?>&title='+tit, function(data){
- if(data){
- if(data==1){
- $("#titletips").html("<font color='red'>已经存在此名称,请检查是否已经添加过</font>");
- }
- else{
- $("#titletips").html("<font color='green'>可以添加信息</font>");
- }
- return false;
- }
- else{
- $("#titletips").html("<font color='red'>检测失败,请重试</font>");
- }
- });
- }
- </script>
接着在title字段的input后放一个容器用于存储提示信息,例如<span id="titletips"></span>,还可以通过在出现重复时禁用其他input输入等方式来限制,这里只是给出原理,大家可在此基础上发挥。
注:如在帝国cms7.2版本开启金刚模式或刺猬模式下使用,需要在js函数中加入hash验证字符串,并在php处理文件中加入验证函数,否则会出现访问验证页面空白无法返回数据。