| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- <?php
- namespace app\admin\model\cms;
- use app\admin\model\general\Lang as LangModel;
- use think\Exception;
- use think\facade\Cache;
- use think\facade\Db;
- use think\Model;
- class Category extends Model
- {
- protected $name = 'cms_category';
- protected static $arrparent;
- protected static $arrchild;
- public function getSettingAttr($value, $data)
- {
- return is_array($value) ? $value : (array) json_decode($data['setting'], true);
- }
- public function setSettingAttr($value)
- {
- return is_array($value) ? json_encode($value, JSON_UNESCAPED_UNICODE) : $value;
- }
- public static function onAfterWrite($row)
- {
- $cmsConfig = get_addon_config('cms');
- if (isset($cmsConfig['site_weburlpush']) && $cmsConfig['site_weburlpush']) {
- hook('weburlpush', buildCatUrl($row->id, '', true, true));
- }
- if (isset($row['priv_groupid'])) {
- CategoryPriv::update_priv($row->id, $row->priv_groupid, 0);
- }
- Cache::set('Category', null);
- }
- public static function onAfterInsert($row)
- {
- $defaultLang = LangModel::getDefaultMark();
- self::saveTranslation($row->id, [
- 'catname' => $row->catname,
- 'description' => $row->description,
- 'meta_title' => $row->setting['meta_title'] ?? '',
- 'meta_keywords' => $row->setting['meta_keywords'] ?? '',
- 'meta_description' => $row->setting['meta_description'] ?? '',
- ], $defaultLang);
- if ($row['type'] == 1) {
- (new Page)->savePage([
- 'catid' => $row->id,
- 'title' => $row->catname,
- ], $defaultLang);
- }
- }
- public static function onBeforeUpdate($row)
- {
- if (isset($row['template_child']) && $row['template_child']) {
- $setting['category_template'] = $row['setting']['category_template'] ?? '';
- $setting['list_template'] = $row['setting']['list_template'] ?? '';
- $setting['show_template'] = $row['setting']['show_template'] ?? '';
- $setting['page_template'] = $row['setting']['page_template'] ?? '';
- $idstr = self::get_arrchildid($row->id);
- $children = Category::where('id', 'in', $idstr)->select();
- foreach ($children as $child) {
- $child->setting = array_merge($child->setting, $setting);
- $child->save();
- }
- }
- }
- public static function onAfterUpdate($row)
- {
- $changedData = $row->getChangedData();
- if ($row['type'] == 1 && isset($changedData['type'])) {
- (new Page)->savePage([
- 'catid' => $row->id,
- 'title' => $row->catname,
- ], LangModel::getDefaultMark());
- }
- getCategory($row->id, '', true);
- }
- public static function onBeforeDelete($row)
- {
- if (self::where('parentid', $row->id)->find()) {
- throw new Exception('栏目含有子栏目,不得删除!');
- }
- $catInfo = self::find($row->id);
- if ($catInfo['modelid'] && $catInfo['type'] == 2) {
- $tbname = getModel($catInfo['modelid'], 'tablename');
- if ($tbname && Db::name($tbname)->where(['catid' => $row->id])->find()) {
- throw new Exception('栏目含有信息,不得删除!');
- }
- } else {
- Page::where(['catid' => $row->id])->delete();
- }
- Db::name('cms_category_data')->where('catid', $row->id)->delete();
- Cache::set('Category', null);
- }
- public static function saveTranslation($catid, array $data, $lang)
- {
- $payload = [
- 'catname' => $data['catname'] ?? '',
- 'description' => $data['description'] ?? '',
- 'meta_title' => $data['meta_title'] ?? '',
- 'meta_keywords' => $data['meta_keywords'] ?? '',
- 'meta_description' => $data['meta_description'] ?? '',
- ];
- $row = CategoryData::where(['catid' => $catid, 'lang' => $lang])->find();
- if ($row) {
- $row->save($payload);
- } else {
- $payload['catid'] = $catid;
- $payload['lang'] = $lang;
- CategoryData::create($payload);
- }
- }
- public static function getTranslate($catid, $lang = null)
- {
- $lang = $lang ?: LangModel::getDefaultMark();
- $defaultLang = LangModel::getDefaultMark();
- $translate = CategoryData::where(['catid' => $catid, 'lang' => $lang])->find();
- if (!$translate && $lang !== $defaultLang) {
- $translate = CategoryData::where(['catid' => $catid, 'lang' => $defaultLang])->find();
- }
- return $translate;
- }
- public static function get_arrparentid($catid, $withself = false)
- {
- static $tree;
- if (!$tree) {
- $tree = \util\Tree::instance();
- $tree->init(Category::order('id asc')->field('id,parentid,catname')->select()->toArray(), 'parentid');
- }
- $parentIds = $tree->getParentsIds($catid, $withself);
- return implode(',', $parentIds);
- }
- public static function get_arrchildid($catid, $withself = false)
- {
- static $tree;
- if (!$tree) {
- $tree = \util\Tree::instance();
- $tree->init(Category::order('id asc')->field('id,parentid,catname')->select()->toArray(), 'parentid');
- }
- $childIds = $tree->getChildrenIds($catid, $withself);
- return implode(',', $childIds);
- }
- }
|