使用PHP CodeIgniter 框架搭建一个简易的Blog
准备工作
在php.ini配置文件中添加所在时区
根据PHP开发规范,修改Visual Studio Code中行尾结束符为\n,即 Unix 格式换行符(LF)
下载 CodeIgniter 3.1.10 并解压到网站根目录,按照自己的信息来修改 config.php,database.php
下载Bootstrap到网站根目录(参考之前的文章)
移除index.php(请参考官方文档操作)
简单规划
分为两个类:
Welcome类,用于浏览者访问使用Admin类,用于管理员日常操作
Welcome类包含文章列表和文章查看等功能
Admin类包含管理员登录,文章添加,文章修改和删除,账号的修改等功能
创建数据库类(Model)
在模型中创建两个函数来提供分页所需的数据,一个是文章总数,一个是查询一定范围的数据
/**
* 查询总数
*/
public function post_counts()
{
return $this->db->count_all('blog_main');
}
/**
* 获取文章列表
*/
public function get_post_list($limit,$start)
{
$this->db->limit($limit, $start);
$query = $this->db->get('blog_main');
if ($query->num_rows() > 0)
{
foreach ($query->result() as $row)
{
$data[] = $row;
}
return $data;
}
return FALSE;
}
创建Welcome类
<?php
// 防止非法访问当前的 PHP 文件
defined('BASEPATH') OR exit('No direct script access allowed');
class Welcome extends CI_Controller {
...
...
...
}
类名和类文件的命名规则应当一致,首字母大写,如有多个单词,使用下划线分割。
构造函数
public function __construct()
{
parent:: __construct();
$this->load->helper("url");
$this->load->library("pagination");
$this->load->model('Blog_post_model');
}
具有构造函数的类会在每次创建新对象时先调用此方法,非常适合在使用对象之前做一些初始化工作,在构造函数中加载的数据会在整个类中生效,不必在每个方法中再次加载。(更多关于构造函数的内容,请参考PHP官方文档及文末给出的参考资料)
创建默认方法
public function index()
{
$config['base_url'] = base_url() . 'index.php/welcome/index/';
$config['total_rows'] = $this->Blog_post_model->post_counts();
$config['per_page'] = 6;
$config["uri_segment"] = 3;
$this->pagination->initialize($config);
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
$result['results'] = $this->Blog_post_model->get_post_list($config['per_page'],$page);
$result["links"] = $this->pagination->create_links();
$this->load->view('welcome',$result);
}
创建视图
创建模板 将经常使用的静态HTML当作模板,降低代码重复度,方便调用。
新建页头文件 application/views/templates/header.php 并添加以下代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>博客</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="<?php echo base_url();?>static/css/bootstrap.css" rel="stylesheet">
<link href="<?php echo base_url();?>static/css/style.css" rel="stylesheet">
</head>
<body>
再新建个页脚文件 application/views/templates/footer.php ,然后添加以下代码:
<script src="<?php echo base_url();?>static/jquery/jquery-3.3.1.js"></script>
<script src="<?php echo base_url();?>static/js/bootstrap.js"></script>
<script src="<?php echo base_url();?>static/js/scripts.js"></script>
</body>
</html>
创建welcome试图文件
<div class="container-fluid header">
<div class="row">
<div class="col-md-12">
<h2>
博客
</h2>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-md-12">
<?php foreach($results as $obj): ?>
<div class="artList border shadow p-3 mb-5 bg-white rounded">
<h3 style="margin-bottom:30px">
<a href="<?php echo site_url();?>/Welcome/browse_post/<?php echo $obj->id;?>"><?php echo $obj->title;?></a>
</h3>
<p>
<?php
$data = $obj->content;
$data=strip_tags($data);//去除html标记
$pattern = "/&[a-zA-Z]+;/";//去除特殊符号
$data=preg_replace($pattern,'',$data);
$data=mb_strimwidth($data,0,255,"......");
echo $data;
?>
</p>
<p>
<a href="<?php echo site_url();?>/main/conView/<?php echo $obj->id;?>">阅读更多</a>
<span class="float-right">更新时间:<?php echo date("Y-m-d",$obj->create_time);?></span>
</p>
</div>
<?php endforeach; ?>
</div>
</div>
<?php echo $links ?>
</div>
修改routes
$route['default_controller'] = 'Welcome';
将默认控制器改成Welcome,那么在浏览器中输入http://www.xxx.com时,CI框架会开始寻找Welcome类,然后调用index方法,index方法会处理数据然后返回视图welcome到浏览器。
以上就是CI框架工作的大致流程。
文章详情页面
(未完待续)
本文参考:
Visual Studio Code: How to show line endings