Modelx.php 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace addons\cms\model;
  3. use addons\cms\library\Service;
  4. use think\Config;
  5. use think\Model;
  6. /**
  7. * 模型
  8. */
  9. class Modelx extends Model
  10. {
  11. protected $name = "cms_model";
  12. // 开启自动写入时间戳字段
  13. protected $autoWriteTimestamp = 'int';
  14. // 定义时间戳字段名
  15. protected $createTime = 'createtime';
  16. protected $updateTime = 'updatetime';
  17. // 追加属性
  18. protected $append = [
  19. ];
  20. public function getFieldsAttr($value, $data)
  21. {
  22. return is_array($value) ? $value : ($value ? explode(',', $value) : []);
  23. }
  24. public function getSettingAttr($value, $data)
  25. {
  26. return (array)json_decode($value, true);
  27. }
  28. public function getFieldsListAttr($value, $data)
  29. {
  30. return Fields::where('source', 'model')->where('source_id', $data['id'])->where('status', 'normal')->cache(true)->select();
  31. }
  32. public function getFieldsContentList($model_id)
  33. {
  34. $list = Fields::where('source', 'model')
  35. ->where('source_id', $model_id)
  36. ->field('id,name,type,content')
  37. ->where('status', 'normal')
  38. ->cache(true)
  39. ->select();
  40. $fieldsList = [];
  41. $listFields = Fields::getListFields();
  42. foreach ($list as $index => $item) {
  43. if (in_array($item['type'], $listFields)) {
  44. $fieldsList[$item['name']] = $item['content_list'];
  45. }
  46. }
  47. return $fieldsList;
  48. }
  49. /**
  50. * 判断字段是否可投稿
  51. * @param string $field 字段名称
  52. * @return bool
  53. */
  54. public function iscontribute($field)
  55. {
  56. $setting = $this->setting;
  57. $contributefields = isset($setting['contributefields']) ? $setting['contributefields'] : [];
  58. return in_array($field, $contributefields);
  59. }
  60. /**
  61. * 获取排序字段信息
  62. * @return array
  63. */
  64. public function getOrderFields()
  65. {
  66. $setting = $this->setting;
  67. $orderfields = isset($setting['orderfields']) ? $setting['orderfields'] : [];
  68. $result = [];
  69. $prefix = Config::get('database.prefix');
  70. $fields = Service::getTableFields($prefix . "cms_archives");
  71. $titles = [];
  72. foreach ($fields as $index => $field) {
  73. $titles[$field['name']] = $field['title'];
  74. }
  75. $titles = array_merge($titles, isset($setting['titlelist']) ? $setting['titlelist'] : []);
  76. foreach ($orderfields as $index => $orderfield) {
  77. $title = isset($titles[$orderfield]) ? $titles[$orderfield] : $orderfield;
  78. $result[] = ['name' => $orderfield, 'field' => $orderfield, 'title' => $title];
  79. }
  80. return $result;
  81. }
  82. }