本文章解决问题如下:《内容关联类型字段,如果在编辑时候保存不在关联字段中的值》
应用场景:
假设 A模块中的一个 name_id 字段使用的是 B模块的内容关联
B模块现在 数据库有的数据ID(1,2,3,4)
A 模块name_id 的值为 :1,2
假设现在因为业务需要,需要自定义这个模块的值为,1,2,33,44
那么现在的系统会自动替换到 不在B模块中的值
那么修改文件:dayrui/Fcms/Field/Related.php
代码如下:
$value = @trim($value, ',');
if ($value && is_string($value)) {
$value_object_array = explode(",",$value);
$db = \Phpcmf\Service::M()->db->query('select id,title,url from '.\Phpcmf\Service::M()->dbprefix(SITE_ID.'_'.$module).' where id IN ('.$value.') order by instr("'.$value.'", id)');
$query = $db ? $db->getResultArray() : [];
if ($query) {
foreach ($query as $t) {
$id = $t['id'];
if(in_array($id,$value_object_array)){
$key = array_search($id,$value_object_array);
unset($value_object_array[$key]);
}
$value = '<a href="'.$t['url'].'" target="_blank">'.$t['title'].'</a>';
$str.= str_replace(array('{id}', '{value}', '\\'), array($id, $value, ''), $tpl);
}
foreach($value_object_array as $t){
$value = '<a href="#" target="_blank">未知自定义</a>';
$str.= str_replace(array('{id}', '{value}', '\\'), array($t, $value, ''), $tpl);
}
}else{
foreach($value_object_array as $t){
$value = '<a href="#" target="_blank">未知自定义</a>';
$str.= str_replace(array('{id}', '{value}', '\\'), array($t, $value, ''), $tpl);
}
}
}