模块二开mokuai

TSCMS模块开发教程

时间:2026-07-27 22:46 阅读:328 来源:腾石科技

TSCMS的模块开发完全使用Thinkphp的方法即可,没有任何封装和强制写法,只需要安装Thinkphp5.1的规范去走即可。

一、模块目录结构

一个标准的 TScms 模块包含以下目录:

application/
  └── {modulename}/          # 模块名称(小写英文)
      ├── controller/        # 控制器
      │   ├── Xxx.php        # 后台控制器(继承 Adminbase)
      │   ├── Index.php      # 前台控制器(继承 Indexbase)[可选]
      │   └── Api.php        # API 控制器(继承 Base)[可选]
      ├── model/             # 数据模型
      │   └── Xxx.php        # 模型文件
      ├── validate/          # 验证器 [可选]
      │   └── Xxx.php        # 验证器文件
      ├── taglib/            # 模板标签 [可选]
      │   └── TagXxx.php     # 标签解析类({ts:模块名})
      ├── view/              # 后台视图模板
      │   └── xxx/
      │       ├── index.html
      │       └── add.html
      ├── config/            # 模块配置文件 [可选]
      ├── install/           # 安装 SQL 脚本 [可选]
      │   └── install.sql
      ├── uninstall/         # 卸载 SQL 脚本 [可选]
      │   └── uninstall.sql
      └── ...                # 其他辅助代码

二、数据库表结构

务必了解的公共字段:

字段名类型说明
id / 模块IDint(11)主键,自增
statustinyint(1)状态:1=正常, 0=禁用/待审, -1=删除
listorderint(10)排序值(升序)
createtimeint(10)创建时间(Unix 时间戳)
updatetimeint(10)更新时间(Unix 时间戳)

模块注册表(tc_module):

字段说明
module模块标识(小写英文,如 swiper)
name模块中文名称
description模块描述
version版本号
settingJSON 格式的模块配置
status启用状态

权限菜单表(tc_menu)关键字段:

字段说明
id菜单/权限节点ID
parentid父菜单ID
app模块名(如 swiper)
controller控制器名
action方法名
name菜单名称
status1=启用(参与权限校验)
level层级,用于导航和权限树显示

💡 权限节点 = 后台菜单。角色授权时,权限树由 tc_menu 表中 status=1 的菜单生成。

三、快速开始:开发一个"公告"模块

步骤 1:创建模块目录

application/notice/
├── controller/
│   └── Notice.php
├── model/
│   └── Notice.php
├── validate/
│   └── Notice.php
├── view/
│   └── notice/
│       ├── index.html
│       ├── add.html
│       └── edit.html
└── taglib/
    └── TagNotice.php

步骤 2:创建数据表

CREATE TABLE `tc_notice` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL COMMENT '公告标题',
  `content` text COMMENT '公告内容',
  `status` tinyint(1) DEFAULT '1' COMMENT '状态',
  `listorder` int(10) DEFAULT '0' COMMENT '排序',
  `createtime` int(10) DEFAULT '0' COMMENT '创建时间',
  `updatetime` int(10) DEFAULT '0' COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

步骤 3:注册模块

向 tc_module 表插入记录:

INSERT INTO `tc_module` (`module`, `name`, `description`, `version`, `status`)
VALUES ('notice', '公告管理', '网站公告管理模块', '1.0', 1);

步骤 4:创建模型

namespace app\note\model;

use think\Model;

class Notice extends Model
{
    protected $table        = 'tc_notice';
    protected $pk           = 'id';
    protected $autoWriteTimestamp = true;
    protected $createTime   = 'createtime';
    protected $updateTime   = 'updatetime';

    /**
     * 分页列表
     */
    public function list s ($where = [], $page = 1, $limit = 15)
    {
        return $this->where($where)
            ->order('listorder ASC, id DESC')
            ->page($page, $limit)
            ->select();
    }

    /**
     * 新增
     */
    public function add ($data)
    {
        return self::create($data) ? true : false;
    }

    /**
     * 详情
     */
    public function detail($id)
    {
        return $this->where(['id' => $id])->find();
    }

步骤 5:创建后台控制器

namespace app\Notice\controller;

use app\common\controller\Adminbase;
use app\Notice\model\Notice as NoticeModel;

class Notice extends Adminbase
{
    protected $noNeedLogin = [];
    protected $noAuth = [];

    protected function initialize()
    {
        parent::initialize();
        $this->NoticeModel = new NoticeModel();
    }

    public function index()
    {
        if ($this->request->isAjax()) {
            $param = $this->request->param();
            $where = [];
            $page  = trim($param['page']) ?: 1;
            $limit = $param['limit'];

            $list  = $this->NoticeModel->lists($where, $page, $limit);
            $count = $this->NoticeModel->where($where)->count();

            return json([
                'code'  => 0,
                'msg'   => '',
                'count' => $count,
                'data'  => json_decode(json_encode($list)),
            ]);
        }
        return $this->fetch();
    }

    public function add()
    {
        if ($this->request->isPost()) {
            $data = $this->request->post();
            $result = $this->validate($data, 'app\note\validate\Notice.add');
            if (true !== $result) {
                return $this->error($result);
            }
            if ($this->NoticeModel->add($data)) {
                $this->insertLog('新增公告');
                return json(['code' => 1, 'msg' => '添加成功', 'data' => '', 'url' => '']);
            }
            return json(['code' => 0, 'msg' => '添加失败', 'data' => '', 'url' => '']);
        }
        return $this->fetch();
    }

    public function edit()
    {
        if ($this->request->isPost()) {
            $data = $this->request->post();
            $result = $this->validate($data, 'app\note\validate\Notice.edit');
            if (true !== $result) {
                return $this->error($result);
            }
            if ($this->NoticeModel->save($data, ['id' => $data['id']]) !== false) {
                $this->insertLog('编辑公告');
                return json(['code' => 1, 'msg' => '修改成功', 'data' => '', 'url' => '']);
            }
            return json(['code' => 0, 'msg' => '修改失败', 'data' => '', 'url' => '']);
        } else {
            $id   = $this->request->param('id/d', 0);
            $data = $this->NoticeModel->find($id);
            $this->assign('data', $data);
            return $this->fetch();
        }
    }

    public function del()
    {
        if ($this->request->isAjax()) {
            $ids = $this->request->param('id', null);
            if (empty($ids)) return $this->error('参数错误!');
            $ids = rtrim($ids, ',');
            $where = strpos($ids, ',') !== false
                ? ['id', 'IN', $ids]
                : ['id' => $ids];
            if ($this->NoticeModel->where($where)->delete()) {
                $this->insertLog('删除公告');
                return json(['code' => 1, 'msg' => '删除成功', 'data' => '', 'url' => '']);
            }
            return json(['code' => 0, 'msg' => '删除失败', 'data' => '', 'url' => '']);
        }
    }

    public function changeStatus()
    {
        $id     = $this->request->param('id/d', 0);
        $status = $this->request->param('status/d', 0);
        if (empty($id)) return $this->error('请选择需要修改的内容!');
        $result = $this->NoticeModel->isUpdate(true)->save(['status' => $status], ['id' => $id]);
        if ($result) {
            return json(['code' => 1, 'msg' => '修改成功', 'data' => '']);
        }
        return json(['code' => 0, 'msg' => '修改失败', 'data' => '']);
    }

    public function listorder()
    {
        $id        = $this->request->param('id/d', 0);
        $listorder = $this->request->param('listorder/d', 0);
        if (empty($id)) return $this->error('请选择需要修改的内容!');
        $result = $this->NoticeModel->isUpdate(true)->save(['listorder' => $listorder], ['id' => $id]);
        return json($result
            ? ['code' => 1, 'msg' => '修改成功', 'data' => '']
            : ['code' => 0, 'msg' => '修改失败', 'data' => '']
        );
    }

步骤 6:创建验证器

namespace app\noticee\validate;

use think\Validate;

class Notice extends Validate
{
    protected $rule = [
        'title' => 'require|length:2,100',
    ];

    protected $message = [
        'title.require' => '标题不能为空',
        'title.length'  => '标题长度 2-100 个字符',
    ];

    public function sceneAdd()
    {
        return $this->only(['title', 'content', 'status', 'listorder']);
    }

    public function sceneEdit()
    {
        return $this->remove('title', 'require');
    }
}

步骤 7:创建标签解析类

namespace app\note\taglib;

use think\Db;

class TagNotice
{
    /**
     * 公告列表标签
     * 用法:{ts module="notice" action="lists" num="10"}
     * 参数:num=数量, where=条件, order=排序
     */
    public function list s ($data)
    {
        $num   = isset($data['num']) && (int)$data['num'] > 0 ? (int)$data['num'] : 10;
        $order = isset($data['order']) ? $data['order'] : 'listorder DESC, id DESC';
        $where = isset($data['where']) ? $data['where'] : '';

        $query = Db::name('notice')->where('status', 1);

        if ($where) {
            $query->whereRaw($where);
        }

        // 排序
        if (is_string($order)) {
            $query->orderRaw($order);
        } else {
            $query->order($order);
        }

        $result = $query->limit($num)->select();

        if (!empty($result)) {
            $result = is_object($result) ? $result->toArray() : $result;
        }

        return $result ?: [];
    }

    /**
     * 公告详情标签
     * 用法:{ts:notice action="info" id="1"}{$vo.title}{/ts}
     */
    public function info($data)
    {
        $id = isset($data['id']) ? intval($data['id']) : 0;
        if (!$id) return [];

        $result = Db::name('notice')->where(['id' => $id, 'status' => 1])->find();
        return $result ?: [];
    }
}

步骤 8:添加权限菜单

INSERT INTO `tc_menu` (`id`, `parentid`, `app`, `controller`, `action`, `name`, `status`, `level`)
VALUES 
(NULL, 0, 'notice', 'admin', 'index', '公告管理', 1, 1),
(NULL, last_insert_id(), 'notice', 'admin', 'index', '公告列表', 1, 2),
(NULL, last_insert_id(), 'notice', 'admin', 'add', '添加公告', 1, 3),
(NULL, last_insert_id(), 'notice', 'admin', 'edit', '编辑公告', 1, 3),
(NULL, last_insert_id(), 'notice', 'admin', 'del', '删除公告', 1, 3);

⚠ 添加菜单后必须清除 runtime/cache 目录才能使新菜单生效,因为 adminMenu() 有 60 秒缓存。

步骤 9:前台模板中调用

{ts module="notice" action="lists" num="5"}
  {$vo.title} - {date('Y-m-d', $vo.createtime)}{/ts}


{ts module="notice" action="info" id="1"}
  {$vo.title}  {$vo.content}{/ts}

💡 标签调用格式:{ts module="模块名" action="方法名"},关闭标签统一用 {/ts}。
自动加载规则:Tag{首字母大写的模块名} → \app\{模块名}\taglib\Tag{模块名}

四、后台视图模板规范

列表页(index.html)

{extend name="../../common/view/main" /}
{block name="body"}{/block}

表单页(add.html / edit.html)

{extend name="../../common/view/main" /}
{block name="body"}      标题                      内容          {$data.content|default=''}                  提交      {/block}

五、内容模型开发(动态表)

内容模型使用主副表结构:

  • 主表:tc_{tablename}(如 tc_article)

  • 副表:tc_{tablename}_data(如 tc_article_data)

内容模型查询示例

use app\content\model\Content as ContentModel;

$cm = new ContentModel();

// 列表查询
$result = $cm->lists($tablename, $where, $field, $order, $page, $pagesize, $moreinfo);

// 获取详情(联查副表)
$detail = $cm->detail($id, $catid);

// 条件查询内容
$content = $cm->getContent($catid, $modelid, $where, $order, $field, $moreinfo);

// 新增内容
$data = [
    'title' => '标题',
    'content' => '内容',
    'catid' => 1,
    // ...
];
$id = $cm->add($data);

// 自动处理数据(远程图片下载、摘要提取、缩略图生成)
$processed = $cm->autoHandleData($data, $modelid);

// 格式化输出字段(radio/select/checkbox/images 等)
$formatted = $cm->formatData($data, $modelid);

六、可插拔模块规范

如果你想开发一个可以独立安装/卸载的模块(如 pay、collect 等),需要包含:

{modulename}/
├── install/
│   └── install.sql        # 安装时执行的 SQL
├── uninstall/
│   └── uninstall.sql      # 卸载时执行的 SQL
├── controller/
├── model/
├── validate/
├── taglib/                # [可选] 标签库
└── view/

注册模块时,除了插入 tc_module 记录,还要确保:

  1. 安装 SQL 包含建表语句和默认数据

  2. 卸载 SQL 包含删除表的语句

  3. 后台控制器继承 Adminbase

七、继承体系说明

基类继承使用场景
app\common\controller\Basethink\Controller所有控制器的祖先,提供增删改查方法
app\common\controller\AdminbaseBase后台控制器,含登录校验/RBAC权限/日志
app\common\controller\IndexbaseBase前台控制器,含模板路径设置/XSS过滤
app\content\controller\Indexbase-前台统一使用 Indexbase(common模块)

后台控制器白名单

class YourController extends Adminbase
{
    protected $noNeedLogin = ['login'];      // 免登录
    protected $noAuth      = ['getList'];    // 已登录但免权限
}

八、路由规范

后台路由通常使用默认 TP5 路由:/admin/{controller}/{action}

新增后台菜单后,访问路径为:/admin/控制器名/方法名

前台路由注册在 route/route.php,URL 规则存储在 tc_urlrule 表:

// 手动注册示例
Route::get('notice/:id', 'notice/Index/detail')->pattern(['id' => '\d+']);

九、常用工具函数

// 图片处理
$thumbPath = thumb($srcPath, 300, 200);   // 生成缩略图

// 表单构建
$formHtml = buildForm($formid);            // 自动生成表单HTML

// 系统配置
$siteName = getConfig('site_name');       // 读取系统配置

// 栏目相关
$catInfo  = getCategory($catid);          // 获取栏目信息
$catUrl   = buildCatUrl($catid);          // 栏目URL
$articleUrl = buildContentUrl($catid, $id); // 内容URL
$catPos   = catpos($catid);               // 面包屑
$seo      = seo($catid, $title);          // SEO信息

// 登录检测
if (is_admin_login()) { /* 后台已登录 */ }
if (is_user_login()) { /* 前台已登录 */ }

// 模型判断
if (module_exists('pay')) { /* pay模块已安装 */ }

// 缓存操作
cache('key', $value, 3600);               // 写入缓存
cache('key', null);                       // 清除缓存
clear_cache();                            // 清空runtime/cache
加入收藏
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-11-11 00:10:48 HTTP/1.1 GET : http://demo.tengcee.com/document/mokuai/5.html
  2. 运行时间 : 0.092146s [ 吞吐率:10.85req/s ] 内存消耗:5,785.34kb 文件加载:183
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=f3d42810214a68ab3f6144685092ab23
  1. /www/wwwroot/demo.tengcee.com/public/index.php ( 0.73 KB )
  2. /www/wwwroot/demo.tengcee.com/vendor/autoload.php ( 0.73 KB )
  3. /www/wwwroot/demo.tengcee.com/vendor/composer/autoload_real.php ( 1.63 KB )
  4. /www/wwwroot/demo.tengcee.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /www/wwwroot/demo.tengcee.com/vendor/composer/ClassLoader.php ( 15.99 KB )
  6. /www/wwwroot/demo.tengcee.com/vendor/composer/autoload_static.php ( 5.52 KB )
  7. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /www/wwwroot/demo.tengcee.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /www/wwwroot/demo.tengcee.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /www/wwwroot/demo.tengcee.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /www/wwwroot/demo.tengcee.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.60 KB )
  17. /www/wwwroot/demo.tengcee.com/vendor/overtrue/pinyin/src/const.php ( 0.49 KB )
  18. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-captcha/src/helper.php ( 1.37 KB )
  19. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  20. /www/wwwroot/demo.tengcee.com/vendor/symfony/var-dumper/VarDumper.php ( 3.96 KB )
  21. /www/wwwroot/demo.tengcee.com/app/common.php ( 38.24 KB )
  22. /www/wwwroot/demo.tengcee.com/app/function.php ( 39.40 KB )
  23. /www/wwwroot/demo.tengcee.com/app/dir.func.php ( 4.01 KB )
  24. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  25. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-container/src/Container.php ( 15.62 KB )
  26. /www/wwwroot/demo.tengcee.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  27. /www/wwwroot/demo.tengcee.com/app/provider.php ( 0.19 KB )
  28. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/Http.php ( 6.22 KB )
  29. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  30. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  31. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/helper.php ( 18.77 KB )
  32. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/Config.php ( 5.93 KB )
  33. /www/wwwroot/demo.tengcee.com/config/app.php ( 1.14 KB )
  34. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /www/wwwroot/demo.tengcee.com/config/cache.php ( 0.78 KB )
  36. /www/wwwroot/demo.tengcee.com/config/captcha.php ( 1.13 KB )
  37. /www/wwwroot/demo.tengcee.com/config/console.php ( 0.23 KB )
  38. /www/wwwroot/demo.tengcee.com/config/cookie.php ( 0.56 KB )
  39. /www/wwwroot/demo.tengcee.com/config/database.php ( 1.80 KB )
  40. /www/wwwroot/demo.tengcee.com/config/filesystem.php ( 0.61 KB )
  41. /www/wwwroot/demo.tengcee.com/config/lang.php ( 0.91 KB )
  42. /www/wwwroot/demo.tengcee.com/config/log.php ( 1.35 KB )
  43. /www/wwwroot/demo.tengcee.com/config/middleware.php ( 0.19 KB )
  44. /www/wwwroot/demo.tengcee.com/config/route.php ( 1.89 KB )
  45. /www/wwwroot/demo.tengcee.com/config/session.php ( 0.57 KB )
  46. /www/wwwroot/demo.tengcee.com/config/trace.php ( 0.34 KB )
  47. /www/wwwroot/demo.tengcee.com/config/version.php ( 0.56 KB )
  48. /www/wwwroot/demo.tengcee.com/config/view.php ( 1.71 KB )
  49. /www/wwwroot/demo.tengcee.com/app/event.php ( 0.25 KB )
  50. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/Event.php ( 7.77 KB )
  51. /www/wwwroot/demo.tengcee.com/app/service.php ( 0.13 KB )
  52. /www/wwwroot/demo.tengcee.com/app/AppService.php ( 0.64 KB )
  53. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  54. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  55. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  56. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  57. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  58. /www/wwwroot/demo.tengcee.com/vendor/services.php ( 0.22 KB )
  59. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  60. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  61. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  62. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-captcha/src/CaptchaService.php ( 0.52 KB )
  63. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-multi-app/src/Service.php ( 1.08 KB )
  64. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  65. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  66. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  67. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  68. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  69. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  70. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  71. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  72. /www/wwwroot/demo.tengcee.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  73. /www/wwwroot/demo.tengcee.com/vendor/psr/log/src/LoggerInterface.php ( 2.68 KB )
  74. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  75. /www/wwwroot/demo.tengcee.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  76. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  77. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  78. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.02 KB )
  79. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  80. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  81. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  82. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  83. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  84. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  85. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  86. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  87. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  88. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  89. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  90. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  91. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  92. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  93. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  94. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  95. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  96. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  97. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  98. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/log/driver/File.php ( 6.10 KB )
  99. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  100. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  101. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  102. /www/wwwroot/demo.tengcee.com/app/common/service/HookService.php ( 4.14 KB )
  103. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  104. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  105. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  106. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  107. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  108. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  109. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  110. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  111. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  112. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  113. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  114. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  115. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  116. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/Console.php ( 22.98 KB )
  117. /www/wwwroot/demo.tengcee.com/app/Request.php ( 0.78 KB )
  118. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/Request.php ( 54.64 KB )
  119. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/traits/UrlHandler.php ( 6.05 KB )
  120. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/traits/DomainHandler.php ( 5.49 KB )
  121. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/traits/HttpMethodHandler.php ( 4.74 KB )
  122. /www/wwwroot/demo.tengcee.com/app/middleware.php ( 0.25 KB )
  123. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  124. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  125. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  126. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  127. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  128. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  129. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  130. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-multi-app/src/MultiApp.php ( 7.06 KB )
  131. /www/wwwroot/demo.tengcee.com/app/content/common.php ( 0.30 KB )
  132. /www/wwwroot/demo.tengcee.com/app/content/config/config.php ( 0.75 KB )
  133. /www/wwwroot/demo.tengcee.com/app/content/config/field.php ( 1.17 KB )
  134. /www/wwwroot/demo.tengcee.com/app/content/config/paginate.php ( 0.85 KB )
  135. /www/wwwroot/demo.tengcee.com/app/content/config/template.php ( 0.94 KB )
  136. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  137. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.74 KB )
  138. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  139. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.41 KB )
  140. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/route/Rule.php ( 27.49 KB )
  141. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  142. /www/wwwroot/demo.tengcee.com/app/content/route/route.php ( 1.91 KB )
  143. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  144. /www/wwwroot/demo.tengcee.com/app/common/service/UrlRuleService.php ( 5.00 KB )
  145. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/facade/Cache.php ( 2.06 KB )
  146. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  147. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 11.32 KB )
  148. /www/wwwroot/demo.tengcee.com/app/content/controller/Index.php ( 20.82 KB )
  149. /www/wwwroot/demo.tengcee.com/app/common/controller/Indexbase.php ( 1.42 KB )
  150. /www/wwwroot/demo.tengcee.com/app/common/controller/Base.php ( 10.07 KB )
  151. /www/wwwroot/demo.tengcee.com/app/BaseController.php ( 2.05 KB )
  152. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/facade/Config.php ( 1.37 KB )
  153. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  154. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  155. /www/wwwroot/demo.tengcee.com/app/admin/model/Ipban.php ( 6.57 KB )
  156. /www/wwwroot/demo.tengcee.com/app/common/model/BaseModel.php ( 2.09 KB )
  157. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/model/Collection.php ( 7.04 KB )
  158. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-view/src/Think.php ( 8.00 KB )
  159. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  160. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  161. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  162. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/facade/Session.php ( 1.79 KB )
  163. /www/wwwroot/demo.tengcee.com/app/content/model/Content.php ( 22.47 KB )
  164. /www/wwwroot/demo.tengcee.com/app/content/model/Sitemodel.php ( 13.57 KB )
  165. /www/wwwroot/demo.tengcee.com/app/content/model/CategoryPriv.php ( 3.95 KB )
  166. /www/wwwroot/demo.tengcee.com/app/content/model/ModelField.php ( 8.91 KB )
  167. /www/wwwroot/demo.tengcee.com/app/content/model/Tag.php ( 1.77 KB )
  168. /www/wwwroot/demo.tengcee.com/app/admin/model/Urlrule.php ( 4.74 KB )
  169. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-template/src/template/taglib/Cx.php ( 24.23 KB )
  170. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-template/src/template/TagLib.php ( 12.11 KB )
  171. /www/wwwroot/demo.tengcee.com/app/common/taglib/Ts.php ( 13.49 KB )
  172. /www/wwwroot/demo.tengcee.com/runtime/content/temp/ad85a2048f9571f125f0668ea6424ab2.php ( 23.64 KB )
  173. /www/wwwroot/demo.tengcee.com/app/content/taglib/TagContent.php ( 23.73 KB )
  174. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-multi-app/src/Url.php ( 7.52 KB )
  175. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/route/Url.php ( 14.05 KB )
  176. /www/wwwroot/demo.tengcee.com/app/content/model/Category.php ( 8.29 KB )
  177. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/Raw.php ( 1.22 KB )
  178. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-orm/src/db/CacheItem.php ( 4.36 KB )
  179. /www/wwwroot/demo.tengcee.com/app/content/model/Block.php ( 2.54 KB )
  180. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/Response.php ( 9.07 KB )
  181. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/response/Html.php ( 0.97 KB )
  182. /www/wwwroot/demo.tengcee.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  183. /www/wwwroot/demo.tengcee.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000485s ] mysql:host=127.0.0.1;port=3306;dbname=demo_tengcee_com;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `tc_module` [ RunTime:0.000653s ]
  3. SELECT COUNT(*) AS think_count FROM `tc_module` WHERE `module` = 'content' [ RunTime:0.000348s ]
  4. SHOW FULL COLUMNS FROM `tc_hook` [ RunTime:0.000544s ]
  5. SELECT * FROM `tc_hook` WHERE `status` = 1 [ RunTime:0.000261s ]
  6. SHOW FULL COLUMNS FROM `tc_ipban` [ RunTime:0.000812s ]
  7. SELECT * FROM `tc_ipban` WHERE `type` = 1 AND `status` = 1 AND ( `expire_time` = 0 OR `expire_time` > 1794327048 ) [ RunTime:0.000394s ]
  8. SELECT * FROM `tc_ipban` WHERE `type` = 0 AND `status` = 1 AND ( `expire_time` = 0 OR `expire_time` > 1794327048 ) [ RunTime:0.000273s ]
  9. SHOW FULL COLUMNS FROM `tc_config` [ RunTime:0.000463s ]
  10. SELECT * FROM `tc_config` WHERE `name` = 'style' LIMIT 1 [ RunTime:0.000249s ]
  11. SHOW FULL COLUMNS FROM `tc_category` [ RunTime:0.000676s ]
  12. SELECT `catid`,`catdir`,`parentid`,`type` FROM `tc_category` WHERE `catdir` = 'mokuai' AND `status` = 1 [ RunTime:0.000359s ]
  13. SHOW FULL COLUMNS FROM `tc_model` [ RunTime:0.000565s ]
  14. SELECT * FROM `tc_model` WHERE `modelid` = 2 LIMIT 1 [ RunTime:0.000298s ]
  15. SHOW FULL COLUMNS FROM `tc_article` [ RunTime:0.000438s ]
  16. SELECT `article`.*,`article_data`.* FROM `tc_article` `article` LEFT JOIN `tc_article_data` `article_data` ON `article`.`id`=`article_data`.`aid` WHERE `id` = 5 LIMIT 1 [ RunTime:0.000467s ]
  17. SHOW FULL COLUMNS FROM `tc_category_priv` [ RunTime:0.000590s ]
  18. SELECT * FROM `tc_category_priv` WHERE `catid` = 19 AND `is_admin` = 0 AND `action` = 'visit' [ RunTime:0.000258s ]
  19. SELECT * FROM `tc_model` WHERE `modelid` = 2 LIMIT 1 [ RunTime:0.000241s ]
  20. SHOW FULL COLUMNS FROM `tc_model_field` [ RunTime:0.000662s ]
  21. SELECT * FROM `tc_model_field` WHERE `modelid` = 2 ORDER BY `listorder` ASC,`id` [ RunTime:0.000441s ]
  22. SELECT * FROM `tc_model` WHERE `modelid` = 2 LIMIT 1 [ RunTime:0.000301s ]
  23. SHOW FULL COLUMNS FROM `tc_tag` [ RunTime:0.000480s ]
  24. SELECT * FROM `tc_tag` WHERE ( `tag` LIKE '%TSCMS%' OR `tag` LIKE '%模块%' OR `tag` LIKE '%开发%' OR `tag` LIKE '%教程%' ) ORDER BY `listorder` DESC,`id` DESC LIMIT 10 [ RunTime:0.000564s ]
  25. SHOW FULL COLUMNS FROM `tc_urlrule` [ RunTime:0.000463s ]
  26. SELECT * FROM `tc_urlrule` WHERE `module` = 'content' AND `type` = 3 AND `status` = 1 ORDER BY `listorder` DESC [ RunTime:0.000357s ]
  27. SELECT * FROM `tc_urlrule` WHERE `module` = 'content' AND `type` = 3 AND `status` = 1 ORDER BY `listorder` DESC [ RunTime:0.000324s ]
  28. SELECT * FROM `tc_urlrule` WHERE `module` = 'content' AND `type` = 3 AND `status` = 1 ORDER BY `listorder` DESC [ RunTime:0.000350s ]
  29. SELECT * FROM `tc_urlrule` WHERE `module` = 'content' AND `type` = 3 AND `status` = 1 ORDER BY `listorder` DESC [ RunTime:0.000305s ]
  30. SELECT * FROM `tc_urlrule` WHERE `module` = 'content' AND `type` = 3 AND `status` = 1 ORDER BY `listorder` DESC [ RunTime:0.000338s ]
  31. SELECT * FROM `tc_urlrule` WHERE `module` = 'content' AND `type` = 3 AND `status` = 1 ORDER BY `listorder` DESC [ RunTime:0.000318s ]
  32. SELECT * FROM `tc_urlrule` WHERE `module` = 'content' AND `type` = 3 AND `status` = 1 ORDER BY `listorder` DESC [ RunTime:0.000339s ]
  33. SELECT * FROM `tc_urlrule` WHERE `module` = 'content' AND `type` = 3 AND `status` = 1 ORDER BY `listorder` DESC [ RunTime:0.000342s ]
  34. SELECT * FROM `tc_urlrule` WHERE `module` = 'content' AND `type` = 3 AND `status` = 1 ORDER BY `listorder` DESC [ RunTime:0.000273s ]
  35. SELECT * FROM `tc_urlrule` WHERE `module` = 'content' AND `type` = 3 AND `status` = 1 ORDER BY `listorder` DESC [ RunTime:0.000282s ]
  36. SHOW TABLES [ RunTime:0.000534s ]
  37. SHOW FULL COLUMNS FROM `tc_products` [ RunTime:0.000679s ]
  38. SELECT `a`.* FROM `tc_products` `a` WHERE `a`.`status` = '1' AND `a`.`catid` IN ('2','12','25','26','27','13','14','15','17') ORDER BY listorder DESC, id DESC LIMIT 6 [ RunTime:0.000425s ]
  39. SELECT * FROM `tc_article` WHERE `catid` = 19 AND `status` = 1 AND `id` < 5 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000397s ]
  40. SELECT * FROM `tc_article` WHERE `catid` = 19 AND `status` = 1 AND `id` > 5 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000396s ]
  41. SELECT * FROM `tc_article` WHERE `status` = 1 AND `catid` = 19 AND ( `title` LIKE '%TSCMS%' OR `keywords` LIKE '%TSCMS%' OR `title` LIKE '%模块%' OR `keywords` LIKE '%模块%' OR `title` LIKE '%开发%' OR `keywords` LIKE '%开发%' OR `title` LIKE '%教程%' OR `keywords` LIKE '%教程%' ) ORDER BY updatetime DESC, id DESC LIMIT 10 [ RunTime:0.000374s ]
  42. SELECT * FROM `tc_article` WHERE `id` = 6 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000278s ]
  43. SELECT * FROM `tc_article` WHERE `id` = 5 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000276s ]
  44. SHOW FULL COLUMNS FROM `tc_block` [ RunTime:0.000633s ]
  45. SELECT * FROM `tc_block` WHERE `pos` = 'phone' LIMIT 1 [ RunTime:0.000300s ]
  46. SELECT * FROM `tc_block` WHERE `pos` = 'email' LIMIT 1 [ RunTime:0.000255s ]
  47. SELECT * FROM `tc_block` WHERE `pos` = 'wechat' LIMIT 1 [ RunTime:0.000239s ]
  48. SELECT * FROM `tc_block` WHERE `pos` = 'guanwang' LIMIT 1 [ RunTime:0.000243s ]
  49. SELECT * FROM `tc_block` WHERE `pos` = 'qrcode' LIMIT 1 [ RunTime:0.000230s ]
  50. SELECT * FROM `tc_block` WHERE `pos` = 'xiaochengxu' LIMIT 1 [ RunTime:0.000227s ]
  51. SELECT * FROM `tc_block` WHERE `pos` = 'qqqrcode' LIMIT 1 [ RunTime:0.000212s ]
  52. SELECT * FROM `tc_block` WHERE `pos` = 'copyright' LIMIT 1 [ RunTime:0.000255s ]
0.097693s