Diyform.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. namespace addons\cms\model;
  3. use addons\cms\library\Service;
  4. use think\Db;
  5. use think\Model;
  6. /**
  7. * 自定义表单模型
  8. */
  9. class Diyform extends Model
  10. {
  11. protected $name = "cms_diyform";
  12. // 开启自动写入时间戳字段
  13. protected $autoWriteTimestamp = 'int';
  14. // 定义时间戳字段名
  15. protected $createTime = '';
  16. protected $updateTime = '';
  17. // 追加属性
  18. protected $append = [
  19. 'url',
  20. ];
  21. protected static $config = [];
  22. protected static $tagCount = 0;
  23. protected static function init()
  24. {
  25. $config = get_addon_config('cms');
  26. self::$config = $config;
  27. }
  28. public function getUrlAttr($value, $data)
  29. {
  30. return $this->buildUrl($value, $data);
  31. }
  32. public function getFullurlAttr($value, $data)
  33. {
  34. return $this->buildUrl($value, $data, true);
  35. }
  36. private function buildUrl($value, $data, $domain = false)
  37. {
  38. $diyname = isset($data['diyname']) && $data['diyname'] ? $data['diyname'] : $data['id'];
  39. $time = $data['createtime'] ?? time();
  40. $vars = [
  41. ':id' => $data['id'],
  42. ':diyname' => $diyname,
  43. ':year' => date("Y", $time),
  44. ':month' => date("m", $time),
  45. ':day' => date("d", $time)
  46. ];
  47. $suffix = static::$config['moduleurlsuffix']['diyform'] ?? static::$config['urlsuffix'];
  48. return addon_url('cms/diyform/index', $vars, $suffix, $domain);
  49. }
  50. public function getPosturlAttr($value, $data)
  51. {
  52. $diyname = isset($data['diyname']) && $data['diyname'] ? $data['diyname'] : $data['id'];
  53. $time = $data['createtime'] ?? time();
  54. $vars = [
  55. ':id' => $data['id'],
  56. ':diyname' => $diyname,
  57. ':year' => date("Y", $time),
  58. ':month' => date("m", $time),
  59. ':day' => date("d", $time)
  60. ];
  61. $suffix = static::$config['moduleurlsuffix']['diyform_post'] ?? static::$config['urlsuffix'];
  62. return addon_url('cms/diyform/post', $vars, $suffix);
  63. }
  64. public function getPosttitleAttr($value, $data)
  65. {
  66. return isset($data['posttitle']) && $data['posttitle'] ? $data['posttitle'] : "发布" . $data['title'];
  67. }
  68. public function getSettingAttr($value, $data)
  69. {
  70. return is_array($value) ? $value : (array)json_decode($data['setting'], true);
  71. }
  72. public function setSettingAttr($value)
  73. {
  74. return is_array($value) ? json_encode($value) : $value;
  75. }
  76. public static function getDiyformFields($diyform_id, $values = [])
  77. {
  78. $fields = Service::getCustomFields('diyform', $diyform_id, $values, ['iscontribute' => 1]);
  79. return $fields;
  80. }
  81. public function getOrderFields()
  82. {
  83. $setting = $this->setting;
  84. $orderfields = isset($setting['orderfields']) ? $setting['orderfields'] : [];
  85. $orders = [
  86. ['name' => 'id', 'field' => 'id', 'title' => "ID"],
  87. ['name' => 'createtime', 'field' => 'createtime', 'title' => "添加时间"],
  88. ['name' => 'updatetime', 'field' => 'updatetime', 'title' => "更新时间"],
  89. ];
  90. return array_filter($orders, function ($item) use ($orderfields) {
  91. return in_array($item['name'], $orderfields);
  92. });
  93. }
  94. /**
  95. * 获取自定义表单数据列表
  96. * @param array $params
  97. * @return false|\PDOStatement|string|\think\Collection|array
  98. */
  99. public static function getDiydataList($params)
  100. {
  101. $config = get_addon_config('cms');
  102. $form = empty($params['diyform']) ? '' : $params['diyform'];
  103. $condition = empty($params['condition']) ? '' : $params['condition'];
  104. $field = empty($params['field']) ? '*' : $params['field'];
  105. $row = empty($params['row']) ? 10 : (int)$params['row'];
  106. $orderby = empty($params['orderby']) ? 'createtime' : $params['orderby'];
  107. $orderway = empty($params['orderway']) ? 'desc' : strtolower($params['orderway']);
  108. $limit = empty($params['limit']) ? $row : $params['limit'];
  109. $orderway = in_array($orderway, ['asc', 'desc']) ? $orderway : 'desc';
  110. $paginate = !isset($params['paginate']) ? false : $params['paginate'];
  111. list($cacheKey, $cacheExpire) = Service::getCacheKeyExpire('diydatalist', $params);
  112. self::$tagCount++;
  113. $where = [];
  114. $diyform = null;
  115. $diyform = Diyform::where("id", $form)->cache(true)->find();
  116. if (!$diyform) {
  117. return [];
  118. }
  119. $order = $orderby == 'rand' ? Db::raw('rand()') : (preg_match("/\,|\s/", $orderby) ? $orderby : "{$orderby} {$orderway}");
  120. $diydataModel = (new Diydata([], $diyform))->where($where)
  121. ->where('status', 'normal')
  122. ->where('status', '<>', $diyform['id'])
  123. ->where($condition)
  124. ->field($field)
  125. ->orderRaw($order);
  126. if ($paginate) {
  127. list($listRows, $simple, $config) = Service::getPaginateParams('dpage' . self::$tagCount, $params);
  128. $list = $diydataModel->paginate($listRows, $simple, $config);
  129. } else {
  130. $list = $diydataModel->limit($limit)->cache($cacheKey, $cacheExpire)->select();
  131. }
  132. return $list;
  133. }
  134. }