phpcms给text单行文本字段增加是否唯一校验

在给模型增加单文本字段的时候有个选项:值是否唯一

虽然我们设置了,新增保存的时候确实也提示了但是我们没法第一时间知道是不是重复了,并且修改的时候,是不校验的,这就坑了,所以改造了一下,找到
phpcmsmodulescontentfieldstextform.inc.php找到
  1. return '<input type="text" name="info['.$field.']" id="'.$field.'" size="'.$size.'" value="'.$value.'" class="input-text" '.$formattribute.' '.$css.'>'
改成:
  1. $str = '<input type="text" name="info['.$field.']" id="'.$field.'" size="'.$size.'" value="'.$value.'" class="input-text" '.$formattribute.' '.$css.'>'
  2.         if($isunique){ 
  3.             $str = '<input type="text" name="info['.$field.']" id="'.$field.'" size="'.$size.'" value="'.$value.'" onblur="$.get('?m=content&c=content&a=public_check_field&catid='.$this->catid.'&id='.$this->id.'&field='.$field.'&issystem='.$issystem.'&sid='+Math.random()*5, {data:$('#'.$field.'').val()}, function(data){if(data=='1') {$('#'.$field.'').css('background','#fe6b5f');$('#tips_'.$field.'').html('<font color=red>重复了</font>');$(':submit').attr('disabled', true);} else{$('#'.$field.'').css('background','#fff');$('#tips_'.$field.'').html('');$(':submit').attr('disabled', false);}})"  class="input-text" '.$formattribute.' '.$css.'> <span id="tips_'.$field.'"></span>'
  4.         } 
  5.         return $str; 
主要就是增加一行,如果设置了值唯一,则自动触发一个ajax来判断,然后找到:

phpcmsmodulescontentcontent.php最下边新增方法:
  1. /** 
  2.      * 检查字段是否重复 
  3.      */ 
  4.     public function public_check_field() { 
  5.         if($_GET['data']=='' || $_GET['field']=='' || (!$_GET['catid'])) return ''
  6.         $catid = intval($_GET['catid']); 
  7.         $id = intval($_GET['id']); 
  8.         $field = $_GET['field']; 
  9.         $data = $_GET['data']; 
  10.         $issystem = $_GET['issystem']; 
  11.         $modelid = $this->categorys[$catid]['modelid']; 
  12.         $this->db->set_model($modelid); 
  13.         if(!$issystem){ 
  14.             $this->db->table_name = $this->db->table_name . "_data";//引入附表 
  15.         } 
  16.         $sql = "$field = '$data'"
  17.         if(!empty($id)){ 
  18.             $sql .= " AND id <> '$id'"
  19.         } 
  20.         $r = $this->db->get_one($sql); 
  21.         if($r) { 
  22.             exit('1'); 
  23.         } else { 
  24.             exit('0'); 
  25.         } 
  26.     } 

更新缓存,即可正常判断,效果如图:




【缺点】如果设置了多个字段都是设置是否唯一,如果多个字段同时提示“重复了”,当修改第一个字段为正常的时候,这时候按钮可以正常提交了,也就造成后续字段虽然重复了,但是仍然可以提交的问题,所以建议不要设置太多



本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com