Archives.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. namespace app\admin\model\wwh;
  3. use think\Db;
  4. use think\Model;
  5. class Archives extends Model
  6. {
  7. // 表名
  8. protected $name = 'wwh_archives';
  9. // 自动写入时间戳字段
  10. protected $autoWriteTimestamp = 'int';
  11. // 定义时间戳字段名
  12. protected $createTime = 'createtime';
  13. protected $updateTime = 'updatetime';
  14. protected $deleteTime = false;
  15. // 追加属性
  16. protected $append = [
  17. 'type_text',
  18. 'rec_data_text',
  19. 'lang_text',
  20. 'd_type_text',
  21. 'url',
  22. ];
  23. protected static function init()
  24. {
  25. self::afterInsert(function ($row) {
  26. $pk = $row->getPk();
  27. $column = Column::get($row['column_id']);
  28. $nav = Db::name('wwh_column')->where('id', $row['column_id'])->find();
  29. $tpl = $nav['showtpl'];
  30. $row->getQuery()->where($pk, $row[$pk])->update(['weigh' => $row[$pk], 'classify' => $column['classify'], 'tpl'=>$tpl]);
  31. });
  32. self::beforeInsert(function ($row) {
  33. $column_ids = 0;
  34. if ($row->column_id != 0) {
  35. $column_ids = self::getParentIds($row->column_id);
  36. $column_ids .= "," . $row->column_id;
  37. }
  38. $row->column_ids = $column_ids;
  39. });
  40. self::beforeUpdate(function ($row) {
  41. $pk = $row->getPk();
  42. $changeData = $row->getChangedData();
  43. if (isset($changeData['column_id'])) {
  44. $row->column_ids = self::getParentIds($row->column_id) . ',' . $row->column_id;
  45. }
  46. $column = Column::get($row['column_id']);
  47. $nav = Db::name('wwh_column')->where('id', $row['column_id'])->find();
  48. $tpl = $nav['showtpl'];
  49. $row->getQuery()->where($pk, $row[$pk])->update(['classify' => $column['classify'], 'tpl'=>$tpl]);
  50. });
  51. }
  52. public static function getParentIds($parent_id) {
  53. $row = Column::get($parent_id);
  54. if ( !$row ) {
  55. return 0;
  56. }
  57. return $row->parent_ids;
  58. }
  59. public static function getTypeList()
  60. {
  61. return ['product' => __('Product'), 'cases' => __('Cases'), 'download' => __('Download'), 'news' => __('News')];
  62. }
  63. public function getUrlAttr($value, $data)
  64. {
  65. return $this->buildUrl($value, $data);
  66. }
  67. private function buildUrl($value, $data)
  68. {
  69. $column = Db::name('wwh_column')->where('id', $data['column_id'])->find();
  70. if ($data['classify'] == 'download'){
  71. return addon_url('wwh/column/index', [':diyname'=>'download'],'html');
  72. }else{
  73. return addon_url('wwh/archives/index', [':diyname' => $column['diyname'], ':id' => $data['id']],'html');
  74. }
  75. }
  76. public function getRecDataList()
  77. {
  78. return ['0' => __('Rec_data 0'), '1' => __('Rec_data 1'), '10' => __('Rec_data 10')];
  79. }
  80. public function getLangList()
  81. {
  82. return ['1' => __('Lang 1'), '2' => __('Lang 2')];
  83. }
  84. public function getdTypeList()
  85. {
  86. return ['1' => __('用户手册'), '2' => __('产品彩页'), '3' => __('驱动程序'), '4' => __('其他')];
  87. }
  88. public function getTypeTextAttr($value, $data)
  89. {
  90. $value = $value ? $value : $data['type'];
  91. $list = $this->getTypeList();
  92. return isset($list[$value]) ? $list[$value] : '';
  93. }
  94. public function getRecDataTextAttr($value, $data)
  95. {
  96. $value = $value ? $value : (isset($data['rec_data']) ? $data['rec_data'] : '');
  97. $valueArr = explode(',', $value);
  98. $list = $this->getRecDataList();
  99. return implode(',', array_intersect_key($list, array_flip($valueArr)));
  100. }
  101. public function getLangTextAttr($value, $data)
  102. {
  103. $value = $value ?: ($data['lang'] ?? '');
  104. $list = $this->getLangList();
  105. return $list[$value] ?? '';
  106. }
  107. public function getdTypeTextAttr($value, $data)
  108. {
  109. $value = $value ? $value : $data['d_type'];
  110. $list = $this->getdTypeList();
  111. return isset($list[$value]) ? $list[$value] : '';
  112. }
  113. protected function setRecDataAttr($value)
  114. {
  115. return is_array($value) ? implode(',', $value) : $value;
  116. }
  117. public function column()
  118. {
  119. return $this->hasOne('app\admin\model\wwh\Column', 'id', 'column_id');
  120. }
  121. }