图片服务器上传Api接口
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

253 lines
8.2 KiB

<?php
/**
* +----------------------------------------------------------------------
* | CMS前台相关业务处理
* +----------------------------------------------------------------------
*/
namespace app\common\service;
use app\common\facade\MakeBuilder;
use app\common\model\Cate;
use think\facade\Config;
use think\facade\Db;
class Cms
{
/**
* 获取栏目信息
* @param string $cateId 栏目id
* @return array|null|\think\Model
*/
public function getCateInfo(string $cateId)
{
$cate = Cate::where('id', '=', $cateId)->find();
// 设置顶级栏目,当顶级栏目不存在的时候顶级栏目为本身
if ($cate) {
$cate->topid = $cate['parent_id'] ? $cate['parent_id'] : $cate['id'];
}
return $cate;
}
/**
* 更新内容的点击数
* @param string $id 内容id
* @param string $tableName 表名称(含前缀)
* @return bool
*/
public function addHits(string $id, string $tableName)
{
// 判断当前表是否存在hits字段
if ($this->_iset_field(Config::get('database.connections.mysql.prefix') . $tableName, 'hits')) {
Db::name($tableName)
->where('id', $id)
->inc('hits')
->update();
return true;
}
return false;
}
/**
* 获取内容的详细信息
* @param string $id
* @param string $tableName
*/
public function getInfo(string $id, string $tableName)
{
$modelName = $this->getModelName($tableName);
if (empty($modelName)) {
return false;
}
$model = '\app\common\model\\' . $modelName;
$info = $model::edit($id)->toArray();
// 获取字段信息
$info = $this->changeInfo($tableName, $info);
return $info;
}
/**
* 获取内容页面TDK
* @param $info 内容
* @param $cate 栏目
* @param $system 系统
* @return array
*/
public function getInfoTdk($info, $cate, $system)
{
$result = [];
$result['title'] = $cate['cate_name'] ?: $cate['catname']; // 标题
$result['keywords'] = $info['keywords'] ?: ($cate['keywords'] ?: $system['key']); // 关键词
$result['description'] = $info['description'] ? $info['description'] : ($cate['description'] ?: $system['des']); // 描述
return $result;
}
/**
* 获取内容页面模版
* @param $info 内容
* @param $cate 栏目
* @param $tableName 表名称
* @return mixed|string
*/
public function getInfoView($info, $cate, string $tableName)
{
return $info['template'] ? str_replace('.html', '', $info['template']) :
($cate['template_show'] ? str_replace('.html', '', $cate['template_show']) : $tableName . '_show');
}
/**
* 获取列表页面TDK
* @param $info 内容
* @param $cate 栏目
* @param $system 系统
* @return array
*/
public function getListTdk($cate, $system)
{
$result = [];
$result['title'] = $cate['title'] ?: $cate['cate_name']; // 标题
$result['keywords'] = $cate['keywords'] ?: $system['key']; // 关键词
$result['description'] = $cate['description'] ?: $system['des']; // 描述
return $result;
}
/**
* 获取列表页面模版
* @param $info 内容
* @param $cate 栏目
* @param $tableName 表名称
* @return mixed|string
*/
public function getListView($cate, string $tableName)
{
return $cate['template_list'] ? str_replace('.html', '', $cate['template_list']) : $tableName . '_list';
}
// ===================================================
/**
* 判断表中是否存在所选字段
* @param $table 表全称
* @param $field 字段名称
* @return mixed
*/
private function _iset_field($table, $field)
{
$fields = Db::getTableFields($table);
if (array_search($field, $fields) === false) {
return false;
} else {
return true;
}
}
/**
* 根据表名称查询模型名称
* @param string $tableName [表名称,不含前缀]
* @return mixed|string
*/
private function getModelName(string $tableName)
{
$module = \app\common\model\Module::where('table_name', $tableName)->find();
if ($module) {
return $module->model_name;
} else {
// 查询不到模块信息,直接尝试转换[需遵循ThinkPHP命名规范]
$tableName = explode('_', $tableName);
$result = '';
foreach ($tableName as $k => $v) {
$result .= ucfirst($v);
}
return $result;
}
}
/**
* 根据表名称查询模型ID
* @param string $tableName [表名称,不含前缀]
* @return mixed|string
*/
private function getModelId(string $tableName)
{
$module = \app\common\model\Module::where('table_name', $tableName)->find();
if ($module) {
return $module->id;
} else {
return 0;
}
}
/**
* 格式化详情页面的内容输出
* @param string $tableName
* @param array $info
* @return array
*/
private function changeInfo(string $tableName, array $info)
{
$fields = MakeBuilder::getFields($tableName);
foreach ($fields as &$field) {
// select等需要获取数据的字段
$options = MakeBuilder::getFieldOptions($field);
// 添加到返回数组中,注意form构建器和table构建器的不一致
if ($field['type'] == 'text') {
// 忽略
} elseif ($field['type'] == 'textarea' || $field['type'] == 'password') {
// 忽略
} elseif ($field['type'] == 'radio' || $field['type'] == 'checkbox') {
$info[$field['field']] = $this->changeOptionsValue($options, $info[$field['field']], false);
} elseif ($field['type'] == 'select' || $field['type'] == 'select2') {
if ($field['field'] !== 'cate_id') {
$info[$field['field']] = $this->changeOptionsValue($options, $info[$field['field']], false);
}
} elseif ($field['type'] == 'number') {
} elseif ($field['type'] == 'hidden') {
} elseif ($field['type'] == 'date' || $field['type'] == 'time' || $field['type'] == 'datetime') {
} elseif ($field['type'] == 'daterange') {
} elseif ($field['type'] == 'tag') {
if (!empty($info[$field['field']])) {
$tags = explode(',', $info[$field['field']]);
foreach ($tags as $k => $tag) {
$tags[$k] = [
'name' => $tag,
'url' => \think\facade\Route::buildUrl('index/tag', ['module' => $this->getModelId($tableName), 't' => $tag])->__toString(),
];
}
$info[$field['field']] = $tags;
}
} elseif ($field['type'] == 'images' || $field['type'] == 'files') {
$info[$field['field']] = json_decode($info[$field['field']], true);
} elseif ($field['type'] == 'editor') {
} elseif ($field['type'] == 'color') {
}
// Button
}
return $info;
}
/**
* 改变内容中有选项的值为可用数组
* @param array $options 选项
* @param string $value 当前值
* @param bool $type 返回类型(true array/false string)
* @return array/string
*/
private function changeOptionsValue(array $options = [], string $value = '', bool $type = true)
{
$result = [];
if ($value) {
$value = explode(',', $value);
foreach ($value as $k => $v) {
$result[] = $options[$v];
}
}
if ($type == false) {
$result = implode(" ", $result);
}
return $result;
}
}