开发者社区> spleated> 正文

ThinkPHP搭建博客

简介: 博客源码:https://github.com/pleated/blog 源码地址:https://github.com/xialeistudio/thinkphp-inaction/tree/master/blog功能 管理员登陆,修改密码,退出登录 文章分类添加,编辑,删除。
+关注继续查看

博客源码:https://github.com/pleated/blog
源码地址:https://github.com/xialeistudio/thinkphp-inaction/tree/master/blog
功能

  • 管理员登陆,修改密码,退出登录
  • 文章分类添加,编辑,删除。
  • 文章添加,编辑,删除。
  • 发表,管理评论
  • 添加,删除,展示友情链接

创建数据表

CREATE TABLE blog_admin (`adminId` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(20) NOT NULL COMMENT '账号', `password` char(32) NOT NULL COMMENT '密码', `createdAt` int(10) NOT NULL COMMENT '添加时间',`loginAt` int(11) NOT NULL DEFAULT '0' COMMENT '最近登录时间',`loginIp`varchar(15) NOT NULL DEFAULT '' COMMENT '最近登录IP',PRIMARY KEY (`adminId`), KEY `createdAt` (`createdAt`),KEY `account`(`username`,`password`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
INSERT INTO `blog_admin` VALUES ('1', 'admin', '6f1779da8462d85c012588fb73a2efb7', '0', '0', '');//添加管理员账号密码admin和admin

CREATE TABLE  blog_article (`articleId` int(11) NOT NULL AUTO_INCREMENT,`title` varchar(40) NOT NULL COMMENT '标题', `description` varchar(100) NOT NULL DEFAULT '' COMMENT '简介',`image` varchar(128) NOT NULL DEFAULT '' COMMENT '封面图片',`hits` int(11) NOT NULL DEFAULT '0' COMMENT '点击数',`createdAt` int(11) NOT NULL COMMENT '添加时间',`updateAt` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态',`sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序',`content` text NOT NULL COMMENT '文章内容',`categoryId` int(10) unsigned NOT NULL,PRIMARY KEY (`articleId`),KEY `hit` (`hits`),KEY `createdAt` (`createdAt`),KEY `status` (`status`),KEY `sort` (`sort`),KEY `fk_blog_article_blog_category_idx` (`categoryId`),CONSTRAINT `fk_blog_article_blog_category` FOREIGN KEY (`categoryId`) REFERENCES `blog_category` (`categoryId`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE  blog_category (`categoryId` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL COMMENT '分类名称',`isNav` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否显示在导航栏',`total` int(11) NOT NULL DEFAULT '0' COMMENT '文章总数',`sort` tinyint(4) NOT NULL DEFAULT '0' COMMENT '排序',PRIMARY KEY (`categoryId`),KEY `sort` (`total`),KEY `total` (`total`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE  blog_comment (`commentId` int(11) NOT NULL AUTO_INCREMENT,`nickname` varchar(20) NOT NULL COMMENT '昵称',`createdAt` int(11) NOT NULL COMMENT '评论时间',`createdIp` varchar(15) NOT NULL COMMENT 'ip地址',`content` text NOT NULL COMMENT '评论内容',`articleId` int(11) NOT NULL,PRIMARY KEY (`commentId`),KEY `created` (`createdAt`),KEY `fk_blog_comment_blog_article1_idx` (`articleId`),CONSTRAINT `fk_blog_comment_blog_article1` FOREIGN KEY (`articleId`) REFERENCES `blog_article` (`articleId`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE  blog_link( `linkId` int(11) NOT NULL AUTO_INCREMENT `name` varchar(20) NOT NULL COMMENT '站点名称',`link` varchar(100) NOT NULL COMMENT '链接地址',`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态',`sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序',PRIMARY KEY (`linkId`),KEY `sort` (`sort`),KEY `status` (`status`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

thinkphp\blog\Application\Admin模块
这是后台管理模块,需要管理文章,分类,评论,友情链接等功能。
thinkphp\blog\Application\Admin\Controller是这些功能的控制器:

ArticleController.class.php 文章控制器
CategoryController.class.php 分类控制器
CommentController.class.php 评论控制器
LinkController.class.php 友情链接控制器

admin模块是受保护的模块,所以这四个控制器许登陆后才能正常访问,在同级目录下创建BaseController.class.php控制器处理登录检测,需要进行权限检测的控制器继承它就行。例如:thinkphp\blog\index.php\admin\index\login调用的是blog\Application\Admin\Controller\IndexController.class.php//U('index/admin/index/login')

②分页处理
数据量不可预测,须在列表页进行分页处理,在需要分页的功能的控制器里面加入分页代码

③文章分类
文章是分类的,在读取文章列表的时候将分类信息同时查询处理,在这里使用ThinkPHP提供的ViewModel,在thinkphp\blog\Application\Common\Model\ArticleCategoryViewModel.class.php实现

④文件上传
thinkphp\blog\Application\Admin\View\Common\upload.html中定义上传功能,然后在thinkphp\blog\Application\Admin\Controller\IndexController.class.php控制器中添加upload方法,在thinkphp\blog\Application\Admin\View\Article\post.html中使用<include file="Common:upload"/>引用

thinkphp\blog\Application\Common模块
①分类处理
此模块是公用模块,其他模块公用的功能可以放在该模块下,例如上面提到的③文章分类是公用Model,所以放在Common/Model下。
文章分类时有'isNav'字段,这是用来标识分类是否是导航栏中的分类:

status为1:读取属于导航栏的分类
status为0:读取不属于导航栏的分类
读取全部分类

以上需求返回值是一致的,将以上三个需求封装成一个函数,根据传入的status决定返回数据
thinkphp\blog\Application\Common\Common\function.php

function getCategory($isNav = -1)
{
    $map = array();
    if ($isNav > -1)
    {
        $map['isNav'] = $isNav;
    }
    $model = new \Think\Model('Category');
    return $model->where($map)->order('sort DESC')->select();
}//当给定的status>-1时添加一个过滤参数,=-1则不添加。

②友情链接列表
友情链接是通过函数来定义,前端通过函数调用。thinkphp\blog\Application\Common\Common\function.php

③数据库字段大小写
在使用ThinkPHP的Model进行数据库操作时,返回的数据键名是大写的。
编辑'thinkphp\blog\Application\Common\Conf\db.php',在其中添加

'DB_PARAMS' => array(
        PDO::ATTR_CASE => PDO::CASE_NATURAL
    )//控制大小写

Home模块
①前台布局
此模块用到了ThinkPHP的模板布局功能
thinkphp\blog\Application\Common\Conf\config.php添加'LAYOUT_ON' => true,开启模板布局,ThinkPHP会默认使用名为“layout”的模板,在thinkphp\blog\Application\Home\View\layout.html文件。(代码就不贴了,github中都有),在此布局文件用到了模板常量,而ThinkPHP自带的模板常量只有_PUBLIC_,所以需在thinkphp\blog\Application\Home\Conf\config.php中单独定义

return array(
    'TMPL_PARSE_STRING' => array(
        '__VENDOR__' => '/thinkphp/blog/public/vendor',
        '__JS__' => '/thinkphp/blog/public/home/js',
        '__CSS__' => '/thinkphp/blog/public/home/css',
        '__IMAGE__' => '/thinkphp/blog/public/home/images'
    ),

我的项目是部署在localhost/thinkphp中,在定义模板常量的时候需要写全。
公用部分用vendor目录,
导航栏,友情链接等这几个功能都是公用功能,在模板文件使用调用thinkphp\blog\Application\Common\Common\function.php中的getCategorygetLinks函数,不会出现读取不到数据的问题。

②评论间隔处理
使用缓存来做评论间隔处理
thinkphp\blog\Application\Home\Controller\IndexController.class.php里的comment()方法执行此操作。$id是被评论文章的ID,$key = get_client_ip() . '-view-article-' . $id;是使用ID+IP的方式识别当前评论用户,若S函数返回值不为空,则缓存有效期内已经评论过,返回错误信息,若评论成功,则使用当前$key写入缓存

③Ajax评论
在文章页评论功能的开发中使用Ajax, 在thinkphp\blog\Application\Home\View\Index\article.html中。提交的时候使用$.post方式提交。在回调函数中需要先判断是否出错,如果出错则显示错误信息,否则显示该评论。评论使用的是jQuery的prepend方法。因最新的评论在最前面,须将生成的html添加到最前面。

其他总结

  • 入口index.php文件调用thinkphp\blog\Application\Home\Controller\IndexController.class.php和thinkphp\blog\Application\Common\Model\ArticleCategoryViewModel.class.php。
    thinkphp\blog\Application\Common\Conf\config.php应用配置文件也就是调用所有模块之前都会首先加载的公共配置文件

  • thinkphp\blog\Application\Admin\View\..这个文件中index.html是后台的编写各个模块的列表,post.html则是发表页面

  • 前台Home模块用到了ThinkPHP的模块布局功能。编辑
    thinkphp\blog\Application\Common\Conf\config.php文件,默认调用thinkphp\blog\Application\Home\View下的layout.html文件

  • 该布局用到了常量模块,而ThinkPHP自带的模块常量只有PUBLIC,所以需在
    thinkphp\blog\Application\Common\Conf\config.php中单独定义,并在
    thinkphp\blog\Application\Home\Conf\config.php中调用需要的布局。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
19810 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
29185 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
22540 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
16459 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
20704 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14900 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23582 0
+关注
spleated
渗透测试入门的小白一只
71
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载