| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- <?php
- namespace app\admin\model\cms;
- use app\admin\model\general\Lang as LangModel;
- use think\Exception;
- use think\Model;
- class Page extends Model
- {
- protected $name = 'cms_page';
- protected $autoWriteTimestamp = true;
- protected $append = [
- 'publish_time_text',
- ];
- public function getPublishTimeTextAttr($value, $data)
- {
- $value = $value ? $value : ($data['publish_time'] ?? null);
- return is_numeric($value) ? date('Y-m-d H:i:s', $value) : $value;
- }
- protected function setPublishTimeAttr($value)
- {
- return $value && !is_numeric($value) ? strtotime($value) : ($value ? $value : null);
- }
- public function savePage($data, $lang = null)
- {
- if (empty($data) || empty($data['catid'])) {
- throw new Exception('内容不能为空!');
- }
- $lang = $lang ?: LangModel::getDefaultMark();
- $mainData = [
- 'catid' => $data['catid'],
- 'thumb' => $data['thumb'] ?? '',
- 'hits' => $data['hits'] ?? 0,
- 'publish_time' => isset($data['publish_time']) ? $this->setPublishTimeAttr($data['publish_time']) : time(),
- ];
- $translateData = [
- 'lang' => $lang,
- 'title' => $data['title'] ?? '',
- 'keywords' => $data['keywords'] ?? '',
- 'description' => $data['description'] ?? '',
- 'content' => $data['content'] ?? '',
- ];
- $row = self::where('catid', $data['catid'])->find();
- if ($row) {
- $row->save($mainData);
- } else {
- $row = self::create($mainData);
- }
- $pageData = PageData::where(['page_id' => $row->id, 'lang' => $lang])->find();
- if ($pageData) {
- $pageData->save($translateData);
- } else {
- $translateData['page_id'] = $row->id;
- PageData::create($translateData);
- }
- return true;
- }
- public function getPageWithLang($catid, $lang = null)
- {
- $lang = $lang ?: LangModel::getDefaultMark();
- $defaultLang = LangModel::getDefaultMark();
- $row = self::where('catid', $catid)->find();
- if (!$row) {
- return null;
- }
- $translate = PageData::where(['page_id' => $row->id, 'lang' => $lang])->find();
- if (!$translate && $lang !== $defaultLang) {
- $translate = PageData::where(['page_id' => $row->id, 'lang' => $defaultLang])->find();
- }
- $data = $row->toArray();
- $data['lang'] = $lang;
- $data['title'] = $translate['title'] ?? '';
- $data['keywords'] = $translate['keywords'] ?? '';
- $data['description'] = $translate['description'] ?? '';
- $data['content'] = $translate['content'] ?? '';
- $data['has_translation'] = $translate ? 1 : 0;
- return $data;
- }
- public static function onBeforeDelete($row)
- {
- PageData::where('page_id', $row->id)->delete();
- }
- public function category()
- {
- return $this->belongsTo('Category', 'catid', 'id');
- }
- }
|