继续我的这个项目的第三晚的开发了,时间比较少,今晚写的代码不多,今晚仍然是造轮子写一个公共的控制器和一个公共的JS。直接上代码吧!

  以下是一个公共的控制器,后台控制器都继承于它,构造函数中进行验证当前用户是否登录状态和提供快获取当前登录用户的数据。

<?php
namespace Admin\Controller;
use Think\Controller; /**
* 后台管理公共控制器
*/
class CommonController extends Controller{
public function __construct(){
parent::__construct();
$this->_init();
} /**
* 初始化
*/
private function _init(){
// 如果已经登录
$isLogin=$this->isLogin();
if(!$isLogin){
//跳转到登录页面
$this->redirect('/admin.php?c=login');
}
} /**
* 获取当前登录用户信息
*/
public function getLoginUser(){
return session('adminUser');
} /**
* 判断是否登录
*/
public function isLogin(){
$user=$this->getLoginUser();
return ($user && is_array($user));
} /**
* 更新数据状态
*/
public function setStatus($data,$models){
try{
if($_POST){
$id=$data['id'];
$status=$data['status'];
if(!$id){
return jsonResult(0, 'ID不存在');
}
$ret=D($models)->updateStatusById($id,$status);
if($ret){
return jsonResult(1, '操作成功');
}else{
return jsonResult(0, '操作失败');
}
}
return jsonResult(0,'没有提交的内容');
}catch(Exception $ex){
return jsonResult(0, $e->getMessage());
}
} /**
* 数据排序
*/
public function listorder($model=''){
$listorder=$_POST['listorder'];
$jumpUrl=$_SERVER['HTTP_REFERER'];
$errors=array();
$resultData=array('jump_url'=>$jumpUrl);
try{
if($listorder){
foreach($listorder as $id=>$v){
$id=D($model)->updateListorderById($id,$v);
if($id===FALSE){
$errors[]=$id;
}
}
if(array_count_values($errors)>0){
$group=implode(',', $errors);
return jsonResult(0, "排序失败-{$group}", $data,$resultData);
}
return jsonResult(1, '排序成功', $resultData);
}
}catch(Exception $ex){
return jsonResult(0, $ex->getMessage());
}
return jsonResult(0, '排序失败', $resultData);
}
}
?>

  以下一段JS,主要是做一些表单操作的方法。

var common = function(queryDom) {
if(!queryDom){
console.error('请传入需要操作的DOM选择字符');
return;
}
function commonObj() {
this.dom = '';
} function todelete(url, data) {
$.post(
url,
data,
function(s) {
if(s.status == 1) {
return dialog.success(s.message, '');
// 跳转到相关页面
} else {
return dialog.error(s.message);
}
}, "JSON");
} /**
* 提交form表单操作
*/
commonObj.prototype.add = function(formDom, func) {
$(this.dom).click(function() {
var data = $(formDom).serializeArray();
postData = {};
$(data).each(function(i) {
postData[this.name] = this.value;
});
console.log(postData);
// 将获取到的数据post给服务器
url = SCOPE.save_url;
jump_url = SCOPE.jump_url;
$.post(url, postData, function(result) {
if(result.status == 1) {
//成功
if(typeof(func) == 'function') {
func();
} else {
return dialog.success(result.message, jump_url);
}
} else if(result.status == 0) {
// 失败
return dialog.error(result.message);
}
}, "JSON");
});
} /**
* 编辑模块
*/
commonObj.prototype.click = function() {
$(this.dom).on('click', function() {
var id = $(this).attr('attr-id');
var url = SCOPE.edit_url + '&id=' + id;
window.location.href = url;
});
} /*
* 删除操作
*/
commonObj.prototype.delete = function() {
$(this.dom).on('click', function() {
var id = $(this).attr('attr-id');
var a = $(this).attr("attr-a");
var message = $(this).attr("attr-message");
var url = SCOPE.set_status_url; data = {};
data['id'] = id;
data['status'] = -1; layer.open({
type: 0,
title: '是否提交?',
btn: ['yes', 'no'],
icon: 3,
closeBtn: 2,
content: "是否确定" + message,
scrollbar: true,
yes: function() {
// 执行相关跳转
todelete(url, data);
},
});
});
} /**
* 排序操作
*/
commonObj.prototype.order = function() {
$(this.dom).click(function() {
// 获取 listorder内容
var data = $("#singcms-listorder").serializeArray();
postData = {};
$(data).each(function(i) {
postData[this.name] = this.value;
});
console.log(data);
var url = SCOPE.listorder_url;
$.post(url, postData, function(result) {
if(result.status == 1) {
//成功
return dialog.success(result.message, result['data']['jump_url']);
} else if(result.status == 0) {
// 失败
return dialog.error(result.message, result['data']['jump_url']);
}
}, "JSON");
});
} /**
* 更改状态
*/
commonObj.prototype.updateStatus = function() {
$(this.dom).on('click', function() {
var id = $(this).attr('attr-id');
var status = $(this).attr("attr-status");
var url = SCOPE.set_status_url;
data = {};
data['id'] = id;
data['status'] = status;
layer.open({
type: 0,
title: '是否提交?',
btn: ['yes', 'no'],
icon: 3,
closeBtn: 2,
content: "是否确定更改状态",
scrollbar: true,
yes: function() {
// 执行相关跳转
todelete(url, data);
},
});
});
} commonObj.prototype.push = function() {
$(this.dom).click(function() {
var id = $("#select-push").val();
if(id == 0) {
return dialog.error("请选择推荐位");
}
push = {};
postData = {};
$("input[name='pushcheck']:checked").each(function(i) {
push[i] = $(this).val();
}); postData['push'] = push;
postData['position_id'] = id;
//console.log(postData);return;
var url = SCOPE.push_url;
$.post(url, postData, function(result) {
if(result.status == 1) {
// TODO
return dialog.success(result.message, result['data']['jump_url']);
}
if(result.status == 0) {
// TODO
return dialog.error(result.message);
}
}, "json"); });
} return new commonObj();
}

  今晚就弄了那么点,反正慢慢来,不会有人催我项目进度的,主要是自己能坚持把这个项目做完。代码写到这里天色已晚,困了,都没去运行下,肯定会有些BUG的了,等一个模块开发完再去调试代码吧!

  源码地址:https://github.com/YoZiLin/TP-CMS

前端到后台ThinkPHP开发整站(3)的更多相关文章

  1. 前端到后台ThinkPHP开发整站--php开发案例

    前端到后台ThinkPHP开发整站--php开发案例 总结 还是需要做几个案例,一天一个为佳,那样才能做得快. 从需求分析着手,任务体系要构建好,这样才能非常高效. 转自: 前端到后台ThinkPHP ...

  2. 前端到后台ThinkPHP开发整站(2)

    我这次使用的ThinkPHP版本是:3.2.3版本,还有会使用到一个弹出层插件,叫 layer,官网地址是:http://layer.layui.com/.废话不多说,进入撸码环节. 1.通用方法编写 ...

  3. 前端到后台ThinkPHP开发整站(6)

    今天终于把整个后台管理系统弄好了,其实没什么难点,只是作为一个Thinphp学习的练手项目,这个项目,现在还只能算是做了一半,还有前台展示方面的功能没有完成.先过一遍后台的功能吧! 1.首页 2.菜单 ...

  4. 前端到后台ThinkPHP开发整站(5)

    今天周五了,这个项目做了五个晚上了,明天周末不用上班有一整天的时间来结束这个项目了,今晚主要把后台界面给弄出来了. 大概的整个后台界面就是这个样子了,接下来的工作就是搬砖了,一个个菜单功能填上去就是了 ...

  5. 前端到后台ThinkPHP开发整站(4)

    今晚继续我的这个项目的开发,今晚也是写的不多,主要写了一个菜单管理功能的CURD方法,前端界面还没有进行编写. 菜单管理Model层的代码: <?php namespace Common\Mod ...

  6. 前端到后台ThinkPHP开发整站(1)

    1.前言: 我个人从来没有写过博客文章,作为一个程序员没有自己的博客算是一个合格的程序员,所以我地想想也要经营起一个的博客,做一个小项目,写这博客算就做这个项目的一个项目笔记吧!现在自学着ThinkP ...

  7. 前端到后台ThinkPHP开发整站(7)

    今晚我继续这个项目的前台开发,把前台的做出来了,现在项目进行一个收尾工作了,还有栏目页和一个文章页的开发,做完这两个算是完成了.说到这里感觉有点松懈了,把剩下两个功能页面做完在吹吧,先看看今天弄的代码 ...

  8. 前端到后台ThinkPHP开发整站(完)

    久违了,今天终于抽空把最后的写完了,这是这个项目的最后一篇文章了,把前台的栏目控制器和文章内容控制器的功能实现了. 栏目控制器: <?php namespace Home\Controller; ...

  9. 前端资源多个产品整站一键打包&包版本管理(一)

    来新公司工作的第五个月.整站资源打包管理也提上了日程. 问题: 首先.什么是整站的打包管理呢? 我们公司的几个重要产品都在同一个webapp里面,但是,不同的开发部门独立开发不同的产品,长期以来,我们 ...

随机推荐

  1. JavaScript对象属性访问的两种方式

    JavaScript对象属性访问的两种方式 object.attribute object["attribute"] 例如: var employees = [ { "f ...

  2. MySQL数据库Raid存储方案

    作为一名DBA,选择自己的数据存储在什么上面,应该是最基本的事情了.但是很多DBA却容易忽略了这一点,我就是其中一个.之前对raid了解的并不多,本文就记录下学习的raid相关知识. 一.RAID的基 ...

  3. 抽象工厂模式(Java与Kotlin版)

    前文推送 设计模式 简单工厂模式(Java与Kotlin版) 工厂方法模式(Java与Kotlin版) Kotlin基础知识 Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操 ...

  4. css自定义动画在微信中无法执行的原因

    这是我去年年底遇到的一个问题, 在这个过程中我发现了一个比较有趣的问题. 我们在做抽奖的时候,微信分享到朋友圈的页面里,安卓机器无法执行页面中的自定义动画(元宝的位移,进入按钮的放大缩小等等).这让我 ...

  5. 详解react/redux的服务端渲染:页面性能与SEO

        亟待解决的疑问 为什么服务端渲染首屏渲染快?(对比客户端首屏渲染)   react客户端渲染的一大痛点就是首屏渲染速度慢问题,因为react是一个单页面应用,大多数的资源需要在首次渲染前就加载 ...

  6. 简单粗暴的在vmware虚拟机中固定ip

    虚拟机对于很多做测试的或者在学习测试中的人来说是位常客,经常会用到,但是虚拟机重启之后,很多人遇到虚拟机ip变化,很是头痛,我在学习过程中也遇到了这个问题,百度了很多办法,有些办法对于网络知识小白来说 ...

  7. Hadoop生态系统图解

    Hadoop生态架构图 参考文章: Hadoop生态系统介绍 HDFS架构 1.NaneDode:主节点,**存储文件的元数据**如文件名,文件目录结构,文件属性(生成时间,副本数量,文件权限),以及 ...

  8. 【JAVA】配置JAVA环境变量

    系统变量新建,添加 变量名JAVA_HOME 变量值为C:\Java\jdk版本号 修改 Path为 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

  9. git分支的使用

    本文章假定你已经接触了一些git的基本概念和基本的操作知识 这里先贴出关于分支的一些常用命令 git branch /*查看所有分支*/git branch <branch-name> / ...

  10. React Native之APK文件签名及打包

    生成apk签名文件 我们使用android studio的方式进行签名 AS工具栏找到并点击 build->gennrate signed apk 两种情况: 1.这里如果已经有签名文件了则直接 ...