Beispiel #1
1
function do_embed_lazy($html = '')
{
    if (is_exit() || empty($html)) {
        return $html;
    }
    $patern_ifr = '/<\\s*iframe\\s+(?<attr>[^>]*)/i';
    if (preg_match($patern_ifr, $html, $ifr)) {
        $attr_arr = parse_attr($ifr['attr']);
        if (!$attr_arr || empty($attr_arr['src']) || LAZY_PLACEHOLDER === $attr_arr['src'] || !empty($attr_arr['data-src'])) {
            return $html;
        }
        if (array_key_exists('class', $attr_arr)) {
            $attr_arr['class'] = do_class($attr_arr['class']);
        } else {
            $attr_arr['class'] = LAZY_CLASS;
        }
        $attr_arr['data-src'] = $attr_arr['src'];
        $attr_arr['src'] = LAZY_PLACEHOLDER;
        $html = str_replace($ifr['attr'], trim(attributes_to_string($attr_arr)), $html);
        get_assets();
    }
    return $html;
}
 /**
  * 获取配置列表
  * @return array 配置数组
  */
 public function lists()
 {
     $map['status'] = array('gt', 0);
     $list = $this->where($map)->field('name,value,type')->select();
     foreach ($list as $key => $val) {
         if ($val['type'] === 'array') {
             //数组类型需要解析配置的value
             $config[$val['name']] = parse_attr($val['value']);
         } else {
             $config[$val['name']] = $val['value'];
         }
     }
     return $config;
 }
 /**
  * 获取某个分组的配置参数
  */
 public function group($tab = 1)
 {
     //根据分组获取配置
     $map['status'] = array('egt', 0);
     //禁用和正常状态
     $map['group'] = array('eq', $tab);
     $data_list = D('SystemConfig')->where($map)->order('sort asc,id asc')->select();
     //构造表单名、解析options
     foreach ($data_list as &$data) {
         $data['name'] = 'config[' . $data['name'] . ']';
         $data['options'] = parse_attr($data['options']);
     }
     //使用FormBuilder快速建立表单页面。
     $builder = new \Common\Builder\FormBuilder();
     $builder->title('系统设置')->setTablist(C('CONFIG_GROUP_LIST'))->setCurrentTab($tab)->setUrl(U('groupSave'))->setExtraItems($data_list)->display();
 }
 /**
  * 获取配置列表与ThinkPHP配置合并
  * @return array 配置数组
  * @author jry <*****@*****.**>
  */
 public function lists()
 {
     $map['status'] = array('eq', 1);
     $list = $this->where($map)->field('name,value,type')->select();
     foreach ($list as $key => $val) {
         switch ($val['type']) {
             case 'array':
                 $config[$val['name']] = parse_attr($val['value']);
                 break;
             case 'checkbox':
                 $config[$val['name']] = explode(',', $val['value']);
                 break;
             default:
                 $config[$val['name']] = $val['value'];
                 break;
         }
     }
     return $config;
 }
 /**
  * 用户列表
  * @author jry <*****@*****.**>
  */
 public function index($user_type = 1)
 {
     // 获取用户类型的搜索字段
     $user_type_info = D('User/Type')->find($user_type);
     $con = array();
     $con['user_type'] = $user_type;
     $con['id'] = array('in', $user_type_info['list_field']);
     $query_attribute = D('User/Attribute')->where($con)->select();
     foreach ($query_attribute as &$value) {
         $value['options'] = parse_attr($value['options']);
         // 构造搜索条件
         if ($_GET[$value['name']] !== 'all' && $_GET[$value['name']]) {
             switch ($value['type']) {
                 case 'radio':
                     $tmp = $_GET[$value['name']];
                     $map[$value['name']] = $tmp;
                     break;
                 case 'select':
                     $tmp = $_GET[$value['name']];
                     $map[$value['name']] = $tmp;
                     break;
                 case 'checkbox':
                     $tmp = $_GET[$value['name']];
                     $map[$value['name']] = array('like', array($tmp, $tmp . ',%', '%,' . $tmp . ',%', '%,' . $tmp), 'OR');
                     break;
             }
         }
     }
     // 获取用户基本信息
     $map['status'] = 1;
     $map['user_type'] = $user_type;
     $p = !empty($_GET["p"]) ? $_GET['p'] : 1;
     $user_object = D('Admin/User');
     $base_table = C('DB_PREFIX') . 'admin_user';
     $extend_table = C('DB_PREFIX') . 'user_' . strtolower($user_type_info['name']);
     $user_list = $user_object->page($p, 16)->where($map)->order('create_time desc')->join($extend_table . ' ON ' . $base_table . '.id = ' . $extend_table . '.uid', 'LEFT')->select();
     $page = new Page($user_object->where($map)->join($extend_table . ' ON ' . $base_table . '.id = ' . $extend_table . '.uid', 'LEFT')->count(), 16);
     $this->assign('page', $page->show());
     $this->assign('query_attribute', $query_attribute);
     $this->assign('meta_title', '用户');
     $this->assign('user_list', $user_list);
     $this->display();
 }
 /**
  * 行为扩展的执行入口必须是run
  * @author jry <*****@*****.**>
  */
 public function run(&$content)
 {
     // 安装模式下直接返回
     if (defined('BIND_MODULE') && BIND_MODULE === 'Install') {
         return;
     }
     // 允许访问模块列表加上安装的功能模块
     $module_name_list = D('Admin/Module')->where(array('status' => 1))->getField('name', true);
     $module_allow_list = array_merge(C('MODULE_ALLOW_LIST'), $module_name_list);
     C('MODULE_ALLOW_LIST', $module_allow_list);
     // URL_MODEL必须在app_init阶段就从数据库读取出来应用
     // 不然系统就会读取config.php中的配置导致后台的配置失效
     $config['URL_MODEL'] = D('Admin/Config')->getFieldByName('URL_MODEL', 'value');
     $config['APP_SUB_DOMAIN_DEPLOY'] = D('Admin/Config')->getFieldByName('APP_SUB_DOMAIN_DEPLOY', 'value');
     if ($config['APP_SUB_DOMAIN_DEPLOY']) {
         $config['APP_SUB_DOMAIN_RULES'] = parse_attr(D('Admin/Config')->getFieldByName('APP_SUB_DOMAIN_RULES', 'value'));
     }
     C($config);
 }
 /**
  * 栏目分组
  * @author jry <*****@*****.**>
  */
 public function group_list()
 {
     return parse_attr(C('article_config.group_list'));
 }
 /**
  * 编辑文章
  * @author jry <*****@*****.**>
  */
 public function edit($id)
 {
     $this->is_login();
     //获取文档信息
     $document_info = D('Document')->detail($id);
     //获取当前分类
     $category_info = D('Category')->find($document_info['cid']);
     if (!$category_info['post_auth']) {
         $this->error('该分类禁止投稿');
     }
     $doc_type = D('DocumentType')->find($category_info['doc_type']);
     $field_sort = json_decode($doc_type['field_sort'], true);
     $field_group = parse_attr($doc_type['field_group']);
     //获取文档字段
     $map = array();
     $map['status'] = array('eq', '1');
     $map['show'] = array('eq', '1');
     $map['doc_type'] = array('in', '0,' . $category_info['doc_type']);
     $attribute_list = D('DocumentAttribute')->where($map)->select();
     //解析字段options
     $new_attribute_list = array();
     foreach ($attribute_list as $attr) {
         if ($attr['name'] == 'cid') {
             $con = array();
             $con['group'] = $category_info['group'];
             $con['doc_type'] = $category_info['doc_type'];
             $attr['options'] = select_list_as_tree('Category', $con);
         } else {
             $attr['options'] = parse_attr($attr['options']);
         }
         $new_attribute_list[$attr['id']] = $attr;
         $new_attribute_list[$attr['id']]['value'] = $document_info[$attr['name']];
     }
     //表单字段排序及分组
     if ($field_sort) {
         $new_attribute_list_sort = array();
         foreach ($field_sort as $k1 => &$v1) {
             $new_attribute_list_sort[0]['type'] = 'group';
             $new_attribute_list_sort[0]['options']['group' . $k1]['title'] = $field_group[$k1];
             foreach ($v1 as $k2 => $v2) {
                 $new_attribute_list_sort[0]['options']['group' . $k1]['options'][] = $new_attribute_list[$v2];
             }
         }
         $new_attribute_list = $new_attribute_list_sort[0]['options']['group1']['options'];
     }
     //使用FormBuilder快速建立表单页面。
     $builder = new \Common\Builder\FormBuilder();
     $builder->setMetaTitle('编辑文章')->setPostUrl(U('update'))->addFormItem('id', 'hidden', 'ID', 'ID')->setExtraItems($new_attribute_list)->setFormData($document_info)->setTemplate('_Builder/formbuilder_user')->display();
 }
 /**
  * 编辑模型
  * @author jry <*****@*****.**>
  */
 public function edit($id)
 {
     if (IS_POST) {
         $_POST['list_field'] = implode(',', $_POST['list_field']);
         $document_type_object = D('DocumentType');
         $data = $document_type_object->create();
         if ($data) {
             if ($document_type_object->save() !== false) {
                 $this->success('更新成功', U('index'));
             } else {
                 $this->error('更新失败');
             }
         } else {
             $this->error($document_type_object->getError());
         }
     } else {
         $document_type_info = D('DocumentType')->find($id);
         $document_type_field_group = parse_attr($document_type_info['field_group']);
         $document_type_field_sort = json_decode($document_type_info['field_sort'], true);
         //获取文档字段
         $map['status'] = array('eq', '1');
         $map['show'] = array('eq', '1');
         $map['doc_type'] = array('in', '0,' . $id);
         $attribute_list = D('DocumentAttribute')->where($map)->select();
         //获取用于列表显示字段表单复选框的内容
         $map['doc_type'] = array('eq', $id);
         $attribute_list_checkbox = select_list_as_tree('DocumentAttribute', $map);
         //解析字段
         $new_attribute_list = array();
         foreach ($attribute_list as $attr) {
             $new_attribute_list[$attr['id']] = $attr['title'];
         }
         //构造拖动排序options
         foreach ($document_type_field_sort as $key => $val) {
             $field[$key]['title'] = $document_type_field_group[$key];
             $temp = array();
             foreach ($val as $val2) {
                 if ($new_attribute_list[$val2]) {
                     $temp[$val2] = $new_attribute_list[$val2];
                 }
                 unset($new_attribute_list[$val2]);
             }
             $field[$key]['field'] = $temp;
         }
         //计算未排序字段分组的key
         $unsort_key = array_pop(array_keys($field)) + 1;
         //未排序字段
         if ($new_attribute_list) {
             $field[$unsort_key]['title'] = "未排序";
             $field[$unsort_key]['field'] = $new_attribute_list;
         }
         //使用FormBuilder快速建立表单页面。
         $builder = new \Common\Builder\FormBuilder();
         $builder->setMetaTitle('编辑模型')->setPostUrl(U('edit'))->addFormItem('id', 'hidden', 'ID', 'ID')->addFormItem('name', 'text', '模型名称', '模型名称')->addFormItem('title', 'text', '模型标题', '模型标题')->addFormItem('main_field', 'radio', '主要字段', '该模型的主要字段,如:文章的标题,商品的名称,用于前台列表及搜索列表显示', $attribute_list_checkbox)->addFormItem('list_field', 'checkbox', '列表显示字段', '后台文档列表需要显示字段及搜索字段,如:文章的标题,商品的名称', $attribute_list_checkbox)->addFormItem('field_group', 'textarea', '字段分组', '字段分组')->addFormItem('field_sort', 'board', '字段排序', '字段排序', $field)->addFormItem('icon', 'icon', '图标', '模型图标')->addFormItem('sort', 'num', '排序', '用于显示的顺序')->setFormData(D('DocumentType')->find($id))->display();
     }
 }
 /**
  * 编辑文章
  * @author jry <*****@*****.**>
  */
 public function edit($id)
 {
     //获取文档信息
     $document_info = D('Document')->detail($id);
     //分类权限检测
     if (!D('UserGroup')->checkCategoryAuth($document_info['cid'])) {
         $this->error('权限不足!');
     }
     if (IS_POST) {
         //更新文档
         $document_object = D('Document');
         $result = $document_object->update();
         if (!$result) {
             $this->error($document_object->getError());
         } else {
             $this->success('更新成功', U('Document/index', array('cid' => I('post.cid'))));
         }
     } else {
         //获取当前分类
         $category_info = D('Category')->find($document_info['cid']);
         $doc_type = D('DocumentType')->find($category_info['doc_type']);
         $field_sort = json_decode($doc_type['field_sort'], true);
         $field_group = parse_attr($doc_type['field_group']);
         //获取文档字段
         $map['status'] = array('eq', '1');
         $map['show'] = array('eq', '1');
         $map['doc_type'] = array('in', '0,' . $category_info['doc_type']);
         $attribute_list = D('DocumentAttribute')->where($map)->select();
         //解析字段options
         $new_attribute_list = array();
         foreach ($attribute_list as $attr) {
             if ($attr['name'] == 'cid') {
                 $con['group'] = $category_info['group'];
                 $con['doc_type'] = $category_info['doc_type'];
                 $con['status'] = array('egt', 0);
                 $attr['options'] = select_list_as_tree('Category', $con);
             } else {
                 $attr['options'] = parse_attr($attr['options']);
             }
             $new_attribute_list[$attr['id']] = $attr;
             $new_attribute_list[$attr['id']]['value'] = $document_info[$attr['name']];
         }
         //表单字段排序及分组
         if ($field_sort) {
             $new_attribute_list_sort = array();
             foreach ($field_sort as $k1 => &$v1) {
                 $new_attribute_list_sort[0]['type'] = 'group';
                 $new_attribute_list_sort[0]['options']['group' . $k1]['title'] = $field_group[$k1];
                 foreach ($v1 as $k2 => $v2) {
                     $new_attribute_list_sort[0]['options']['group' . $k1]['options'][] = $new_attribute_list[$v2];
                 }
             }
             $new_attribute_list = $new_attribute_list_sort;
         }
         //使用FormBuilder快速建立表单页面。
         $builder = new \Common\Builder\FormBuilder();
         $builder->setMetaTitle('编辑文章')->setPostUrl(U('edit'))->addFormItem('id', 'hidden', 'ID', 'ID')->setExtraItems($new_attribute_list)->setFormData($document_info)->display();
     }
 }
 /**
  * 获取某个分组的配置参数
  * @author jry <*****@*****.**>
  */
 public function group($group = 1)
 {
     //根据分组获取配置
     $map['status'] = array('egt', '0');
     // 禁用和正常状态
     $map['group'] = array('eq', $group);
     $data_list = D('Config')->where($map)->order('sort asc,id asc')->select();
     // 设置Tab导航数据列表
     $config_group_list = C('CONFIG_GROUP_LIST');
     // 获取配置分组
     foreach ($config_group_list as $key => $val) {
         $tab_list[$key]['title'] = $val;
         $tab_list[$key]['href'] = U('group', array('group' => $key));
     }
     // 构造表单名、解析options
     foreach ($data_list as &$data) {
         $data['name'] = 'config[' . $data['name'] . ']';
         $data['options'] = parse_attr($data['options']);
     }
     // 使用FormBuilder快速建立表单页面。
     $builder = new \Common\Builder\FormBuilder();
     $builder->setMetaTitle('系统设置')->SetTabNav($tab_list, $group)->setPostUrl(U('groupSave'))->setExtraItems($data_list)->display();
 }
 /**
  * 获取文章详情
  * @author jry <*****@*****.**>
  */
 public function detail($id, $map = null)
 {
     //获取基础表信息
     $con = array();
     $con['id'] = $id;
     $con['status'] = array('egt', 1);
     // 正常、隐藏两种状态是可以访问的
     if ($map) {
         $con = array_merge($con, $map);
     }
     $info = $this->where($con)->find();
     if (!is_array($info)) {
         $this->error = '文章被禁用或已删除!';
         return false;
     }
     // 阅读量加1
     $result = $this->where(array('id' => $id))->SetInc('view');
     // 获取作者信息
     $info['user'] = get_user_info($info['uid']);
     // 获取发帖数量
     $info['user']['post_count'] = $this->where(array('uid' => $info['uid']))->count();
     // 获取文档模型相关信息
     $doc_type_info = D($this->moduleName . '/Type')->find($info['category_info']['doc_type']);
     if ($doc_type_info['system']) {
         $this->error = '文档类型错误!';
         return false;
     }
     $info['doc_type_info'] = $doc_type_info;
     // 根据文章模型获取扩展表的息
     $extend_table_object = D($this->moduleName . '/' . $this->moduleName . ucfirst($doc_type_info['name']));
     $extend_data = $extend_table_object->find($id);
     // 基础信息与扩展信息合并
     if (is_array($extend_data)) {
         $info = array_merge($info, $extend_data);
     }
     // 获取筛选字段
     $con = array();
     $con['id'] = array('in', $doc_type_info['filter_field']);
     $attribute_object = D($this->moduleName . '/Attribute');
     $filter_field_list = $attribute_object->where($con)->select();
     $new_filter_field_list = array();
     foreach ($filter_field_list as $key => $val) {
         $val['options'] = parse_attr($val['options']);
         $new_filter_field_list[$val['name']] = $val;
     }
     $info['filter_field_list'] = $new_filter_field_list;
     // 给文档主要字段赋值,如:文章标题、商品名称
     $type_main_field = $attribute_object->getFieldById($doc_type_info['main_field'], 'name');
     $info['main_field'] = $info[$type_main_field];
     // 下载文件地址加密
     if ($info['file']) {
         $file_list = explode(',', $info['file']);
         foreach ($file_list as &$file) {
             $file = D('Home/Upload')->find($file);
             $uid = is_login();
             if ($uid) {
                 $file['token'] = \Think\Crypt::encrypt($file['md5'], user_md5($uid), 3600);
             } else {
                 $file['token'] = 'please login';
             }
         }
         $info['file_list'] = $file_list;
     }
     // 获取上一篇和下一篇文章信息
     $info['previous'] = $this->getPrevious($info);
     $info['next'] = $this->getNext($info);
     return $info;
 }
 /**
  * 用户修改信息
  * @author jry <*****@*****.**>
  */
 public function profile()
 {
     if (IS_POST) {
         // 强制设置用户ID
         $uid = $this->is_login();
         $_POST['uid'] = $uid;
         $_POST = format_data();
         // 获取用户信息
         $user_object = D('User/User');
         $user_info = $user_object->find($uid);
         // 保存昵称
         if (I('post.nickname')) {
             $result = $user_object->where(array('id' => $uid))->setField('nickname', I('post.nickname'));
             if ($result === false) {
                 $this->error('昵称修改失败' . $user_object->getError());
             }
         } else {
             $this->error('请填写昵称');
         }
         // 保存扩展信息
         $type = $user_info['user_type'];
         $map['user_type'] = array('eq', $type);
         $count = D('User/Attribute')->where($map)->count();
         if ($count) {
             $user_type_name = D('User/Type')->where(array('id' => $user_info['user_type']))->getField('name');
             $user_extend_object = D('User' . ucfirst($user_type_name));
             $extend_data = $user_extend_object->create();
             if (!$extend_data) {
                 $this->error($user_extend_object->getError());
             }
             $extend_info = $user_extend_object->find($uid);
             if ($extend_info) {
                 $result = $user_extend_object->save($extend_data);
             } else {
                 $result = $user_extend_object->add($extend_data);
             }
             if ($result === false) {
                 $this->error('扩展信息修改失败' . $user_extend_object->getError());
             } else {
                 $this->success('信息修改成功');
             }
         }
     } else {
         // 获取当前用户
         $user_object = D('User/User');
         $user_info = $user_object->detail($this->is_login());
         $type = $user_info['user_type'];
         $user_type_info = D('User/Type')->find($type);
         // 获取扩展字段
         $map['user_type'] = array('eq', $type);
         $attribute_list[$type] = D('User/Attribute')->where($map)->order('id asc')->select();
         // 解析字段options
         $new_attribute_list_sort['user']['type'] = 'group';
         if ($attribute_list[$type]) {
             // 增加昵称表单
             $nick['name'] = 'nickname';
             $nick['title'] = '昵称';
             $nick['type'] = 'text';
             $nick['value'] = $user_info['nickname'];
             $new_attribute_list[1][0] = $nick;
             foreach ($attribute_list[$type] as $attr) {
                 $attr['options'] = parse_attr($attr['options']);
                 $new_attribute_list[$type][$attr['id']] = $attr;
                 $new_attribute_list[$type][$attr['id']]['value'] = $user_info[$attr['name']];
             }
             $new_attribute_list_sort['user']['options']['group_extend']['title'] = '完善' . $user_type_info['title'] . '信息';
             $new_attribute_list_sort['user']['options']['group_extend']['options'] = $new_attribute_list[$type];
         }
         // 使用FormBuilder快速建立表单页面。
         $builder = new \Common\Builder\FormBuilder();
         $builder->setMetaTitle('修改信息')->setPostUrl(U(''))->setExtraItems($new_attribute_list_sort)->setTemplate(C('USER_CENTER_FORM'))->display();
     }
 }
 /**
  * 编辑类型
  * @author jry <*****@*****.**>
  */
 public function edit($id)
 {
     if (IS_POST) {
         $document_type_object = D('DocumentType');
         $data = $document_type_object->create();
         if ($data) {
             if ($document_type_object->save() !== false) {
                 $this->success('更新成功', U('index'));
             } else {
                 $this->error('更新失败');
             }
         } else {
             $this->error($document_type_object->getError());
         }
     } else {
         $document_type_info = D('DocumentType')->find($id);
         $document_type_field_group = parse_attr($document_type_info['field_group']);
         $document_type_field_sort = json_decode($document_type_info['field_sort'], true);
         //获取文档字段
         $map['status'] = array('eq', '1');
         $map['show'] = array('eq', '1');
         $map['doc_type'] = array('in', '0,' . $id);
         $attribute_list = D('DocumentAttribute')->where($map)->select();
         //解析字段
         $new_attribute_list = array();
         foreach ($attribute_list as $attr) {
             $new_attribute_list[$attr['id']] = $attr['title'];
         }
         //构造拖动排序options
         foreach ($document_type_field_sort as $key => $val) {
             $field[$key]['title'] = $document_type_field_group[$key];
             $temp = array();
             foreach ($val as $val2) {
                 if ($new_attribute_list[$val2]) {
                     $temp[$val2] = $new_attribute_list[$val2];
                 }
                 unset($new_attribute_list[$val2]);
             }
             $field[$key]['field'] = $temp;
         }
         //计算未排序字段分组的key
         $unsort_key = array_pop(array_keys($field)) + 1;
         //未排序字段
         if ($new_attribute_list) {
             $field[$unsort_key]['title'] = "未排序";
             $field[$unsort_key]['field'] = $new_attribute_list;
         }
         //使用FormBuilder快速建立表单页面。
         $builder = new \Common\Builder\FormBuilder();
         $builder->title('编辑类型')->setUrl(U('edit'))->addItem('id', 'hidden', 'ID', 'ID')->addItem('name', 'text', '类型名称', '类型名称')->addItem('title', 'text', '类型标题', '类型标题')->addItem('field_group', 'textarea', '字段分组', '字段分组')->addItem('icon', 'icon', '图标', '类型图标')->addItem('sort', 'num', '排序', '用于显示的顺序')->addItem('field_sort', 'board', '字段排序', '字段排序', $field)->setFormData(D('DocumentType')->find($id))->display();
     }
 }
function input($attributes)
{
    $output = '';
    if (isset($attributes) && !empty($attributes)) {
        $attributes = parse_attr($attributes);
    }
    $output .= '<input ' . $attributes . '/>';
    return $output;
}
 /**
  * 用户修改信息
  * @author jry <*****@*****.**>
  */
 public function profile()
 {
     if (IS_POST) {
         // 强制设置用户ID
         $uid = $this->is_login();
         $_POST['uid'] = $uid;
         //解析数据类似复选框类型的数组型值
         foreach ($_POST as $key => $val) {
             if (is_array($val)) {
                 $_POST[$key] = implode(',', $val);
             } else {
                 if (check_date_time($val)) {
                     $_POST[$key] = strtotime($val);
                 } else {
                     if (check_date_time($val, 'Y-m-d H:i')) {
                         $_POST[$key] = strtotime($val);
                     } else {
                         if (check_date_time($val, 'Y-m-d')) {
                             $_POST[$key] = strtotime($val);
                         }
                     }
                 }
             }
         }
         // 获取用户信息
         $user_object = D('User/User');
         $user_info = $user_object->find($uid);
         // 保存信息
         $type = $user_info['user_type'];
         $map['user_type'] = array('eq', $type);
         $count = D('User/Attribute')->where($map)->count();
         if ($count) {
             $user_type_name = D('User/Type')->where(array('id' => $user_info['user_type']))->getField('name');
             $user_extend_object = M('User' . ucfirst($user_type_name));
             $extend_data = $user_extend_object->create();
             $extend_info = $user_extend_object->find($uid);
             if ($extend_info) {
                 $result = $user_extend_object->save($extend_data);
             } else {
                 $result = $user_extend_object->add($extend_data);
             }
             if ($result === false) {
                 $this->error('扩展信息修改失败' . $user_extend_object->getError());
             } else {
                 $this->success('信息修改成功');
             }
         }
     } else {
         // 获取当前用户
         $user_object = D('User/User');
         $user_info = $user_object->detail($this->is_login());
         $type = $user_info['user_type'];
         $user_type_info = D('User/Type')->find($type);
         // 获取扩展字段
         $map['user_type'] = array('eq', $type);
         $attribute_list[$type] = D('User/Attribute')->where($map)->order('id asc')->select();
         // 解析字段options
         $new_attribute_list_sort['user']['type'] = 'group';
         if ($attribute_list[$type]) {
             foreach ($attribute_list[$type] as $attr) {
                 $attr['options'] = parse_attr($attr['options']);
                 $new_attribute_list[$type][$attr['id']] = $attr;
                 $new_attribute_list[$type][$attr['id']]['value'] = $user_info[$attr['name']];
             }
             $new_attribute_list_sort['user']['options']['group_extend']['title'] = $user_type_info['title'] . '信息';
             $new_attribute_list_sort['user']['options']['group_extend']['options'] = $new_attribute_list[$type];
         }
         // 使用FormBuilder快速建立表单页面。
         $builder = new \Common\Builder\FormBuilder();
         $builder->setMetaTitle('修改信息')->setPostUrl(U(''))->setExtraItems($new_attribute_list_sort)->setTemplate('form')->display();
     }
 }
 /**
  * 文章信息
  * @author jry <*****@*****.**>
  */
 public function detail($id)
 {
     $map['status'] = array('egt', 1);
     // 正常、隐藏两种状态是可以访问的
     $info = D('Article')->where($map)->detail($id);
     if (!$info) {
         $this->error('您访问的文档已禁用或不存在');
     }
     $result = D('Article')->where(array('id' => $id))->SetInc('view');
     // 阅读量加1
     // 获取文档所属分类详细信息
     $category_info = D('Category')->find($info['cid']);
     // 获取该分类绑定文档模型的主要字段
     $type_object = D('Type');
     $attribute_object = D('Attribute');
     $doc_type_info = $type_object->find($category_info['doc_type']);
     $type_main_field = $type_object->getFieldById($category_info['doc_type'], 'main_field');
     $type_main_field = $attribute_object->getFieldById($doc_type_info['main_field'], 'name');
     // 获取筛选字段
     $con = array();
     $con['id'] = array('in', $doc_type_info['filter_field']);
     $filter_field_list = $attribute_object->where($con)->select();
     $new_filter_field_list = array();
     foreach ($filter_field_list as $key => $val) {
         $val['options'] = parse_attr($val['options']);
         $new_filter_field_list[$val['name']] = $val;
     }
     // 给文档主要字段赋值,如:文章标题、商品名称
     $info['main_field'] = $info[$type_main_field];
     if ($info['file']) {
         $file_list = explode(',', $info['file']);
         foreach ($file_list as &$file) {
             $file = D('Home/Upload')->find($file);
             $uid = is_login();
             if ($uid) {
                 $file['token'] = \Think\Crypt::encrypt($file['md5'], user_md5($uid), 3600);
             } else {
                 $file['token'] = 'please login';
             }
         }
         $info['file_list'] = $file_list;
     }
     // 设置文档显示模版
     if (C('CURRENT_THEME')) {
         if ($category_info['detail_template']) {
             $template = 'article/' . $info['detail_template'];
         } else {
             $template = 'article/detail_default';
         }
     } else {
         $template = $category_info['detail_template'] ? 'Home/article/' . $category_info['detail_template'] : 'Home/article/detail_default';
     }
     // 获取作者信息
     $info['user'] = get_user_info($info['uid']);
     $this->assign('info', $info);
     $this->assign('_current_category', $category_info);
     $this->assign('_filter_field_list', $new_filter_field_list);
     $this->assign('_search_url', U('index', array('cid' => $category_info['id'])));
     // 构造搜索地址
     $this->assign('meta_title', $info['main_field']);
     $this->assign('meta_keywords', $info['tags'] ?: C('WEB_SITE_KEYWORD'));
     $this->assign('meta_description', $info['abstract'] ?: C('WEB_SITE_DESCRIPTION'));
     $this->assign('meta_cover', $info['cover']);
     Cookie('__forward__', $_SERVER['REQUEST_URI']);
     $this->display($template);
 }
 /**
  * @see Walker::start_lvl()
  * @since 3.0.0
  *
  * @param string $output Passed by reference. Used to append additional content.
  * @param int $depth Depth of page. Used for padding.
  */
 public function start_lvl(&$output, $depth = 0, $parent_id, $args = array())
 {
     $indent = str_repeat("\t", $depth);
     $lvl = $depth + 1;
     $attrs = parse_attr(get_post_meta($parent_id, '_child_menu_attrs', TRUE));
     $attrs .= $args->menu_attr ? parse_attr($args->menu_attr) : '';
     $attrs .= $args->submenu_attr ? parse_attr($args->submenu_attr) : '';
     $classes = get_post_meta($parent_id, '_child_menu_classes', TRUE);
     $classes .= esc_attr(apply_filters('submenu_classes', $args->submenu_class));
     $allowed_tags = apply_filters('avaliable_submenu_container', array('div', 'span'));
     if (in_array($args->submenu_container, $allowed_tags)) {
         $submenu_wrap_attr = $args->submenu_container_attr ? parse_attr($args->submenu_container_attr) : '';
         $output .= '<' . $args->submenu_container . ' class="' . esc_attr($args->submenu_container_class) . '" ' . $submenu_wrap_attr . '>';
     }
     $output .= "\n{$indent}<ul role=\"menu\" class=\"sub-menu-lvl-{$lvl} dropdown-menu {$classes}\" {$attrs} >\n";
 }