File: /www/wwwroot/dd.cwoyt.com/Application/Admin/Controller/ThinkController.class.php
<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: 赛脑 <2233759493@qq.com> <http://www.sn.com>
// +----------------------------------------------------------------------
namespace Admin\Controller;
/**
* 模型数据管理控制器
* @author 赛脑 <2233759493@qq.com>
*/
class ThinkController extends AdminController {
/**
* 显示指定模型列表数据
* @param String $model 模型标识
* @author 赛脑 <2233759493@qq.com>
*/
public function lists($model = null, $p = 0){
$model || $this->error('模型名标识必须!');
$page = intval($p);
$page = $page ? $page : 1; //默认显示第一页数据
//获取模型信息
$model = M('Model')->getByName($model);
$model || $this->error('模型不存在!');
//解析列表规则
$fields = array();
$grids = preg_split('/[;\r\n]+/s', $model['list_grid']);
foreach ($grids as &$value) {
// 字段:标题:链接
$val = explode(':', $value);
// 支持多个字段显示
$field = explode(',', $val[0]);
$value = array('field' => $field, 'title' => $val[1]);
if(isset($val[2])){
// 链接信息
$value['href'] = $val[2];
// 搜索链接信息中的字段信息
preg_replace_callback('/\[([a-z_]+)\]/', function($match) use(&$fields){$fields[]=$match[1];}, $value['href']);
}
if(strpos($val[1],'|')){
// 显示格式定义
list($value['title'],$value['format']) = explode('|',$val[1]);
}
foreach($field as $val){
$array = explode('|',$val);
$fields[] = $array[0];
}
}
// 过滤重复字段信息
$fields = array_unique($fields);
// 关键字搜索
$map = array();
$key = $model['search_key']?$model['search_key']:'title';
if(isset($_REQUEST[$key])){
$map[$key] = array('like','%'.$_GET[$key].'%');
unset($_REQUEST[$key]);
}
// 条件搜索
foreach($_REQUEST as $name=>$val){
if(in_array($name,$fields)){
$map[$name] = $val;
}
}
$row = empty($model['list_row']) ? 10 : $model['list_row'];
//读取模型数据列表
if($model['extend']){
$name = get_table_name($model['id']);
$parent = get_table_name($model['extend']);
$fix = C("DB_PREFIX");
$key = array_search('id', $fields);
if(false === $key){
array_push($fields, "{$fix}{$parent}.id as id");
} else {
$fields[$key] = "{$fix}{$parent}.id as id";
}
/* 查询记录数 */
$count = M($parent)->join("INNER JOIN {$fix}{$name} ON {$fix}{$parent}.id = {$fix}{$name}.id")->where($map)->count();
// 查询数据
$data = M($parent)
->join("INNER JOIN {$fix}{$name} ON {$fix}{$parent}.id = {$fix}{$name}.id")
/* 查询指定字段,不指定则查询所有字段 */
->field(empty($fields) ? true : $fields)
// 查询条件
->where($map)
/* 默认通过id逆序排列 */
->order("{$fix}{$parent}.id DESC")
/* 数据分页 */
->page($page, $row)
/* 执行查询 */
->select();
} else {
in_array('id', $fields) || array_push($fields, 'id');
$name = parse_name(get_table_name($model['id']), true);
$data = M($name)
/* 查询指定字段,不指定则查询所有字段 */
->field(empty($fields) ? true : $fields)
// 查询条件
->where($map)
/* 默认通过id逆序排列 */
->order('id DESC')
/* 数据分页 */
->page($page, $row)
/* 执行查询 */
->select();
/* 查询记录总数 */
$count = M($name)->where($map)->count();
}
//分页
if($count > $row){
$page = new \COM\Page($count, $row);
$page->setConfig('theme','%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%');
$this->assign('_page', $page->show());
}
$this->assign('model', $model);
$this->assign('list_grids', $grids);
$this->assign('list_data', $data);
$this->meta_title = $model['title'].'列表';
$this->display($model['template_list']);
}
public function del($model = null, $ids=null){
$model = M('Model')->find($model);
$model || $this->error('模型不存在!');
$ids = array_unique((array)I('ids',0));
if ( empty($ids) ) {
$this->error('请选择要操作的数据!');
}
$Model = M(get_table_name($model['id']));
$map = array('id' => array('in', $ids) );
if($Model->where($map)->delete()){
$this->success('删除成功');
} else {
$this->error('删除失败!');
}
}
public function edit($model = null, $id = 0){
//获取模型信息
$model = M('Model')->find($model);
$model || $this->error('模型不存在!');
if(IS_POST){
$Model = D(parse_name(get_table_name($model['id']),1));
if($Model->create() && $Model->save()){
$this->success('保存成功!', U('lists?model='.$model['name']));
} else {
$this->error($Model->getError());
}
} else {
$fields = get_model_attribute($model['id']);
//获取数据
$data = M(get_table_name($model['id']))->find($id);
$data || $this->error('数据不存在!');
$this->assign('model', $model);
$this->assign('fields', $fields);
$this->assign('data', $data);
$this->meta_title = '编辑'.$model['title'];
$this->display();
}
}
public function add($model = null){
//获取模型信息
$model = M('Model')->where(array('status' => 1))->find($model);
$model || $this->error('模型不存在!');
if(IS_POST){
$Model = D(parse_name(get_table_name($model['id']),1));
if($Model->create() && $Model->add()){
$this->success('添加成功!', U('lists?model='.$model['name']));
} else {
$this->error($Model->getError());
}
} else {
$fields = get_model_attribute($model['id']);
$this->assign('model', $model);
$this->assign('fields', $fields);
$this->meta_title = '新增'.$model['title'];
$this->display();
}
}
}