Files

985 lines
33 KiB
PHP

<?php namespace Phpcmf\Model;
/**
* https://www.besyun.com
* BESCMS
* 本文件是框架系统文件,二次开发时不可以修改本文件,可以通过继承类方法来重写此文件
**/
// 字段操作表
class Field extends \Phpcmf\Model {
public $data;
public $func;
public $relatedid;
public $relatedname;
public $_table_field = [];
/**
* 字段排序
**/
public function list_sort($field) {
if (!$field) {
return;
}
// 当displayorder有值时,按displayorder小到大排序,否则按id小到大排序
$dp = 0;
foreach ($field as $i => $t) {
$dp+= $t['displayorder'];
}
// 优化后的写法
if (!$dp) {
return $field;
}
return dr_array_sort($field, 'displayorder', 'asc');;
}
/**
* 通过字段来查询表名称
**/
public function get_table_name($siteid, $field) {
$table = '';
list($case_name, $a) = explode('-', $field['relatedname']);
if (function_exists('myfield_tablename_'.$case_name)) {
$table = call_user_func_array('myfield_tablename_'.$case_name, [
$field,
$siteid,
$this->relatedname,
$this->relatedid
]);
} else {
switch ($case_name) {
case 'form':
// _网站表单 form-站点id, 表单id
list($a, $siteid) = explode('-', $this->relatedname);
$data = $this->table($siteid.'_form')->get($this->relatedid);
if (!$data) {
return;
}
$table = $field['ismain'] ? $siteid.'_form_'.$data['table'] : $siteid.'_form_'.$data['table'].'_data_{tableid}';
break;
case 'tag':
// _网站tag
$table = $field['relatedid'].'_tag';
break;
case 'linkage':
// 联动菜单
$table = 'linkage_data_'.$field['relatedid'];
break;
case 'member':
// _用户主表
$table = 'member_data';
break;
case 'navigator':
// _导航链接
$table = $field['relatedid'].'_navigator';
break;
case 'order':
// 订单插件
$table = $field['relatedid'].'_order';
break;
case 'page':
// 网站单页
$table = $field['relatedid'].'_order';
break;
case 'table':
// 任意表
return $a;
break;
case 'module':
// 模块字段
$data = \Phpcmf\Service::M()->table('module')->get($field['relatedid']);
if ($data) {
$table = $field['ismain'] ? '{siteid}_'.$data['dirname'] : '{siteid}_'.$data['dirname'].'_data_{tableid}';
}
break;
case 'mform':
// 模块表单
$data = \Phpcmf\Service::M()->table('module_form')->get($field['relatedid']);
if (!$data) {
$table = $field['ismain'] ? '{siteid}_'.$a.'_form_'.$data['table'] : '{siteid}_'.$a.'_form_'.$data['table'].'_data_{tableid}';
}
break;
case 'category':
// 栏目自定义字段
$table = $siteid.'_'.$a.'_category';
break;
default:
if (strpos($field['relatedname'], 'comment-module') !== false) {
// 模块评论字段
list($a, $b, $module) = explode('-', $field['relatedname']);
$cache = \Phpcmf\Service::L('cache')->get('module-' . SITE_ID . '-' . $module);
if (!$cache) {
$table = $siteid . '_' . $cache['dirname'] . '_comment';
}
} elseif (strpos($field['relatedname'], 'comment-mform') !== false) {
// 模块表单评论字段
list($a, $b, $module, $fid) = explode('-', $field['relatedname']);
$cache = \Phpcmf\Service::L('cache')->get('module-'.SITE_ID.'-'.$module);
if (!$cache) {
$table = $siteid.'_'.$cache['dirname'].'_form_'.$fid.'_comment';
}
} elseif (strpos($field['relatedname'], 'comment-form') !== false) {
// 网站评论字段
list($a, $b, $fid) = explode('-', $field['relatedname']);
$cache = \Phpcmf\Service::L('cache')->get('form-'.$field['relatedid'], $fid);
if (!$cache) {
$table = $siteid.'_form_'.$cache['table'].'_comment';
}
} else {
// 识别栏目模型字段
list($module, $s) = explode('-', $field['relatedname']);
$cache = \Phpcmf\Service::L('cache')->get('module-'.$s.'-'.$module);
if ($cache) {
$data = dr_cat_value($module, $field['relatedid']);
if ($data) {
if ($module == 'share') {
if ($data['tid'] != 1) {
} else {
$table = dr_module_table_prefix($data['mid']).'_category_data';
}
} else {
$table = dr_module_table_prefix($module).'_category_data';
}
}
}
}
break;
}
}
return str_replace('{siteid}', $siteid, $table);
}
/**
* 全部字段
**/
public function get_all_field() {
if (!$this->relatedname) {
return null;
}
$data = $this->db->table('field')
->where('relatedid', $this->relatedid)
->where('relatedname', $this->relatedname)
->orderBy('disabled ASC,displayorder ASC,id ASC')
->get()
->getResultArray();
if (!$data) {
return null;
}
$rt = [];
foreach ($data as $i => $t) {
$t['spacer'] = '';
$t['setting'] = dr_string2array($t['setting']);
$rt[$t['id']] = $t;
}
list($case_name, $a) = explode('-', $this->relatedname);
if ($case_name == 'module') {
// 模块字段时,加载栏目模型字段
$module = \Phpcmf\Service::M()->table('module')->get($this->relatedid);
if ($module) {
$like = ['catmodule-'.$module['dirname']];
if ($module['share']) {
$like[] = 'catmodule-share';
}
$field = \Phpcmf\Service::M()->db->table('field')
->where('ismain', 1)
->where('disabled', 0)
->whereIn('relatedname', $like)
->orderBy('displayorder ASC, id ASC')->get()->getResultArray();
if ($field) {
foreach ($field as $t) {
$t['spacer'] = '';
$t['setting'] = dr_string2array($t['setting']);
$rt[$t['id']] = $t;
}
}
}
}
return $rt;
}
/**
* 储存任意表的自定义字段
**/
public function save_mytable_field($table, $fields, $siteid = 0) {
if (!$table || !$fields) {
return;
}
foreach ($fields as $field) {
if ($this->db->table('field')
->where('fieldname', $field['fieldname'])
->where('relatedid', $siteid)
->where('relatedname', 'table-'.$table)->countAllResults()) {
return;
}
$this->db->table('field')->insert(array(
'name' => (string)($field['name'] ? $field['name'] : $field['textname']),
'ismain' => (int)$field['ismain'],
'setting' => dr_array2string($field['setting']),
'issystem' => isset($field['issystem']) ? (int)$field['issystem'] : 1,
'ismember' => isset($field['ismember']) ? (int)$field['ismember'] : 1,
'disabled' => isset($field['disabled']) ? (int)$field['disabled'] : 0,
'fieldname' => $field['fieldname'],
'fieldtype' => $field['fieldtype'],
'relatedid' => $siteid,
'relatedname' => 'table-'.$table,
'displayorder' => (int)$field['displayorder'],
));
}
}
/**
* 获取任意表的自定义字段
**/
public function get_mytable_field($table, $siteid = 0) {
$name = 'my-table-'.$table;
$value = \Phpcmf\Service::L('cache')->get_data($name);
if (IS_ADMIN || !$value) {
$field = $this->db->table('field')
->where('disabled', 0)
->where('relatedid', $siteid)
->where('relatedname', 'table-'.$table)
->orderBy('displayorder ASC,id ASC')
->get()
->getResultArray();
if ($field) {
foreach ($field as $t) {
$t['setting'] = dr_string2array($t['setting']);
$value[$t['fieldname']] = $t;
}
}
\Phpcmf\Service::L('cache')->set_data($name, $value);
}
return $value;
}
/**
* 获取网站信息的自定义字段
**/
public function get_mysite_field($siteid = SITE_ID) {
$name = 'my-site-'.$siteid;
$value = \Phpcmf\Service::L('cache')->get_data($name);
if (IS_ADMIN || !$value) {
$field = $this->db->table('field')
->where('disabled', 0)
->where('relatedid', $siteid)
->where('relatedname', 'site')
->orderBy('displayorder ASC,id ASC')
->get()
->getResultArray();
if ($field) {
foreach ($field as $t) {
$t['setting'] = dr_string2array($t['setting']);
$value[$t['fieldname']] = $t;
}
}
\Phpcmf\Service::L('cache')->set_data($name, $value);
}
return $value;
}
/**
* 删除字段
**/
public function delete_field($ids) {
foreach ($ids as $id) {
$id = intval($id);
$data = $this->table('field')->get($id);
if (!$data) {
return dr_return_data(0, dr_lang('字段不存在(id:%s)', $id));
} elseif ($data['issystem']) {
return dr_return_data(0, dr_lang('系统字段不允许删除(id:%s)', $id));
}
$rt = $this->table('field')->delete($id);
if (!$rt['code']) {
return dr_return_data(0, $rt['msg']);
}
// 删除表中数据
$field = \Phpcmf\Service::L('field')->get($data['fieldtype']);
if ($field) {
// 非系统字段才支持删除
$sql = $field->drop_sql($data['fieldname']);
// 需要分别更新各站点
$sql && $this->update_table($sql, $data['ismain']);
}
}
return dr_return_data(1, '');
}
/**
* 添加字段
*
* @param array $data
* @param object $field
* @return void
*/
public function add($data, $field, $is_create = 1) {
// 验证字段上限
/*
if ($this->_check_table_name) {
$max = 500;
foreach ($this->_check_table_name as $t) {
if (dr_count($this->db->getFieldNames($t)) > $max) {
return dr_return_data(0, dr_lang('数据表[%s]字段个数已经达到上限(%s)', dr_count($this->db->getFieldNames($t)), $max));
}
}
}*/
if ($is_create) {
// 先读取sql语句
$sql = $field->create_sql($data['fieldname'], $data['setting']['option'], dr_safe_filename($data['name']));
} else {
$sql = '';
}
// 当为编辑器类型时,关闭xss过滤
//$data['fieldtype'] == 'Ueditor' && $data['setting']['validate']['xss'] = 1;
$data['ismain'] = (int)$data['ismain'];
$data['setting'] = dr_array2string($data['setting']);
$data['issystem'] = 0;
$data['isedit'] = 0;
$data['issearch'] = (int)$data['issearch'];
$data['ismember'] = (int)$data['ismember'];
$data['disabled'] = (int)$data['disabled'];
$data['relatedid'] = (int)$this->relatedid;
$data['relatedname'] = (string)$this->relatedname;
$data['displayorder'] = (int)$data['displayorder'];
// 入库字段表
$rt = $this->table('field')->insert($data);
// 执行数据库语句
if ($rt['code'] && $sql) {
$this->_table_field = [];
$this->update_table($sql, $data['ismain']);
// 验证字段是否上传成功
$this->db->resetDataCache();// 清除缓存,影响字段存在的重复
if ($this->_table_field && $yz = $field->test_sql($this->_table_field, $data['fieldname'])) {
// 删除本字段
$this->table('field')->delete($rt['code']);
return dr_return_data(0, dr_lang('字段创建失败: %s', $yz));
}
}
return $rt;
}
/**
* 修改字段
*
* @param array $_data 旧数据
* @param array $data 新数据
* @param string $sql 执行该操作的sql语句
* @return string
*/
public function edit($_data, $data, $sql) {
if (!$_data || !$data) {
return dr_return_data(0, dr_lang('参数不完整'));
}
// 如果字段类型、长度变化时,分别更新各站点
($data['setting']['option']['fieldtype'] != $_data['setting']['option']['fieldtype']
|| $data['setting']['option']['fieldlength'] != $_data['setting']['option']['fieldlength'])
&& $this->update_table($sql, $_data['ismain']);
// 判断关联字段权限
if (in_array($data['fieldtype'], ['Merge', 'Group'])) {
$setting = dr_string2array($data['setting']);
if ($setting['show_admin']) {
if (preg_match_all('/\{(.+)\}/U', $setting['option']['value'], $value)) {
foreach ($value[1] as $v) {
$gl = $this->table('field')
->where('fieldname', $v)
->where('relatedid', $this->relatedid)
->where('relatedname', $this->relatedname)
->getRow();
if (!$gl) {
return dr_return_data(0, dr_lang('关联字段【%s】未定义', $v));
}
$gl_setting = dr_string2array($gl['setting']);
if (!$gl_setting['show_admin']) {
$gl_setting['show_admin'] = $setting['show_admin'];
$this->table('field')->update($gl['id'], [
'setting' => dr_array2string($gl_setting),
]);
}
}
}
}
}
// 自定义属性不变
if (isset($_data['setting']['diy'])) {
$data['setting']['diy'] = $_data['setting']['diy'];
}
$data['setting'] = dr_array2string($data['setting']);
$data['issearch'] = (int)$data['issearch'];
$data['ismember'] = (int)$data['ismember'];
$data['disabled'] = (int)$data['disabled'];
// 更新字段表
return $this->table('field')->update($_data['id'], $data);
}
/**
* 判断表字段否存在
*/
public function _field_exitsts($id, $name, $table, $siteid = 0) {
if (!$table) {
return 0;
}
return $this->db->fieldExists($name, $table);
}
/**
* 是否是系统保留字段
*/
public function is_sys_field($name) {
if (!$name) {
return 1;
}
return in_array($name, [
'id',
'cat', 'category',
'top', 'content_page',
'pageid', 'params', 'page', 'pages',
'parent', 'urlrule', 'member', 'module',
'tags', 'tag', 'prev_page', 'app',
'next_page', 'fstatus', 'old', 'mid', 'groupid', 'related', 'kws', 'more'
]);
}
//--------------------------------------------------------------------
/**
* 分别更新各站点的表结构
*
* @param string $sql 执行该操作的sql语句
* @param intval $ismain 是否主表
* @return void
*/
public function update_table($sql, $ismain) {
if (!$sql || !$this->func) {
return null;
}
if (method_exists($this, '_sql_'.$this->func)) {
return call_user_func_array(array($this, '_sql_'.$this->func), array($sql, $ismain));
} elseif (function_exists('myfield_sql_'.$this->func)) {
$rt = call_user_func_array('myfield_sql_'.$this->func, array($sql, $ismain, $this->data));
if ($rt) {
$this->_table_field = dr_array2array($this->_table_field, $rt);
}
}
}
/**
* 判断同表字段否存在
*
* @param string $name 字段名称
* @param intval $int 字段id
* @return int
*/
public function exitsts($name) {
if (!$name) {
return 1;
}
if (method_exists($this, '_field_'.$this->func)) {
return call_user_func_array(array($this, '_field_'.$this->func), array($name));
} elseif (function_exists('myfield_field_'.$this->func)) {
return call_user_func_array('myfield_field_'.$this->func, array($name, $this->data));
}
return 1;
}
//--------------------------------------------------------------------
// 栏目模型字段
protected function _sql_category_data($sql, $ismain) {
$table = $this->dbprefix(dr_module_table_prefix($this->data['dirname']).'_category_data'); // 主表名称
if (!$this->db->tableExists($table)) {
return;
}
// 更新主表 格式: 站点id_名称
$this->db->simpleQuery(str_replace('{tablename}', $table, $sql));
$this->_table_field[] = $table;
}
// 字段是否存在
protected function _field_category_data($name) {
// 模块主表
$table = $this->dbprefix(dr_module_table_prefix($this->data['dirname']));
$rt = $this->_field_exitsts('id', $name, $table, SITE_ID);
if ($rt) {
return 1;
}
// 模块附表
$rt = $this->_field_exitsts('id', $name, $table.'_data_0', SITE_ID);
if ($rt) {
return 1;
}
// 栏目表
$rt = $this->_field_exitsts('id', $name, $table.'_category', SITE_ID);
if ($rt) {
return 1;
}
// 栏目模型主表
$table = $this->dbprefix(dr_module_table_prefix($this->data['dirname']).'_category_data');
$rt = $this->_field_exitsts('id', $name, $table, SITE_ID);
if ($rt) {
return 1;
}
return 0;
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// 评论自定义字段
protected function _sql_comment($sql, $ismain) {
// 更新站点模块
foreach (\Phpcmf\Service::C()->site_info as $sid => $v) {
$table = $this->dbprefix($sid.'_'.$this->data.'_comment');
if (!$this->db->tableExists($table)) {
return;
}
$this->db->simpleQuery(str_replace('{tablename}', $table, $sql));
$this->_table_field[] = $table;
}
}
// 字段是否存在
protected function _field_comment($name) {
// 主表
$table = $this->dbprefix(dr_module_table_prefix($this->data).'_comment');
$rt = $this->_field_exitsts('id', $name, $table, SITE_ID);
if ($rt) {
return 1;
}
return 0;
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// 栏目字段
protected function _sql_category($sql, $ismain) {
// 更新站点模块
foreach (\Phpcmf\Service::C()->site_info as $sid => $v) {
$table = $this->dbprefix($sid.'_'.$this->data.'_category');
if (!$this->db->tableExists($table)) {
return;
}
$this->db->simpleQuery(str_replace('{tablename}', $table, $sql));
$this->_table_field[] = $table;
}
}
// 字段是否存在
protected function _field_category($name) {
// 主表
$table = $this->dbprefix(dr_module_table_prefix($this->data).'_category');
$rt = $this->_field_exitsts('id', $name, $table, SITE_ID);
if ($rt) {
return 1;
}
return 0;
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// 会员字段
protected function _sql_member($sql, $ismain) {
$this->db->simpleQuery(str_replace('{tablename}', $this->dbprefix('member_data'), $sql));
$this->_table_field[] = $this->dbprefix('member_data');
}
// 字段是否存在
protected function _field_member($name) {
// 保留
if (in_array($name, ['role', 'uid', 'authid', 'adminid', 'tableid', 'group', 'groupid', 'levelid'])) {
return 1;
}
// 主表
$table = $this->dbprefix('member_data');
$rt = $this->_field_exitsts('id', $name, $table, SITE_ID);
if ($rt) {
return 1;
}
return 0;
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// 网站表单字段
protected function _sql_form($sql, $ismain) {
$table = $this->dbprefix(SITE_ID.'_form_'.$this->data['table']); // 主表名称
if (!$this->db->tableExists($table)) {
return;
}
if ($ismain) {
// 更新主表 格式: 站点id_名称
$this->db->simpleQuery(str_replace('{tablename}', $table, $sql));
$this->_table_field[] = $table;
} else {
for ($i = 0; $i < 200; $i ++) {
if (!$this->db->tableExists($table.'_data_'.$i)) {
break;
}
$this->db->simpleQuery(str_replace('{tablename}', $table.'_data_'.$i, $sql)); //执行更新语句
$this->_table_field[] = $table.'_data_'.$i;
}
}
}
// 字段是否存在
protected function _field_form($name) {
// 主表
$table = $this->dbprefix(SITE_ID.'_form_'.$this->data['table']);
$rt = $this->_field_exitsts('id', $name, $table, SITE_ID);
if ($rt) {
return 1;
}
// 附表
$table.'_data_0';
$rt = $this->_field_exitsts('id', $name, $table.'_data_0', SITE_ID);
if ($rt) {
return 1;
}
return 0;
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// 联动字段
protected function _sql_linkage($sql, $ismain) {
$table = $this->dbprefix('linkage_data_'.$this->relatedid);
if (!$this->db->tableExists($table)) {
return;
}
$this->db->simpleQuery(str_replace('{tablename}', $table, $sql));
$this->_table_field[] = $table;
}
// 字段是否存在
protected function _field_linkage($name) {
// 主表
$table = $this->dbprefix('linkage_data_'.$this->relatedid);
$rt = $this->_field_exitsts('id', $name, $table, $this->relatedid);
if ($rt) {
return 1;
}
return 0;
}
//--------------------------------------------------------------------
// Tag字段
protected function _sql_tag($sql, $ismain) {
$table = $this->dbprefix($this->relatedid.'_tag');
if (!$this->db->tableExists($table)) {
return;
}
$this->db->simpleQuery(str_replace('{tablename}', $table, $sql));
$this->_table_field[] = $table;
}
// 字段是否存在
protected function _field_tag($name) {
// 主表
$table = $this->dbprefix($this->relatedid.'_tag');
$rt = $this->_field_exitsts('id', $name, $table, $this->relatedid);
if ($rt) {
return 1;
}
return 0;
}
//--------------------------------------------------------------------//--------------------------------------------------------------------
// navigator字段
protected function _sql_navigator($sql, $ismain) {
$table = $this->dbprefix($this->relatedid.'_navigator');
if (!$this->db->tableExists($table)) {
return;
}
$this->db->simpleQuery(str_replace('{tablename}', $table, $sql));
$this->_table_field[] = $table;
}
// 字段是否存在
protected function _field_navigator($name) {
// 主表
$table = $this->dbprefix($this->relatedid.'_navigator');
$rt = $this->_field_exitsts('id', $name, $table, $this->relatedid);
if ($rt) {
return 1;
}
return 0;
}
//--------------------------------------------------------------------
// 订单插件字段
protected function _sql_order($sql, $ismain) {
$table = $this->dbprefix($this->relatedid.'_order');
if (!$this->db->tableExists($table)) {
return;
}
$this->db->simpleQuery(str_replace('{tablename}', $table, $sql));
$this->_table_field[] = $table;
}
// 字段是否存在
protected function _field_order($name) {
// 主表
$table = $this->dbprefix($this->relatedid.'_order');
$rt = $this->_field_exitsts('id', $name, $table, $this->relatedid);
if ($rt) {
return 1;
}
return 0;
}
//--------------------------------------------------------------------
// 单页字段
protected function _sql_page($sql, $ismain) {
$table = $this->dbprefix($this->relatedid.'_page');
if (!$this->db->tableExists($table)) {
return;
}
$this->db->simpleQuery(str_replace('{tablename}', $table, $sql));
$this->_table_field[] = $table;
}
// 字段是否存在
protected function _field_page($name) {
// 主表
$table = $this->dbprefix($this->relatedid.'_page');
$rt = $this->_field_exitsts('id', $name, $table, $this->relatedid);
if ($rt) {
return 1;
}
return 0;
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// 模块字段
protected function _sql_module($sql, $ismain) {
// 更新站点模块
foreach (\Phpcmf\Service::C()->site_info as $sid => $v) {
$table = $this->dbprefix($sid.'_'.$this->data['dirname']); // 主表名称
if (!$this->db->tableExists($table)) {
continue;
}
if ($ismain) {
// 更新主表 格式: 站点id_名称
$this->db->simpleQuery(str_replace('{tablename}', $table, $sql));
$this->_table_field[] = $table;
} else {
// 更新副表 格式: 名称_站点id_data_副表id
for ($i = 0; $i < 200; $i ++) {
if (!$this->db->tableExists($table.'_data_'.$i)) {
break;
}
$this->db->simpleQuery(str_replace('{tablename}', $table.'_data_'.$i, $sql)); //执行更新语句
$this->_table_field[] = $table.'_data_'.$i;
}
}
}
}
// 字段是否存在
protected function _field_module($name) {
// 保留字段
if (in_array($name, [
'cat', 'category', 'name',
'top', 'content_page',
'pageid', 'params', 'page', 'pages',
'parent', 'urlrule', 'member',
'tags', 'tag', 'prev_page',
'next_page', 'fstatus', 'old', 'mid', 'groupid', 'related', 'kws', 'more'
])) {
return 1;
}
// 主表
$table = $this->dbprefix(dr_module_table_prefix($this->data['dirname']));
$rt = $this->_field_exitsts('id', $name, $table, SITE_ID);
if ($rt) {
return 1;
}
// 附表
$rt = $this->_field_exitsts('id', $name, $table.'_data_0', SITE_ID);
if ($rt) {
return 1;
}
// 栏目表
$rt = $this->_field_exitsts('id', $name, $table.'_category', SITE_ID);
if ($rt) {
return 1;
}
// 栏目模型表
$rt = $this->_field_exitsts('id', $name, $table.'_category_data', SITE_ID);
if ($rt) {
return 1;
}
return 0;
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// 模块表单字段
protected function _sql_mform($sql, $ismain) {
// 更新站点模块
foreach (\Phpcmf\Service::C()->site_info as $sid => $v) {
$table = $this->dbprefix($sid.'_'.$this->data['module'].'_form_'.$this->data['table']); // 主表名称
if (!$this->db->tableExists($table)) {
continue;
}
if ($ismain) {
// 更新主表 格式: 站点id_名称
$this->db->simpleQuery(str_replace('{tablename}', $table, $sql));
$this->_table_field[] = $table;
} else {
// 更新副表 格式: 名称_站点id_data_副表id
for ($i = 0; $i < 200; $i ++) {
if (!$this->db->tableExists($table.'_data_'.$i)) {
break;
}
$this->db->simpleQuery(str_replace('{tablename}', $table.'_data_'.$i, $sql)); //执行更新语句
$this->_table_field[] = $table.'_data_'.$i;
}
}
}
}
// 字段是否存在
protected function _field_mform($name) {
// 主表
$table = $this->dbprefix(dr_module_table_prefix($this->data['module']).'_form_'.$this->data['table']);
$rt = $this->_field_exitsts('id', $name, $table, $this->data['module'] == 'space' ? 0 : SITE_ID);
if ($rt) {
return 1;
}
// 附表
$rt = $this->_field_exitsts('id', $name, $table.'_data_0', $this->data['module'] == 'space' ? 0 : SITE_ID);
if ($rt) {
return 1;
}
return 0;
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// 任意表
protected function _sql_table($sql, $ismain) {
$table = $this->dbprefix($this->data);
if (!$this->db->tableExists($table)) {
return;
}
$this->db->simpleQuery(str_replace('{tablename}', $table, $sql));
$this->_table_field[] = $table;
}
// 字段是否存在
protected function _field_table($name) {
// 主表
$table = $this->dbprefix($this->data);
if (!$this->db->tableExists($table)) {
return;
}
$rt = $this->_field_exitsts('id', $name, $table, $this->relatedid);
if ($rt) {
return 1;
}
return 0;
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// 网站信息表
protected function _sql_site($sql, $ismain) {
return '';
}
// 网站信息表
protected function _field_site($name) {
// 保留字段
if (in_array($name, ['logo'])) {
return 1;
}
if ($this->table('field')
->where('fieldname', $name)
->where('relatedid', $this->relatedid)
->where('relatedname', $this->relatedname)->counts()) {
return 1;
}
return 0;
}
//--------------------------------------------------------------------
}