147 lines
5.4 KiB
PHP
147 lines
5.4 KiB
PHP
<?php
|
|
|
|
$mid = $system['form'];
|
|
$module = \Phpcmf\Service::L('cache')->get('module-'.$system['site'].'-'.$dirname);
|
|
// 判断是否存在
|
|
if (!isset($module['form'][$mid]) || !$module['form'][$mid]) {
|
|
return $this->_return($system['return'], "模块{$dirname}表单({$mid})不存在"); // 参数判断
|
|
}
|
|
|
|
$form = $module['form'][$mid];
|
|
$tableinfo = \Phpcmf\Service::L('cache')->get('table-'.$system['site']);
|
|
if (!$tableinfo) {
|
|
// 没有表结构缓存时返回空
|
|
return $this->_return($system['return'], '表结构缓存不存在');
|
|
}
|
|
|
|
if (isset($param['cid']) && $param['cid']) {
|
|
$table = \Phpcmf\Service::M()->dbprefix(dr_mform_ctable($dirname, $form['table'], $param['cid'], $system['site'])); // 模块主表
|
|
} else {
|
|
$table = \Phpcmf\Service::M()->dbprefix(dr_mform_table_prefix($dirname, $form['table'], $system['site'])); // 模块主表
|
|
}
|
|
|
|
if (!isset($tableinfo[$table])) {
|
|
return $this->_return($system['return'], '表('.$table.')结构缓存不存在');
|
|
}
|
|
|
|
// 默认条件
|
|
$where[] = array(
|
|
'adj' => '',
|
|
'name' => 'status',
|
|
'value' => 1
|
|
);
|
|
|
|
// 是否操作自定义where
|
|
if ($param['where']) {
|
|
$where[] = [
|
|
'adj' => 'SQL',
|
|
'value' => urldecode($param['where'])
|
|
];
|
|
unset($param['where']);
|
|
}
|
|
|
|
if ($system['catid']) {
|
|
$fwhere = [];
|
|
if (strpos($system['catid'], ',') !== FALSE) {
|
|
$temp = explode(',', $system['catid']);
|
|
if ($temp) {
|
|
$catids = [];
|
|
foreach ($temp as $i) {
|
|
$cat = dr_cat_value($system['site'], $module['mid'], $i);
|
|
$catids = $cat['child'] ? array_merge($catids, $cat['catids']) : array_merge($catids, array($i));
|
|
}
|
|
$catids && $fwhere[] = '`'.$table.'`.`catid` IN ('.implode(',', $catids).')';
|
|
}
|
|
unset($temp);
|
|
} else {
|
|
$cat = dr_cat_value($system['site'], $module['mid'], $system['catid']);
|
|
if ($cat['child']) {
|
|
$catids = explode(',', $cat['childids']);
|
|
$fwhere[] = '`'.$table.'`.`catid` IN ('.$cat['childids'].')';
|
|
} else {
|
|
$fwhere[] = '`'.$table.'`.`catid` = '.(int)$system['catid'];
|
|
$catids = [$system['catid']];
|
|
}
|
|
}
|
|
|
|
$fwhere && $where[] = [
|
|
'adj' => 'SQL',
|
|
'value' => urldecode(count($fwhere) == 1 ? $fwhere[0] : '('.implode(' OR ', $fwhere).')')
|
|
];
|
|
unset($fwhere);
|
|
unset($catids);
|
|
}
|
|
|
|
$fields = $form['fields'];
|
|
$system['order'] = !$system['order'] ? 'inputtime_desc' : $system['order']; // 默认排序参数
|
|
|
|
$where = $this->_set_where_field_prefix($where, $tableinfo[$table], $table, $fields); // 给条件字段加上表前缀
|
|
$system['field'] = $this->_set_select_field_prefix($system['field'], $tableinfo[$table], $table); // 给显示字段加上表前缀
|
|
$system['order'] = $this->_set_order_field_prefix($system['order'], $tableinfo[$table], $table); // 给排序字段加上表前缀
|
|
|
|
// 多表组合排序
|
|
$_order = [];
|
|
$_order[$table] = $tableinfo[$table];
|
|
|
|
$sql_from = $table; // sql的from子句
|
|
// 关联表
|
|
if ($system['join'] && $system['on']) {
|
|
$rt = $this->_join_table($table, $system, $where, $_order, $sql_from);
|
|
if (!$rt['code']) {
|
|
return $this->_return($system['return'], $rt['msg']);
|
|
}
|
|
list($system, $where, $_order, $sql_from) = $rt['data'];
|
|
}
|
|
|
|
$total = 0;
|
|
$fields = $form['field']; // 主表的字段
|
|
$sql_where = $this->_get_where($where); // sql的where子句
|
|
$sql_limit = $pages = '';
|
|
|
|
// 统计标签
|
|
if ($this->_return_sql) {
|
|
$sql = "SELECT _XUNRUICMS_RT_ FROM $sql_from ".($sql_where ? "WHERE $sql_where" : "")." ORDER BY NULL";
|
|
} else {
|
|
if ($system['page']) {
|
|
$page = $this->_get_page_id($system['page']);
|
|
$pagesize = (int)$system['pagesize'];
|
|
$pagesize = $pagesize ? $pagesize : 10;
|
|
$sql = "SELECT count(*) as c FROM $sql_from " . ($sql_where ? "WHERE $sql_where" : "") . " ORDER BY NULL";
|
|
$row = $this->_query($sql, $system, FALSE);
|
|
$total = (int)$row['c'];
|
|
// 没有数据时返回空
|
|
if (!$total) {
|
|
return $this->_return($system['return'], '没有查询到内容', $sql, 0);
|
|
}
|
|
$sql_limit = 'LIMIT ' . $pagesize * ($page - 1) . ',' . $pagesize;
|
|
$pages = $this->_get_pagination($system['urlrule'], $pagesize, $total, $system['pagefile']);
|
|
} elseif ($system['num']) {
|
|
$sql_limit = "LIMIT {$system['num']}";
|
|
}
|
|
$system['order'] = $this->_set_orders_field_prefix($system['order'], $_order); // 给排序字段加上表前缀
|
|
$sql = "SELECT " . $this->_get_select_field($system['field'] ? $system['field'] : "*") . " FROM $sql_from " . ($sql_where ? "WHERE $sql_where" : "") . " " . ($system['order'] ? "ORDER BY {$system['order']}" : "") . " $sql_limit";
|
|
}
|
|
|
|
$data = $this->_query($sql, $system);
|
|
|
|
if (is_array($data) && $data) {
|
|
// 表的系统字段
|
|
$fields['inputtime'] = array('fieldtype' => 'Date');
|
|
$dfield = \Phpcmf\Service::L('Field')->app($dirname);
|
|
foreach ($data as $i => $t) {
|
|
$data[$i] = $dfield->format_value($fields, $t, 1);
|
|
}
|
|
|
|
// 存储缓存
|
|
$system['cache'] && $this->_save_cache_data($cache_name, [
|
|
'data' => $data,
|
|
'sql' => $sql,
|
|
'total' => $total,
|
|
'pages' => $pages,
|
|
'pagesize' => $pagesize,
|
|
'page_used' => $this->_page_used,
|
|
'page_urlrule' => $this->_page_urlrule,
|
|
], $system['cache']);
|
|
}
|
|
|
|
return $this->_return($system['return'], $data, $sql, $total, $pages, $pagesize); |