摘要

在此记录一下阿里百秀项目的教学视频的学习笔记,部分页面被我修改了,某些页面效果会不一样,基本操作是一致的,好记性不如烂笔头,加油叭!!!

step 1 : 整合全部静态页面

  1. 将静态页面全部拷贝到 admin 目录中。

  2. 将文件扩展名由 .html 改为 .php ,页面中的 a 链接也需要调整。

  3. 调整页面文件中的静态资源路径,将原本的相对路径调整为绝对路径。
    在 sublime 工具中选中文件夹 admin 右击 --> 查找&&替换

step 2 : 抽离公共部分

由于每一个页面中都有一部分代码(侧边栏和头部)是相同的,分散到各个文件中,不便于维护,所以应该分别抽象到一个公共的文件中。

  1. 在 admin 目录中创建一个 com (common 的简称)的文件夹
  2. 在这个目录里创建一个 sidebar.php 和 nav.php 文 件
  3. 随便在一个文件中(eg: index.php)找到侧边栏和头部的代码片段将代码抽离出来

com / sidebar.php

<div class="aside"><div class="profile"><img class="avatar" src="../uploads/avatar.jpg"><h3 class="name">布头儿</h3></div><ul class="nav"><li class="active"><a href="index.php"><i class="fa fa-dashboard"></i>仪表盘</a></li><li><a href="#menu-posts" class="collapsed" data-toggle="collapse"><i class="fa fa-thumb-tack"></i>文章<i class="fa fa-angle-right"></i></a><ul id="menu-posts" class="collapse"><li><a href="posts.php">所有文章</a></li><li><a href="post-add.php">写文章</a></li><li><a href="categories.php">分类目录</a></li></ul></li><li><a href="comments.php"><i class="fa fa-comments"></i>评论</a></li><li><a href="users.php"><i class="fa fa-users"></i>用户</a></li><li><a href="#menu-settings" class="collapsed" data-toggle="collapse"><i class="fa fa-cogs"></i>设置<i class="fa fa-angle-right"></i></a><ul id="menu-settings" class="collapse"><li><a href="nav-menus.php">导航菜单</a></li><li><a href="slides.php">图片轮播</a></li><li><a href="settings.php">网站设置</a></li></ul></li></ul></div>

com/nav.php

<nav class="navbar"><button class="btn btn-default navbar-btn fa fa-bars"></button><ul class="nav navbar-nav navbar-right"><li><a href="profile.html"><i class="fa fa-user"></i>个人中心</a></li><li><a href="login.html"><i class="fa fa-sign-out"></i>退出</a></li></ul></nav>
  1. 在每一个需要这个模块的页面中通过 include 载入 sidebar.php
<?php include 'com/sidebar.php' ;?>
  1. 在每一个需要这个模块的页面中通过 include 载入 nav.php ,载入到 main 中
<div class="main">
<?php include 'com/nav.php';?>
</div>

step 3 : 实现侧边栏对应到相应页面显示高亮

由于侧边栏在不同页面时, active class name 出现的位置不尽相同,所以我们需要区分当前 sidebar.php 文件是 在哪个页面中载入的,从而明确焦点状态。

每一个菜单项 li <元素:

 <li<?php echo $current_page == 'dashboard' ? ' class="active"' : ''; >>   <a href="index.php"><i class="fa fa‐dashboard"></i>仪表盘</a> </li>

对于有子菜单的菜单项,有一点例外:

<li <?php echo in_array($current_page,$menu_posts) ? 'class="active" ': ''?>><a href="#menu-posts" class="collapsed" data-toggle="collapse"><i class="fa fa-file-text"></i>文章管理<i class="fa fa-angle-right"></i></a><ul id="menu-posts" class="collapse<?php echo in_array($current_page, array('posts', 'post-add', 'categories')) ? ' in' : ''; ?>"><li<?php echo $current_page == 'posts' ? ' class="active"' : ''; ?>><a href="posts.php">所有文章</a></li><li<?php echo $current_page == 'post-add' ? ' class="active"' : ''; ?>><a href="post-add.php">写文章</a></li><li<?php echo $current_page == 'categories' ? ' class="active"' : ''; ?>><a href="categories.php">分类目录</a></li></ul>
</li>

sliderbar.php

//php部分
$current_page = isset($current_page) ? $current_page : '';
//html部分
<div class="aside"><div class="profile"><img class="avatar" src="/static/uploads/avatar.jpg"><h3 class="name">布头儿</h3></div><ul class="nav"><li<?php echo $current_page == 'dashboard' ? ' class="active"' : ''; ?>><!-- fa fa-dashboard --><a href="index.php"><i class="fa fa-list"></i>Home</a></li><?php $menu_posts = array('posts','post-add','categories');?><li <?php echo in_array($current_page,$menu_posts) ? 'class="active" ': ''?>><a href="#menu-posts" class="collapsed" data-toggle="collapse"><i class="fa fa-file-text"></i>文章管理<i class="fa fa-angle-right"></i></a><ul id="menu-posts" class="collapse<?php echo in_array($current_page, array('posts', 'post-add', 'categories')) ? ' in' : ''; ?>"><li<?php echo $current_page == 'posts' ? ' class="active"' : ''; ?>><a href="posts.php">所有文章</a></li><li<?php echo $current_page == 'post-add' ? ' class="active"' : ''; ?>><a href="post-add.php">写文章</a></li><li<?php echo $current_page == 'categories' ? ' class="active"' : ''; ?>><a href="categories.php">分类目录</a></li></ul></li><li<?php echo $current_page == 'comments' ? ' class="active"' : ''; ?>><a href="comments.php"><i class="fa fa-comments"></i>评论管理</a></li><li<?php echo $current_page == 'users' ? ' class="active"' : ''; ?>><a href="users.php"><i class="fa fa-user-circle-o"></i>用户管理</a></li><?php $menu_settings = array('nav-menus','slides','settings');?><li <?php echo in_array($current_page,$menu_settings) ? 'class="active" ': ''?>><a href="#menu-settings" class="collapsed" data-toggle="collapse"><i class="fa fa-wrench"></i>系统设置<i class="fa fa-angle-right"></i></a><ul id="menu-settings" class="collapse<?php echo in_array($current_page, array('nav-menus', 'slides', 'settings')) ? ' in' : ''; ?>"><li<?php echo $current_page == 'nav-menus' ? ' class="active"' : ''; ?>><a href="nav-menus.php">导航菜单</a></li><li<?php echo $current_page == 'slides' ? ' class="active"' : ''; ?>><a href="slides.php">图片轮播</a></li><li<?php echo $current_page == 'settings' ? ' class="active"' : ''; ?>><a href="settings.php">网站设置</a></li></ul></li></ul></div>

comments.php

 <?php $current_page='comments';?>

users.php

<?php $current_page = 'users'; ?>

settings.php

<?php $current_page='settings';?>


所有需要跳转页面显示高亮状态的页面以此类推都加上 $current_pag 变量

step 4 : 处理登录页面

调整HTML页面

  1. 将 login.php 中的登录连接换成 button 按钮
<a class="btn btn-primary btn-block btn-login" href="index.php">登 录</a>
 <button class="btn btn-primary btn-block btn-login">登录</button>
  1. 往表单元素中添加相应的属性 method 与 action
 <form class="login-wrap">
<form class="login-wrap" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >
  1. 给邮箱和密码框添加 name 属性
<input id="email" name="email" type="email" class="form-control" placeholder="邮箱" autofocus>
<input id="password" name="password" type="password" class="form-control" placeholder="密码">

处理执行PHP脚本

  1. 项目配置文件
    由于在接下来的开发过程中,肯定有一部分公共的成员,例如数据库名称,数据库主机,数据库用户名密码等,这些数据应该放到公共的地方,抽象成一个配置文件 config.php 放到项目根目录下。
    这个配置文件采用定义常量的方式定义配置成员:

config.php

<?php
define('DB_HOST','127.0.0.1');
/*** 数据库用户名*/
define('DB_USER','root');
/*** 数据库密码*/
define('DB_PASS', '');
/*** 数据库名称*/
define('DB_NAME', 'demo');
  1. 载入 config.php 文件
require_once '../config.php';
  1. 合法化校验及错误信息展示
if(empty($_POST['email'])){$GLOBALS['message'] = '请输入邮箱';return;}if(empty($_POST['password'])){$GLOBALS['message'] = '请输入密码';return;}
  1. 接收数据
   $email = $_POST['email'];$password = $_POST['password'];

5.校验邮箱与密码(假数据)

   if($email !== 'admin@qx.com'){$GLOBALS['message'] = '密码与邮箱不匹配';return;}if($password !== '123'){$GLOBALS['message'] = '密码与邮箱不匹配';return;}
  1. 表单状态保持
    在输出 时为其添加一个 value 属性,值就是 $_POST[‘email’]
<input id="email" name="email" type="email" class="form‐control" value="<?php echo  isset($_POST['email']) ? $_POST['email'] : ''; ?>" placeholder="邮箱" autofocus>

step 5 : 错误消息的呈现

当验证邮箱与密码不匹配时,页面弹出错误信息

  1. 引入 bootstarp 样式文件
  <link rel="stylesheet" href="/static/assets/vendors/bootstrap/css/bootstrap.css">
  1. 判断信息是否呈现

login.php

      <?php if (isset($message)) : ?><div class="alert alert-danger"><strong>错误!</strong><?php echo $message; ?></div><?php endif; ?><!-- 有错误信息时展示 --><!-- <div class="alert alert-danger"><strong>错误!</strong> 用户名或密码错误!</div> -->

step 6 : 错误信息呈现的动画效果

  1. 官网下载动画样式文件 https://animate.style/#migration
  2. 引入 animate.css 文件
<link rel="stylesheet" href="/static/assets/vendors/animate/animate.css">
  1. 选择错误信息呈现的动画效果
<h1 class="callout-title">Animate.css</h1>
//当选择任意一个动画效果时,会发现中有动画效果的类名添加

栗子:当点击 rubberBand 这个动画时,会在class中添加相应的动画效果的类名

animate__animated animate__rubberBand

  1. 在表单中判断是否加入产生动画效果的类
<form class="login-wrap <?php echo isset($message) ?'animate__animated animate__rubberBand' : ''; ?>"method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" novalidate autocomplete="off">//novalidate取消浏览器自定义的信息提示//autocomplete="off"取消历史记录客户端自动完成功能提示

step 7 : 登录功能的实现

来吧展示:

数据库连接查询

  1. 连接数据库
// 连接数据库$conn = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);mysqli_query($conn,'set names utf8');if(!$conn){exit('<h1>连接数据库失败</h1>');}
  1. 根据邮箱查询用户
// 根据邮箱查询用户信息,limit 是为了提高查询效率 $query = mysqli_query($conn, "select * from users where email = '{$email}' limit 1;");if (!$query) {$GLOBALS['message'] = '登录失败,请重试!';return;}
  1. 用户密码比对
    其中,密码在数据库中存储的时候要进行加密,百度搜md5在线加密
    网址:https://md5jiami.51240.com/
    将数据库中的密码换成自己在 md5 加密的 32位 密文


    login.php
 // 获取登录用户$user = mysqli_fetch_assoc($query);if (!$user) {// 用户名不存在$GLOBALS['message'] = '邮箱与密码不匹配';return;}// 一般密码是加密存储的if ($user['password'] !== md5($password)) {// 密码不正确$GLOBALS['message'] = '邮箱与密码不匹配';return;}
  1. 访问控制及登陆状态保持 (用来防止用户不登陆直接跳转到其他页面)

// 将用户信息存放在session中$_SESSION['current_login_user'] = $user;header('Location:/admin/');
}
  1. 将之前的(1~4步骤)用户密码验证封装成一个 login 函数, 如果是 POST 提交则处理登录业务逻辑
 if ($_SERVER['REQUEST_METHOD'] === 'POST') {login();
}
  1. 整合代码
    login.php
require_once '../config.php';
// 判断用户是否登录,防止用户不登陆直接跳转到其他页面
session_start();
function login(){if(empty($_POST['email'])){$GLOBALS['message'] = '请输入邮箱';return;}if(empty($_POST['password'])){$GLOBALS['message'] = '请输入密码';return;}$email = $_POST['email'];$password = $_POST['password'];// 连接数据库$conn = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);//防止页面出现乱码(中文显示带?问号)mysqli_query($conn,'set names utf8');if(!$conn){exit('<h1>连接数据库失败</h1>');}$query = mysqli_query($conn, "select * from users where email = '{$email}' limit 1;");if (!$query) {$GLOBALS['message'] = '登录失败,请重试!';return;}// 获取登录用户$user = mysqli_fetch_assoc($query);if (!$user) {// 用户名不存在$GLOBALS['message'] = '邮箱与密码不匹配';return;}// 一般密码是加密存储的if ($user['password'] !== md5($password)) {// 密码不正确$GLOBALS['message'] = '邮箱与密码不匹配';return;}//假数据//  if($email !== 'admin@qq.com'){//     $GLOBALS['message'] = '密码与邮箱不匹配';//     return;//  }// if($password !== '123'){//     $GLOBALS['message'] = '密码与邮箱不匹配';//     return;//  }// 将用户信息存放在session中$_SESSION['current_login_user'] = $user;header('Location:/admin/');
}if ($_SERVER['REQUEST_METHOD'] === 'POST') {// 如果是 POST 提交则处理登录业务逻辑login();
}
  1. 在每个页面开头部分加入session状态的判断
    栗子: index.php
 session_start();if(empty($_SESSION['current_login_user'])){header('Location:/admin/login.php');
}

step 8 : 封装公共函数

由于接下来的操作(开发)过程中会有很多需要查询数据库和判断用户是否登录的地方。如果每次都按照最原始的方法去写过于麻烦。 我们应该将重复的地方提取出来,封装一个公共的函数,方便后期调用和维护。

functions.php

<?php
require_once 'config.php';
//1. 封装判断用户是否登录信息,防止用户不登陆直接跳转到其他页面
session_start();
function get_userinfo(){if(empty($_SESSION['current_login_user'])){header('Location:/admin/login.php');exit();}return $_SESSION['current_login_user'];}//2.封装数据库查询,简化每次查询次数麻烦// 得先引入config.php文件,在文件开头引入// 封装多条数据
function mysql_all($sql){$conn = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);// $conn -> query("set names utf8");mysqli_query($conn,'set names utf8');if(!$conn){exit('连接失败');}$query = mysqli_query($conn,$sql);if(!$query){return false;}$result = array();while ($row = mysqli_fetch_assoc($query)) {$result[] = $row;}mysqli_free_result($query);mysqli_close($conn);return $result;
}
// 封装单条数据
function mysql_one ($sql) {$res = mysql_all($sql);return isset($res[0]) ? $res[0] : null;
}
// 封装增删改数据
function mysql_change ($sql) {$conn = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);mysqli_query($conn,'set names utf8');if (!$conn) {exit('连接失败');}$query = mysqli_query($conn, $sql);if (!$query) {// 查询失败return false;}// 对于增删修改类的操作都是获取受影响行数$affected_rows = mysqli_affected_rows($conn);mysqli_close($conn);return $affected_rows;
}

阿里百秀后台管理项目笔记 ---- Day01相关推荐

  1. 阿里百秀后台管理项目笔记 ---- Day03

    来吧展示: step1:所有文章数据展示 引入 functions.php 文件执行数据库查询以及判断用户登录状态 require_once '../functions.php'; get_useri ...

  2. b站黑马Vue2后台管理项目笔记——(1)登录功能

    说明: 此项目中使用的是本地SQL数据库,Vue2. 其他功能请见本人后续的其他相关文章. 本文内容实现的最终效果如下图: 目录 一.登录功能的实现 1.登录页面的布局: (1)查看当前工作区是否干净 ...

  3. b站黑马Vue2后台管理项目笔记——(2)主页布局(整体,Header,左侧菜单布局)

    说明: 此项目中使用的是本地SQL数据库,Vue2. 其他功能请见本人后续的其他相关文章. 本文内容实现的最终效果如下图: e.g.点击二级菜单用户列表,就会跳转到用户列表对应的index的地址(用户 ...

  4. b站黑马Vue2后台管理项目笔记——(3)用户列表

    说明: 此项目中使用的是本地SQL数据库,Vue2. 其他功能请见本人后续的其他相关文章. 本文内容实现的最终效果如下图: 三.用户列表的开发 目标效果: 点击二级菜单--用户列表,在右侧展示用户列表 ...

  5. 阿里百秀前后端交互项目

    项目简介 阿里百秀,内容管理系统,分为内容管理和内容展示两大核心功能. 1. 功能模块 1.1 内容管理 模块 功能 用户 登录.退出.用户增删改查 文章 文章管理 分类 分类管理 评论 评论管理 网 ...

  6. 移动web开发 17-1 响应式布局 bootstrap首页 框架 阿里百秀项目

    1 响应式开发原理 1.1 响应式开发原理 核心:使用媒体查询针对不同宽度的设备进行布局和样式的设置,从而适配不同设备的目的. 1.20媒体查询(重点) 媒体查询区间的写法 当屏幕宽度<=768 ...

  7. 移动端响应式布局项目之阿里百秀首页

    移动端响应式布局项目之阿里百秀首页 文章目录 移动端响应式布局项目之阿里百秀首页 前言 一.前期准备 1.1 建立文件夹 1.2 需求分析 1.2.1 页面布局分析 `判断每一部分占据栅格系统多少份` ...

  8. 四十三、项目实战—阿里百秀

    案例:阿里百秀移动端首页 技术选型 方案:我们采取响应式页面开发方案 技术:bootstrap框架 设计图:本设计图采用1280px设计尺寸 页面布局分析 屏幕划分分析 屏幕缩放发现 中屏幕和大屏幕布 ...

  9. 博客模板:xiu-v7-0阿里百秀主题-去域名限制

    <![endif]--> 公交车司机终于在众人的指责中将座位让给了老太太 </div> </div> </figure> 白嫖博客 你已登录为 : 13 ...

最新文章

  1. MySQL常用简单小命令
  2. 后台编写HttpWebRequest的POST请求,必须注意的一个小细节
  3. 什么是SVC模式【转】
  4. C++中的endl搭配cout和cin用法
  5. tomcat没有错,但是还是一闪而过(端口被占用)
  6. 表格c1等于a1加b1_中国最牛驾照,C1、B1、B2、A1、A2随便开,被称为万能的驾照!...
  7. 一个成功的Jsp程序员该怎样学习JSP呢?
  8. 用递归的方法,判断某个字符串是否为回文
  9. JDK帮助文档无法打开的常见问题和解决办法
  10. windows录屏_电脑是怎么录屏的呢?推荐三个录屏实用方法!
  11. PMP学习笔记 第12章 项目采购管理
  12. 3.3v稳压芯片有哪些
  13. MYSQL内存请求一直不释放_MySQL内存不释放
  14. android钟表,Android打造属于自己的时间钟表
  15. 通过主成分分析实现三维模型对齐【Principal Component Analysis】
  16. 短线牛股技术买点图解 擒牛选股预警 ​通达信选股公式 副图 源码
  17. 微信小程序之日期时间筛选器实现(支持年月日时分)
  18. mysql logs_MySQL Logs
  19. 《Enhanced Deep Residual Networks for Single Image Super-Resolution》论文阅读之EDSR
  20. 香蕉派 BPI-M5折腾记录(1)—— 开发板系统烧写

热门文章

  1. pureMVC的争议,说说缺点
  2. Windows XP 超级140个技巧(转)
  3. 字节跳动 前端校招 一二三面+hr面(2020-03)
  4. 【Filter过滤器案例】登录验证+敏感词过滤
  5. 推荐:物联网区块链项目---IoTeX
  6. Nwafu-OJ-1428 Problem Y C语言实习题五——3.数据倒置
  7. bzoj 4997: [Usaco2017 Feb]Why Did the Cow Cross the Road III
  8. 黑马mysql百度云盘_黑马-百度云搜索引擎
  9. 如何利用高德地图URI加载区域边界
  10. 我经常用的一款切图工具