Page.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. namespace app\admin\model\shop;
  3. use think\Model;
  4. use traits\model\SoftDelete;
  5. class Page extends Model
  6. {
  7. use SoftDelete;
  8. // 表名
  9. protected $name = 'shop_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('shop');
  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. }
  47. public function setContentAttr($value)
  48. {
  49. return $value;
  50. //替换卡片信息
  51. return \addons\shop\library\Service::replaceSourceTpl($value);
  52. }
  53. public function getContentAttr($value, $data)
  54. {
  55. //组装卡片信息
  56. return \addons\shop\library\Service::formatSourceTpl($value);
  57. }
  58. public function getUrlAttr($value, $data)
  59. {
  60. return $this->buildUrl($value, $data);
  61. }
  62. public function getFullurlAttr($value, $data)
  63. {
  64. return $this->buildUrl($value, $data, true);
  65. }
  66. private function buildUrl($value, $data, $domain = false)
  67. {
  68. $diyname = isset($data['diyname']) && $data['diyname'] ? $data['diyname'] : $data['id'];
  69. $time = $data['createtime'] ?? time();
  70. $vars = [
  71. ':id' => $data['id'],
  72. ':diyname' => $diyname,
  73. ':year' => date("Y", $time),
  74. ':month' => date("m", $time),
  75. ':day' => date("d", $time)
  76. ];
  77. return addon_url('shop/page/index', $vars, static::$config['urlsuffix'], $domain);
  78. }
  79. public function getStatusList()
  80. {
  81. return ['normal' => __('Normal'), 'hidden' => __('Hidden')];
  82. }
  83. public function getStatusTextAttr($value, $data)
  84. {
  85. $value = $value ? $value : $data['status'];
  86. $list = $this->getStatusList();
  87. return $list[$value] ?? '';
  88. }
  89. public function getFlagList()
  90. {
  91. $config = get_addon_config('shop');
  92. return $config['flagtype'];
  93. }
  94. public function getFlagTextAttr($value, $data)
  95. {
  96. $value = $value ? $value : $data['flag'];
  97. $valueArr = explode(',', $value);
  98. $list = $this->getFlagList();
  99. return implode(',', array_intersect_key($list, array_flip($valueArr)));
  100. }
  101. public static function getArrayData($data)
  102. {
  103. if (!isset($data['value'])) {
  104. $result = [];
  105. foreach ($data as $index => $datum) {
  106. $result['field'][$index] = $datum['key'];
  107. $result['value'][$index] = $datum['value'];
  108. }
  109. $data = $result;
  110. }
  111. $fieldarr = $valuearr = [];
  112. $field = isset($data['field']) ? $data['field'] : (isset($data['key']) ? $data['key'] : []);
  113. $value = isset($data['value']) ? $data['value'] : [];
  114. foreach ($field as $m => $n) {
  115. if ($n != '') {
  116. $fieldarr[] = $field[$m];
  117. $valuearr[] = $value[$m];
  118. }
  119. }
  120. return $fieldarr ? array_combine($fieldarr, $valuearr) : [];
  121. }
  122. }