Diydata.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. namespace addons\cms\model;
  3. use addons\cms\library\Service;
  4. use think\Model;
  5. class Diydata extends Model
  6. {
  7. // 开启自动写入时间戳字段
  8. protected $autoWriteTimestamp = 'int';
  9. // 定义时间戳字段名
  10. protected $createTime = 'createtime';
  11. protected $updateTime = 'updatetime';
  12. public $diyform = null;
  13. protected static $config = [];
  14. protected static $diyformModel = null;
  15. protected static function init()
  16. {
  17. $config = get_addon_config('cms');
  18. self::$config = $config;
  19. self::beforeWrite(function ($row) {
  20. $data = $row->getData();
  21. foreach ($data as $index => &$value) {
  22. if (is_array($value) && isset($value['field'])) {
  23. $value = json_encode(\app\common\model\Config::getArrayData($value), JSON_UNESCAPED_UNICODE);
  24. } else {
  25. $value = is_array($value) ? implode(',', $value) : $value;
  26. }
  27. $row->setAttr($index, $value);
  28. }
  29. });
  30. }
  31. public function __construct($data = [], $diyform = null)
  32. {
  33. if ($diyform) {
  34. static::$diyformModel = $diyform;
  35. $this->diyform = $diyform;
  36. $this->name = $this->diyform['table'];
  37. $class = get_class($this);
  38. //避免query不重新创建
  39. unset(static::$initialized[$class]);
  40. unset(self::$links[$class]);
  41. }
  42. return parent::__construct($data);
  43. }
  44. public function getDiyform()
  45. {
  46. return static::$diyformModel;
  47. }
  48. public function getAttr($name)
  49. {
  50. //获取自定义字段关联表数据
  51. if (!isset($this->data[$name]) && preg_match("/(.*)_value\$/i", $name, $matches)) {
  52. $key = $this->data[$matches[1]] ?? '';
  53. if (!$key) {
  54. return '';
  55. }
  56. return Service::getRelationFieldValue('diyform', static::$diyformModel['id'], $matches[1], $key);
  57. }
  58. return parent::getAttr($name);
  59. }
  60. public function getUrlAttr($value, $data)
  61. {
  62. return $this->buildUrl($value, $data);
  63. }
  64. public function getFullurlAttr($value, $data)
  65. {
  66. return $this->buildUrl($value, $data, true);
  67. }
  68. private function buildUrl($value, $data, $domain = false)
  69. {
  70. $diyname = !empty(static::$diyformModel['diyname']) ? static::$diyformModel['diyname'] : 'all';
  71. $time = $data['createtime'] ?? time();
  72. $vars = [
  73. ':id' => $data['id'],
  74. ':diyname' => $diyname,
  75. ':year' => date("Y", $time),
  76. ':month' => date("m", $time),
  77. ':day' => date("d", $time)
  78. ];
  79. $suffix = static::$config['moduleurlsuffix']['diyform_show'] ?? static::$config['urlsuffix'];
  80. return addon_url('cms/diyform/show', $vars, $suffix, $domain);
  81. }
  82. public function getStatusList()
  83. {
  84. return ['normal' => __('Normal'), 'hidden' => __('Hidden'), 'rejected' => __('Rejected')];
  85. }
  86. public function getStatusTextAttr($value, $data)
  87. {
  88. $value = $value ? $value : $data['status'];
  89. $list = $this->getStatusList();
  90. return isset($list[$value]) ? $list[$value] : '';
  91. }
  92. }