Cms.php 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // |
  4. // +----------------------------------------------------------------------
  5. // |
  6. // +----------------------------------------------------------------------
  7. // |
  8. // +----------------------------------------------------------------------
  9. // |
  10. // +----------------------------------------------------------------------
  11. // +----------------------------------------------------------------------
  12. // | 内容管理插件
  13. // +----------------------------------------------------------------------
  14. namespace addons\cms;
  15. use addons\cms\library\FulltextSearch;
  16. use addons\cms\library\MeiliSearch;
  17. use app\common\library\Menu;
  18. use think\Addons;
  19. use think\facade\Config;
  20. use think\facade\Db;
  21. use think\facade\Env;
  22. class Cms extends Addons
  23. {
  24. protected $ext_table = '_data';
  25. //后台菜单
  26. protected $menu = [
  27. [
  28. "name" => "cms",
  29. "title" => "cms内容管理",
  30. "icon" => "iconfont icon-draft-line",
  31. "sublist" => [
  32. [
  33. "name" => "addon/config/name/cms",
  34. "title" => "站点配置",
  35. "icon" => "iconfont icon-settings-4-line",
  36. 'ismenu' => 1,
  37. "listorder" => 99,
  38. ],
  39. [
  40. "name" => "cms.category",
  41. "title" => "栏目列表",
  42. "icon" => "iconfont icon-menu-line",
  43. "listorder" => 88,
  44. "sublist" => [
  45. ["name" => "cms.category/index", "title" => "查看"],
  46. ["name" => "cms.category/add", "title" => "新增"],
  47. ["name" => "cms.category/cat_priv", "title" => "栏目授权"],
  48. ["name" => "cms.category/edit", "title" => "编辑"],
  49. ["name" => "cms.category/del", "title" => "删除"],
  50. ["name" => "cms.category/multi", "title" => "批量更新"],
  51. ],
  52. ],
  53. [
  54. "name" => "cms.cms",
  55. "title" => "管理内容",
  56. "icon" => "iconfont icon-draft-line",
  57. "listorder" => 77,
  58. "sublist" => [
  59. ["name" => "cms.cms/index", "title" => "查看"],
  60. ["name" => "cms.cms/add", "title" => "新增"],
  61. ["name" => "cms.cms/edit", "title" => "编辑"],
  62. ["name" => "cms.cms/del", "title" => "删除"],
  63. ["name" => "cms.cms/multi", "title" => "批量更新"],
  64. ["name" => "cms.cms/remove", "title" => "批量移动"],
  65. ["name" => "cms.cms/recyclebin", "title" => "回收站"],
  66. ["name" => "cms.cms/destroy", "title" => "清空回收站"],
  67. ["name" => "cms.cms/restore", "title" => "还原回收站"],
  68. ],
  69. ],
  70. // [
  71. // "name" => "cms.page",
  72. // "title" => "单页管理",
  73. // "icon" => "iconfont icon-bill-line",
  74. // "listorder" => 9,
  75. // "sublist" => [
  76. // ["name" => "cms.page/index", "title" => "查看"],
  77. // ["name" => "cms.page/edit", "title" => "编辑"],
  78. // ["name" => "cms.page/multi", "title" => "批量更新"],
  79. // ],
  80. // ],
  81. [
  82. "name" => "cms.publish",
  83. "title" => "稿件管理",
  84. "icon" => "iconfont icon-draft-line",
  85. "listorder" => 8,
  86. "sublist" => [
  87. ["name" => "cms.publish/index", "title" => "查看"],
  88. ["name" => "cms.publish/del", "title" => "删除"],
  89. ["name" => "cms.publish/multi", "title" => "批量更新"],
  90. ],
  91. ],
  92. [
  93. "name" => "cms.order",
  94. "title" => "订单管理",
  95. "icon" => "iconfont icon-file-list-3-line",
  96. "listorder" => 7,
  97. "sublist" => [
  98. ["name" => "cms.order/index", "title" => "查看"],
  99. ["name" => "cms.order/del", "title" => "删除"],
  100. ],
  101. ],
  102. [
  103. "name" => "cms.tags",
  104. "title" => "Tags管理",
  105. "icon" => "iconfont icon-price-tag-3-line",
  106. "listorder" => 6,
  107. "sublist" => [
  108. ["name" => "cms.tags/index", "title" => "查看"],
  109. ["name" => "cms.tags/add", "title" => "新增"],
  110. ["name" => "cms.tags/edit", "title" => "编辑"],
  111. ["name" => "cms.tags/del", "title" => "删除"],
  112. ["name" => "cms.tags/create", "title" => "数据重建"],
  113. ["name" => "cms.tags/multi", "title" => "批量更新"],
  114. ],
  115. ],
  116. [
  117. "name" => "cms.models",
  118. "title" => "模型管理",
  119. "icon" => "iconfont icon-apps-line",
  120. "listorder" => 4,
  121. "sublist" => [
  122. ["name" => "cms.models/index", "title" => "查看"],
  123. ["name" => "cms.models/add", "title" => "新增"],
  124. ["name" => "cms.models/edit", "title" => "编辑"],
  125. ["name" => "cms.models/del", "title" => "删除"],
  126. ["name" => "cms.models/multi", "title" => "批量更新"],
  127. ],
  128. ],
  129. [
  130. "name" => "cms.field",
  131. "title" => "字段管理",
  132. "ismenu" => 0,
  133. "sublist" => [
  134. ["name" => "cms.field/index", "title" => "查看"],
  135. ["name" => "cms.field/add", "title" => "新增"],
  136. ["name" => "cms.field/edit", "title" => "编辑"],
  137. ["name" => "cms.field/del", "title" => "删除"],
  138. ["name" => "cms.field/multi", "title" => "批量更新"],
  139. ],
  140. ],
  141. ],
  142. ],
  143. ];
  144. //安装
  145. public function install()
  146. {
  147. Menu::create($this->menu);
  148. return true;
  149. }
  150. //卸载
  151. public function uninstall()
  152. {
  153. $droptables = request()->param("droptables");
  154. $auth = \app\admin\library\Auth::instance();
  155. //只有开启调试且为超级管理员才允许删除相关数据库
  156. if ($droptables && Env::get('APP_DEBUG') && $auth->isAdministrator()) {
  157. // 删除模型中建的表
  158. $table_list = Db::name('cms_model')->where('module', 'cms')->field('tablename,type,id')->select();
  159. if ($table_list) {
  160. foreach ($table_list as $val) {
  161. $tablename = Config::get('database.connections.mysql.prefix') . $val['tablename'];
  162. Db::execute("DROP TABLE IF EXISTS `{$tablename}`;");
  163. if ($val['type'] == 2) {
  164. Db::execute("DROP TABLE IF EXISTS `{$tablename}{$this->ext_table}`;");
  165. }
  166. Db::name('cms_field')->where('modelid', $val['id'])->delete();
  167. }
  168. }
  169. //删除模型中的表
  170. Db::name('cms_model')->where(['module' => 'cms'])->delete();
  171. }
  172. Menu::delete("cms");
  173. return true;
  174. }
  175. /**
  176. * 插件启用方法
  177. * @return bool
  178. */
  179. public function enable()
  180. {
  181. Menu::enable("cms");
  182. return true;
  183. }
  184. /**
  185. * 插件禁用方法
  186. * @return bool
  187. */
  188. public function disable()
  189. {
  190. Menu::disable("cms");
  191. return true;
  192. }
  193. //或者run方法
  194. public function userSidenavAfter($content)
  195. {
  196. return $this->fetch('userSidenavAfter');
  197. }
  198. public function xunsearchIndexReset($project)
  199. {
  200. if ($project['name'] == FulltextSearch::getProjectName()) {
  201. return FulltextSearch::reset();
  202. }
  203. }
  204. public function meilisearchIndexReset($project)
  205. {
  206. if ($project['name'] == MeiliSearch::getProjectName()) {
  207. return MeiliSearch::reset();
  208. }
  209. }
  210. /**
  211. * 插件升级方法
  212. */
  213. public function upgrade()
  214. {
  215. Menu::upgrade('cms', $this->menu);
  216. return true;
  217. }
  218. public function appInit()
  219. {
  220. $taglib = Config::get('view.taglib_build_in');
  221. Config::set(['taglib_build_in' => ($taglib ? $taglib . ',' : '') . 'addons\\cms\\taglib\\Cms'], 'view');
  222. //全局变量规则,全部路由有效
  223. \think\facade\Route::pattern([
  224. 'catdir' => "[A-Za-z0-9\-\_]+",
  225. 'id' => "\d+",
  226. 'catid' => "\d+",
  227. ]);
  228. //此函数需要全局调用
  229. if (is_file(ADDON_PATH . 'cms' . DS . 'function.php')) {
  230. include_once ADDON_PATH . 'cms' . DS . 'function.php';
  231. }
  232. // 设置替换字符串
  233. $cdnurl = Config::get('site.cdnurl');
  234. $tpl_replace_string = Config::get('view.tpl_replace_string');
  235. $tpl_replace_string['__IMG_PATH__'] = $cdnurl . "/assets/addons/cms/images";
  236. $tpl_replace_string['__CSS_PATH__'] = $cdnurl . "/assets/addons/cms/css";
  237. $tpl_replace_string['__JS_PATH__'] = $cdnurl . "/assets/addons/cms/js";
  238. Config::set(['tpl_replace_string' => $tpl_replace_string], 'view');
  239. }
  240. public function meilisearchConfigInit()
  241. {
  242. return MeiliSearch::config();
  243. }
  244. }