解决PHPCMS的字段无法修改的问题
2011-07-26
在 PHPCMS 后台新闻模型里面新建了两个字段,添加、修改内容一般没有问题。但是,如果在高级设置里面添加了“转向链接”,再返回来修改,发现自定义的两个字段无法修改,其它字段都可以修改。只要使用标题转向链接,很多字段都是没办法修改的,包括图片缩略图,关键字等等,更不用说是自定义字段了。这是什么原因呢?
解决办法很简单。
找到 include/fields/content_input.class.php的get()函数。
function get($data, $isimport = 0)
{
global $_roleid, $MODEL, $_groupid,$action,$G;
$this->isimport = $isimport;
if(!$G['allowpost']) showmessage('你所在的用户组没有发表权限');
$this->data = $data;
$info = array();
$debar_filed = array('catid','title','style','thumb','keywords','status','islink','description');
foreach($data as $field=>$value)
{
if($data['islink']==1 && !in_array($field,$debar_filed)) continue;
if(!isset($this->fields[$field]) || check_in($_roleid, $this->fields[$field]['unsetroleids']) || check_in($_groupid, $this->fields[$field]['unsetgroupids'])) continue;
$name = $this->fields[$field]['name'];
$minlength = $this->fields[$field]['minlength'];
$maxlength = $this->fields[$field]['maxlength'];
$pattern = $this->fields[$field]['pattern'];
$errortips = $this->fields[$field]['errortips'];
if(empty($errortips)) $errortips = "$name 不符合要求!";
$length = strlen($value);
if($minlength && $length < $minlength && !$isimport) showmessage("$name 不得少于 $minlength 个字符!");
if($maxlength && $length > $maxlength && !$isimport)
{
showmessage("$name 不得超过 $maxlength 个字符!");
}
else
{
str_cut($value, $maxlength);
}
if($pattern && $length && !preg_match($pattern, $value) && !$isimport) showmessage($errortips);
$checkunique_table = $this->fields[$field]['issystem'] ? DB_PRE.'content' : DB_PRE.'c_'.$MODEL[$this->modelid]['tablename'];
if($this->fields[$field]['isunique'] && $this->db->get_one("SELECT $field FROM $checkunique_table WHERE `$field`='$value' LIMIT 1") && $action != 'edit') showmessage("$name 的值不得重复!");
$func = $this->fields[$field]['formtype'];
if(method_exists($this, $func)) $value = $this->$func($field, $value);
if($this->fields[$field]['issystem']) $info['system'][$field] = $value;
else $info['model'][$field] = $value;
}
if($isimport) $info['system']['username'] = $data['username'];
return $info;
}
找到这么一句:
$debar_filed = array('catid','title','style','thumb','keywords','status','islink','description');
在里面加入你无法修改的字段名就行。
还有别忘了刷新模型的缓存文件,不刷新也可以,找到data/cache_model/content_input.class.php这个文件,也作和上面一样的修改就行。或者直接把这个文件删掉,重新生成一次文件就可以了。
问题解决。
