虽然我们设置了,新增保存的时候确实也提示了但是我们没法第一时间知道是不是重复了,并且修改的时候,是不校验的,这就坑了,所以改造了一下,找到
phpcmsmodulescontentfieldstextform.inc.php找到
改成:
- return '<input type="text" name="info['.$field.']" id="'.$field.'" size="'.$size.'" value="'.$value.'" class="input-text" '.$formattribute.' '.$css.'>';
主要就是增加一行,如果设置了值唯一,则自动触发一个ajax来判断,然后找到:
- $str = '<input type="text" name="info['.$field.']" id="'.$field.'" size="'.$size.'" value="'.$value.'" class="input-text" '.$formattribute.' '.$css.'>';
- if($isunique){
- $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>';
- }
- return $str;
phpcmsmodulescontentcontent.php最下边新增方法:
- /**
- * 检查字段是否重复
- */
- public function public_check_field() {
- if($_GET['data']=='' || $_GET['field']=='' || (!$_GET['catid'])) return '';
- $catid = intval($_GET['catid']);
- $id = intval($_GET['id']);
- $field = $_GET['field'];
- $data = $_GET['data'];
- $issystem = $_GET['issystem'];
- $modelid = $this->categorys[$catid]['modelid'];
- $this->db->set_model($modelid);
- if(!$issystem){
- $this->db->table_name = $this->db->table_name . "_data";//引入附表
- }
- $sql = "$field = '$data'";
- if(!empty($id)){
- $sql .= " AND id <> '$id'";
- }
- $r = $this->db->get_one($sql);
- if($r) {
- exit('1');
- } else {
- exit('0');
- }
- }
更新缓存,即可正常判断,效果如图:
【缺点】如果设置了多个字段都是设置是否唯一,如果多个字段同时提示“重复了”,当修改第一个字段为正常的时候,这时候按钮可以正常提交了,也就造成后续字段虽然重复了,但是仍然可以提交的问题,所以建议不要设置太多