You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

162 lines
5.2 KiB
PHTML

5 years ago
<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
// +----------------------------------------------------------------------
namespace Home\Model;
use Think\Model;
/**
* 分类模型
*/
class CategoryModel extends Model{
protected $_validate = array(
array('name', 'require', '标识不能为空', self::EXISTS_VALIDATE, 'regex', self::MODEL_BOTH),
array('name', '', '标识已经存在', self::VALUE_VALIDATE, 'unique', self::MODEL_BOTH),
array('title', 'require', '名称不能为空', self::MUST_VALIDATE , 'regex', self::MODEL_BOTH),
);
protected $_auto = array(
array('model', 'arr2str', self::MODEL_BOTH, 'function'),
array('model', null, self::MODEL_BOTH, 'ignore'),
array('extend', 'json_encode', self::MODEL_BOTH, 'function'),
array('extend', null, self::MODEL_BOTH, 'ignore'),
array('create_time', NOW_TIME, self::MODEL_INSERT),
array('update_time', NOW_TIME, self::MODEL_BOTH),
array('status', '1', self::MODEL_BOTH),
);
/**
* 获取分类详细信息
* @param milit $id 分类ID或标识
* @param boolean $field 查询字段
* @return array 分类信息
* @author 麦当苗儿 <zuojiazi@vip.qq.com>
*/
public function info($id, $field = true){
/* 获取分类信息 */
$map = array();
if(is_numeric($id)){ //通过ID查询
$map['id'] = $id;
} else { //通过标识查询
$map['name'] = $id;
}
return $this->field($field)->where($map)->find();
}
/**
* 获取分类树,指定分类则返回指定分类极其子分类,不指定则返回所有分类树
* @param integer $id 分类ID
* @param boolean $field 查询字段
* @return array 分类树
* @author 麦当苗儿 <zuojiazi@vip.qq.com>
*/
public function getTree($id = 0, $field = true){
/* 获取当前分类信息 */
if($id){
$info = $this->info($id);
$id = $info['id'];
}
/* 获取所有分类 */
$map = array('status'=>1);
$list = $this->field($field)->where($map)->order('sort')->select();
$list = list_to_tree($list, $pk = 'id', $pid = 'pid', $child = '_', $root = $id);
/* 获取返回数据 */
if(isset($info)){ //指定分类则返回当前分类极其子分类
$info['_'] = $list;
} else { //否则返回所有分类
$info = $list;
}
return $info;
}
/**
* 获取指定分类的同级分类
* @param integer $id 分类ID
* @param boolean $field 查询字段
* @return array
* @author 麦当苗儿 <zuojiazi@vip.qq.com>
*/
public function getSameLevel($id, $field = true){
$info = $this->info($id, 'pid');
$map = array('pid' => $info['pid'], 'status' => 1);
return $this->field($field)->where($map)->order('sort')->select();
}
/**
* 更新分类信息
* @return boolean 更新状态
* @author 麦当苗儿 <zuojiazi@vip.qq.com>
*/
public function update(){
$data = $this->create();
if(!$data){ //数据对象创建错误
return false;
}
/* 添加或更新数据 */
return empty($data['id']) ? $this->add() : $this->save();
}
// lwx
public function getChildrenId($cate,$identify=''){
$field = 'id,name,pid,title,link_id';
$category = D('Category')->getTree($cate, $field);
$ids[] = $cate;
if ($identify) {
foreach ($category['_'] as $key => $value) {
if (in_array($value['name'],$identify))
$ids[] = $value['id'];
}
} else {
foreach ($category['_'] as $key => $value) {
$ids[] = $value['id'];
}
}
return implode(',', $ids);
}
/**
* 查询后解析扩展信息
* @param array $data 分类数据
* @author 麦当苗儿 <zuojiazi@vip.qq.com>
*/
protected function _after_find(&$data, $options){
/* 分割模型 */
if(!empty($data['model'])){
$data['model'] = explode(',', $data['model']);
}
/* 分割文档类型 */
if(!empty($data['type'])){
$data['type'] = explode(',', $data['type']);
}
/* 分割模型 */
if(!empty($data['reply_model'])){
$data['reply_model'] = explode(',', $data['reply_model']);
}
/* 分割文档类型 */
if(!empty($data['reply_type'])){
$data['reply_type'] = explode(',', $data['reply_type']);
}
/* 还原扩展数据 */
if(!empty($data['extend'])){
$data['extend'] = json_decode($data['extend'], true);
}
}
}