128], [['desc'], 'string', 'max' => 256], [['img_url', 'big_img_url', 'advert_pic', 'advert_url', 'advert_open_params'], 'string', 'max' => 2048], ]; } /** * {@inheritdoc} */ public function attributeLabels() { return [ 'id' => 'ID', 'cx_mch_id' => '平台商户ID', 'type' => '类型', 'name' => '名称', 'desc' => '描述', 'img_url' => '图片', 'parent_id' => '父ID', 'sort' => '排序,默认100,升序', 'is_delete' => '是否删除,0=否,1=是', 'created_at' => '添加时间', 'updated_at' => '更新时间', 'deleted_at' => '删除时间', 'status' => '是否启用,0=否,1=是', 'is_hide' => '是否隐藏,0=否,1=是', 'big_img_url' => '大图', 'advert_pic' => '广告图', 'advert_url' => '广告链接', 'advert_url_type' => '广告链接类型', 'advert_open_params' => '广告链接打开参数', ]; } public function beforeSave($insert) { if(parent::beforeSave($insert)){ if($this->isNewRecord){ $this->created_at = time(); } $this->updated_at = time(); if($this->is_delete == 1) $this->deleted_at = time(); $this->htmlTagFilter(); return true; } else { return false; } } public function htmlTagFilter() { $this->name = Model::htmlTagFilter($this->name); $this->desc = Model::htmlTagFilter($this->desc); $this->img_url = Model::htmlTagFilter($this->img_url); $this->big_img_url = Model::htmlTagFilter($this->big_img_url); $this->advert_pic = Model::htmlTagFilter($this->advert_pic); $this->advert_url = Model::htmlTagFilter($this->advert_url); } /** * 获取分类层次数组,可以默认获取整个分类树的数组,也可以获取指定父id的分类树数组 * @param integer $parent * @return array * @throws */ public static function getTagTreeArray($parent = 0, $type = 0, $cx_mch_id = 0) { $parent = intval($parent); $topLevelTags = []; //首先确认数据是否已经获取,不需要重复获取数据 if(count(self::$parentTags) == 0) { $allTags = Cat::find()->where(['cx_mch_id' => $cx_mch_id, 'type' => $type, 'is_delete' => 0])->select('id,type,name,desc,img_url,parent_id,sort,created_at,big_img_url,status,is_hide,advert_pic,advert_url,advert_url_type,advert_open_params')->orderBy(['sort' => SORT_ASC])->asArray()->all(); //先把获取的全量数组按照parent为数组键值重新排列,使用引用的方式提高效率 foreach(array_keys($allTags) as $key) { self::$parentTags[$allTags[$key]['parent_id']][] = &$allTags[$key]; } } //从parent为键值的数组中获取带有层次信息的数组,$level为层级 $level = 0; $result = self::getChildTags($parent, $level, $cx_mch_id); if(is_array($result)) $topLevelTags = array_merge($topLevelTags, $result); return $topLevelTags; } /** * 获取某个父节点下面的所有子节点的数组 * @param integer $parent * @param integer $level * @return array * @throws */ private static function getChildTags($parent = 0, $level = 0, $cx_mch_id = 0) { $list = []; if(!array_key_exists($parent, self::$parentTags)) return null; foreach(self::$parentTags[$parent] as $tag) { $tag['level'] = $level; $list[] = $tag; //递归调用,直到获取所有的子节点 $result = self::getChildTags($tag['id'], $level + 1); if(is_array($result)) $list = array_merge($list, $result); } return $list; } }