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); } }