Page.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. namespace app\admin\model\cms;
  3. use think\Model;
  4. use traits\model\SoftDelete;
  5. class Page extends Model
  6. {
  7. use SoftDelete;
  8. // 表名
  9. protected $name = 'cms_page';
  10. // 自动写入时间戳字段
  11. protected $autoWriteTimestamp = 'int';
  12. // 定义时间戳字段名
  13. protected $createTime = 'createtime';
  14. protected $updateTime = 'updatetime';
  15. protected $deleteTime = 'deletetime';
  16. // 追加属性
  17. protected $append = [
  18. 'flag_text',
  19. 'status_text',
  20. 'url'
  21. ];
  22. protected static $config = [];
  23. protected static function init()
  24. {
  25. self::$config = $config = get_addon_config('cms');
  26. self::beforeInsert(function ($row) {
  27. if (!isset($row['admin_id']) || !$row['admin_id']) {
  28. $admin_id = session('admin.id');
  29. $row['admin_id'] = $admin_id ? $admin_id : 0;
  30. }
  31. });
  32. self::beforeWrite(function ($row) {
  33. //在更新之前对数组进行处理
  34. foreach ($row->getData() as $k => $value) {
  35. if (is_array($value) && is_array(reset($value))) {
  36. $value = json_encode(self::getArrayData($value), JSON_UNESCAPED_UNICODE);
  37. } else {
  38. $value = is_array($value) ? implode(',', $value) : $value;
  39. }
  40. $row->setAttr($k, $value);
  41. }
  42. });
  43. self::afterInsert(function ($row) {
  44. $row->save(['weigh' => $row['id']]);
  45. });
  46. self::afterDelete(function ($row) {
  47. $data = Page::withTrashed()->find($row['id']);
  48. //删除评论
  49. Comment::deleteByType('page', $row['id'], !$data);
  50. });
  51. }
  52. public function getUrlAttr($value, $data)
  53. {
  54. return $this->buildUrl($value, $data);
  55. }
  56. public function getFullurlAttr($value, $data)
  57. {
  58. return $this->buildUrl($value, $data, true);
  59. }
  60. private function buildUrl($value, $data, $domain = false)
  61. {
  62. $diyname = isset($data['diyname']) && $data['diyname'] ? $data['diyname'] : $data['id'];
  63. $time = $data['createtime'] ?? time();
  64. $vars = [
  65. ':id' => $data['id'],
  66. ':diyname' => $diyname,
  67. ':year' => date("Y", $time),
  68. ':month' => date("m", $time),
  69. ':day' => date("d", $time)
  70. ];
  71. return addon_url('cms/page/index', $vars, static::$config['urlsuffix'], $domain);
  72. }
  73. public function getStatusList()
  74. {
  75. return ['normal' => __('Normal'), 'hidden' => __('Hidden')];
  76. }
  77. public function getStatusTextAttr($value, $data)
  78. {
  79. $value = $value ? $value : $data['status'];
  80. $list = $this->getStatusList();
  81. return isset($list[$value]) ? $list[$value] : '';
  82. }
  83. public function getFlagList()
  84. {
  85. $config = get_addon_config('cms');
  86. return $config['flagtype'];
  87. }
  88. public function getFlagTextAttr($value, $data)
  89. {
  90. $value = $value ? $value : $data['flag'];
  91. $valueArr = explode(',', $value);
  92. $list = $this->getFlagList();
  93. return implode(',', array_intersect_key($list, array_flip($valueArr)));
  94. }
  95. protected function setKeywordsAttr($value)
  96. {
  97. return str_replace(["&nbsp;", "\r\n", "\r", "\n"], "", strip_tags($value));
  98. }
  99. protected function setDescriptionAttr($value)
  100. {
  101. return str_replace(["&nbsp;", "\r\n", "\r", "\n"], "", strip_tags($value));
  102. }
  103. }