<?php namespace app\admin\model\cms; use think\Config; use think\Db; use think\Exception; use think\Model; class Diyform extends Model { // 表名 protected $name = 'cms_diyform'; // 自动写入时间戳字段 protected $autoWriteTimestamp = 'int'; // 定义时间戳字段名 protected $createTime = 'createtime'; protected $updateTime = 'updatetime'; // 追加属性 protected $append = [ 'url' ]; protected static $config = []; public static function init() { self::$config = $config = get_addon_config('cms'); self::beforeInsert(function ($row) { if (!isset($row['admin_id']) || !$row['admin_id']) { $admin_id = session('admin.id'); $row['admin_id'] = $admin_id ? $admin_id : 0; } if (!preg_match("/^([a-z0-9_]+)$/", $row['table'])) { throw new Exception("表名只支持小写字母、数字、下划线"); } }); self::afterInsert(function ($row) { $prefix = Config::get('database.prefix'); $sql = "CREATE TABLE `{$prefix}{$row['table']}` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `user_id` int(10) DEFAULT NULL COMMENT '会员ID', `title` varchar(255) DEFAULT '' COMMENT '标题', `images` varchar(1500) DEFAULT '' COMMENT '图片', `content` text DEFAULT NULL COMMENT '内容', `createtime` int(10) DEFAULT NULL COMMENT '添加时间', `updatetime` int(10) DEFAULT NULL COMMENT '更新时间', `memo` varchar(1500) DEFAULT '' COMMENT '备注', `status` enum('normal','hidden','rejected') DEFAULT 'hidden' COMMENT '状态', PRIMARY KEY (`id`), KEY `user_id` (`user_id`), KEY `createtime` (`createtime`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='{$row['name']}'"; db()->execute($sql); $time = time(); $fieldsArr = [ [ "source" => "diyform", "source_id" => $row['id'], "name" => "title", "type" => "string", "title" => "标题", "content" => "value1|title1\r\nvalue2|title2", "length" => 255, "iscontribute" => 1, "isfilter" => 0, "weigh" => 3, "defaultvalue" => '', "createtime" => $time, "updatetime" => $time, "status" => "normal" ], [ "source" => "diyform", "source_id" => $row['id'], "name" => "images", "type" => "images", "title" => "图片", "content" => "value1|title1\r\nvalue2|title2", "length" => 1500, "iscontribute" => 1, "isfilter" => 0, "weigh" => 2, "defaultvalue" => '', "createtime" => $time, "updatetime" => $time, "status" => "normal" ], [ "source" => "diyform", "source_id" => $row['id'], "name" => "content", "type" => "editor", "title" => "内容", "content" => "value1|title1\r\nvalue2|title2", "length" => 0, "iscontribute" => 1, "isfilter" => 0, "weigh" => 1, "defaultvalue" => '', "createtime" => $time, "updatetime" => $time, "status" => "normal" ], ]; Db::name("cms_fields")->insertAll($fieldsArr); }); } public function getUrlAttr($value, $data) { return $this->buildUrl($value, $data); } public function getFullurlAttr($value, $data) { return $this->buildUrl($value, $data, true); } private function buildUrl($value, $data, $domain = false) { $diyname = isset($data['diyname']) && $data['diyname'] ? $data['diyname'] : $data['id']; $time = $data['createtime'] ?? time(); $vars = [ ':id' => $data['id'], ':diyname' => $diyname, ':year' => date("Y", $time), ':month' => date("m", $time), ':day' => date("d", $time) ]; return addon_url('cms/diyform/index', $vars, static::$config['urlsuffix'], $domain); } public function getPosturlAttr($value, $data) { $diyname = isset($data['diyname']) && $data['diyname'] ? $data['diyname'] : $data['id']; $time = $data['createtime'] ?? time(); $vars = [ ':id' => $data['id'], ':diyname' => $diyname, ':year' => date("Y", $time), ':month' => date("m", $time), ':day' => date("d", $time) ]; return addon_url('cms/diyform/post', $vars, static::$config['urlsuffix']); } public function getFieldsAttr($value, $data) { return is_array($value) ? $value : ($value ? explode(',', $value) : []); } public function getSettingAttr($value, $data) { return is_array($value) ? $value : (array)json_decode($data['setting'], true); } public function setSettingAttr($value) { return is_array($value) ? json_encode($value) : $value; } public function getStatusList() { return ['normal' => __('Normal'), 'hidden' => __('Hidden')]; } public function getStatusTextAttr($value, $data) { $value = $value ? $value : $data['status']; $list = $this->getStatusList(); return isset($list[$value]) ? $list[$value] : ''; } }