Page.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. namespace addons\cms\model;
  3. use think\Model;
  4. use think\facade\Db;
  5. class Page extends Model
  6. {
  7. protected $name = 'cms_page';
  8. protected $autoWriteTimestamp = true;
  9. public static function getCurrentLang()
  10. {
  11. if (function_exists('cms_current_lang')) {
  12. return cms_current_lang();
  13. }
  14. $request = request();
  15. $default = (string)(Db::name('lang')->where('is_default', 1)->value('mark') ?: 'cn');
  16. $regionCode = strtoupper((string)$request->param('region/s', ''));
  17. if ($regionCode !== '' && function_exists('cms_lang_by_region_code')) {
  18. return cms_lang_by_region_code($regionCode, $default);
  19. }
  20. $pathinfo = trim($request->pathinfo(), '/');
  21. if ($pathinfo !== '') {
  22. $segments = explode('/', $pathinfo);
  23. $first = strtoupper($segments[0] ?? '');
  24. if ($first !== '' && function_exists('cms_lang_by_region_code')) {
  25. return cms_lang_by_region_code($first, $default);
  26. }
  27. }
  28. return $default;
  29. }
  30. public static function getPageWithLangByCatid($catid, $lang = null)
  31. {
  32. $lang = $lang ?: self::getCurrentLang();
  33. $defaultLang = cms_default_lang();
  34. $row = self::where('catid', $catid)->find();
  35. if (!$row) {
  36. return null;
  37. }
  38. $translate = Db::name('cms_page_data')->where(['page_id' => $row->id, 'lang' => $lang])->find();
  39. if (!$translate && $lang !== $defaultLang) {
  40. $translate = Db::name('cms_page_data')->where(['page_id' => $row->id, 'lang' => $defaultLang])->find();
  41. }
  42. $data = $row->toArray();
  43. $data['lang'] = $lang;
  44. $data['title'] = $translate['title'] ?? ($data['title'] ?? '');
  45. $data['keywords'] = $translate['keywords'] ?? ($data['keywords'] ?? '');
  46. $data['description'] = $translate['description'] ?? ($data['description'] ?? '');
  47. $data['content'] = $translate['content'] ?? ($data['content'] ?? '');
  48. $data['translation_lang'] = $translate['lang'] ?? $defaultLang;
  49. return $data;
  50. }
  51. }