dscms源码分析笔记

以后台admin模块下Admin控制器为例分析其走向流程,学习和借鉴其好的思路和思维逻辑(详细分解防止以后忘记)。。。大佬不用看了,请勿喷!

<?php
namespace app\admin\controller;
use think\Lang;
class Admin extends AdminControl//继承AdminControl控制器
{
    public function _initialize()//初始化
    {
        parent::_initialize();//执行父类方法
        //读取语言配置:config('default_lang') 读取config配置文件中default_lang的值  APP_PATH则是入口文件index.php中定义的常量define('APP_PATH', __DIR__ . '/../application/');
        Lang::load(APP_PATH . 'admin/lang/' . config('default_lang') . '/admin.lang.php');//application文件夹下admin文件夹下lang文件夹下面
    }

    /**
     * 管理员列表
     * @return mixed
     */
    public function index()
    {
        $model_admin = Model('admin');//实例化model类(application文件夹下common文件夹下model文件夹下面)
        $condition = array();//条件变量
        $admin_list = $model_admin->getAdminList($condition, '*', 5);//执行admin模型类中getAdminList方法 从而返回 $member_list->items()数据和page_info数据
        $this->assign('admin_list', $admin_list);
        $this->assign('show_page', $model_admin->page_info->render());
        //执行基类AdminControl中setAdminCurItem的方法   而该方法又调用了本文件下getAdminItemList方法
        $this->setAdminCurItem('index');
        //返回   $this->assign('admin_item', $this->getAdminItemList()); $this->assign('curitem', $curitem);
        //admin_list 返回给视图页面使用  {volist name="admin_list" id="admin"} {/volist}
        //$curitem
        //视图页面
        // 使用了模板继承{extend name="layout:home" /}---中{$Think.BASE_SITE_ROOT}类似的常量定义在application下的 应用公共(函数)文件common.php定义
        //{block name="container"}内容{/block}
        //{include file="layout/admin_items" /} 中
        //admin_items.html文件中$admin_item来源于AdminControl控制器setAdminCurItem(当前选中的栏目方法)
        //$item.name eq $curitem 做对比来实现是否高亮
        /*        {if $admin_item}
                <ul class="layui-tab-title">
            {foreach name="admin_item" item="item" }
            <li {if condition="$item.name eq $curitem" }class="layui-this" {/if}>
            <a href="{$item.url}">{$item.text}</a>
            </li>
            {/foreach}
            <div class="tool-btns">
                <a href="javascript:location.reload();" title="刷新当前页面" class="iconfont icon-reload"></i></a>
            </div>
        </ul>
        {/if}*/
        //视图页面中  类似{$Think.lang.admin_name} 读取语言变量值是在lang文件夹下面对应的语言文件夹下的admin.lang.php中admin_name的值以此类推
        //而里面类似{$Think.lang.ds_no_login}却没有在前者存在的语言变量值,则是由基类AdminControl控制器中_initialize初始化方法中
        //Lang::load(APP_PATH . 'admin/lang/' . config('default_lang') . '.php');而引用的
        return $this->fetch();
    }

    /**
     * 添加管理员
     * @return mixed
     */
    public function add()
    {
        if (request()->isPost()) {
            $model_admin = Model('admin');
            //判断用户名是否存在
            if ($model_admin->getOneAdmin(['admin_name' => input('post.admin_name')])) {
                $this->error(lang('admin_existence'));
            }
            $data = array(
                'admin_name' => input('post.admin_name'),
                'admin_password' => input('post.admin_password'),
                'admin_group_id' => input('post.group_id'),
                'admin_add_time' => TIMESTAMP,
            );

            $admin_validate = validate('admin');
            if (!$admin_validate->scene('add')->check($data)){
                $this->error($admin_validate->getError());
            }
            //添加到数据库
            $data['admin_password'] = md5(input('post.admin_password'));
            $result = $model_admin->addAdmin($data);
            if ($result) {
                dsLayerOpenSuccess(lang('admin_add_succ'));
            } else {
                $this->error(lang('admin_add_fail'));
            }
        } else {
            $admin_array = array('add' => 1);
            $admin_group = model('admingroup')->getAdminGroupList('group_name,group_id');
            $this->assign('admin_group', $admin_group);
            $this->assign('admin', $admin_array);
            return $this->fetch('form');
        }
    }

    /**
     * 编辑管理员
     * @return bool
     */
    public function edit()
    {
        $admin_id = input('param.admin_id');
        if (empty($admin_id)) {
            $this->error(lang('param_error'));
        }
        $model_admin = Model('admin');
        if (!request()->isPost()) {
            $condition['admin_id'] = $admin_id;
            $admin_array = $model_admin->getOneAdmin($condition);
            $admin_array['add'] = 0;
            $admin_group = model('admingroup')->getAdminGroupList('group_name,group_id');
            $this->assign('admin_group', $admin_group);
            $this->assign('admin', $admin_array);
            return $this->fetch('form');
        } else {
            $data = array(
                'admin_id' => $admin_id,//带id过去主要让验证器的unique自动识别是否需要判断唯一性
                'admin_name' => input('post.admin_name'),
                'admin_password' => input('post.admin_password'),
                'admin_group_id' => input('post.group_id')
            );
            $admin_validate = validate('admin');
            if (!$admin_validate->scene('edit')->check($data)){
                $this->error($admin_validate->getError());
            }
            //验证数据  END
            $data['admin_password'] = md5(input('post.admin_password'));
            $result = $model_admin->editAdmin(array('admin_id' => intval($admin_id)), $data);
            if ($result) {
                dsLayerOpenSuccess(lang('admin_edit_succ'));
            } else {
                $this->error(lang('admin_edit_fail'));
            }
        }
    }

    /**
     * 删除管理员
     */
    public function del()
    {
        $admin_id = input('param.admin_id');
        if (empty($admin_id)) {
            $this->error(lang('param_error'));
        }
        $result = db('admin')->delete($admin_id);
        if ($result) {
            ds_json_encode(10000, lang('admin_del_succ'));
        } else {
            ds_json_encode(10001, lang('admin_del_fail'));
        }
    }

    /**
     * 获取栏目列表,针对控制器下的栏目
     */
    protected function getAdminItemList()
    {
        $menu_array = array(
            array(
                'name' => 'index', 'text' => lang('ds_manage'), 'url' => url('Admin/index')
            ), array(
                'name' => 'add', 'text' => lang('ds_add'), 'url' => "javascript:dsLayerOpen('".url('Admin/add')."','".lang('ds_add')."')"
            ),
        );
        return $menu_array;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值