Page.php 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. namespace app\admin\model\cms;
  3. use app\admin\model\general\Lang as LangModel;
  4. use think\Exception;
  5. use think\Model;
  6. class Page extends Model
  7. {
  8. protected $name = 'cms_page';
  9. protected $autoWriteTimestamp = true;
  10. protected $append = [
  11. 'publish_time_text',
  12. ];
  13. public function getPublishTimeTextAttr($value, $data)
  14. {
  15. $value = $value ? $value : ($data['publish_time'] ?? null);
  16. return is_numeric($value) ? date('Y-m-d H:i:s', $value) : $value;
  17. }
  18. protected function setPublishTimeAttr($value)
  19. {
  20. return $value && !is_numeric($value) ? strtotime($value) : ($value ? $value : null);
  21. }
  22. public function savePage($data, $lang = null)
  23. {
  24. if (empty($data) || empty($data['catid'])) {
  25. throw new Exception('内容不能为空!');
  26. }
  27. $lang = $lang ?: LangModel::getDefaultMark();
  28. $mainData = [
  29. 'catid' => $data['catid'],
  30. 'thumb' => $data['thumb'] ?? '',
  31. 'hits' => $data['hits'] ?? 0,
  32. 'publish_time' => isset($data['publish_time']) ? $this->setPublishTimeAttr($data['publish_time']) : time(),
  33. ];
  34. $translateData = [
  35. 'lang' => $lang,
  36. 'title' => $data['title'] ?? '',
  37. 'keywords' => $data['keywords'] ?? '',
  38. 'description' => $data['description'] ?? '',
  39. 'content' => $data['content'] ?? '',
  40. ];
  41. $row = self::where('catid', $data['catid'])->find();
  42. if ($row) {
  43. $row->save($mainData);
  44. } else {
  45. $row = self::create($mainData);
  46. }
  47. $pageData = PageData::where(['page_id' => $row->id, 'lang' => $lang])->find();
  48. if ($pageData) {
  49. $pageData->save($translateData);
  50. } else {
  51. $translateData['page_id'] = $row->id;
  52. PageData::create($translateData);
  53. }
  54. return true;
  55. }
  56. public function getPageWithLang($catid, $lang = null)
  57. {
  58. $lang = $lang ?: LangModel::getDefaultMark();
  59. $defaultLang = LangModel::getDefaultMark();
  60. $row = self::where('catid', $catid)->find();
  61. if (!$row) {
  62. return null;
  63. }
  64. $translate = PageData::where(['page_id' => $row->id, 'lang' => $lang])->find();
  65. if (!$translate && $lang !== $defaultLang) {
  66. $translate = PageData::where(['page_id' => $row->id, 'lang' => $defaultLang])->find();
  67. }
  68. $data = $row->toArray();
  69. $data['lang'] = $lang;
  70. $data['title'] = $translate['title'] ?? '';
  71. $data['keywords'] = $translate['keywords'] ?? '';
  72. $data['description'] = $translate['description'] ?? '';
  73. $data['content'] = $translate['content'] ?? '';
  74. $data['has_translation'] = $translate ? 1 : 0;
  75. return $data;
  76. }
  77. public static function onBeforeDelete($row)
  78. {
  79. PageData::where('page_id', $row->id)->delete();
  80. }
  81. public function category()
  82. {
  83. return $this->belongsTo('Category', 'catid', 'id');
  84. }
  85. }