Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/data
/install.php
8 changes: 8 additions & 0 deletions .htaccess
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

</IfModule>
107 changes: 72 additions & 35 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,56 +1,93 @@
介绍
====
# MiniCMS

MiniCMS是一个针对个人网站设计的微型内容管理系统。它的特点是:
## 项目介绍

1. 不需要数据库在支持,只需要一个可以运行PHP的Web环境
MiniCMS是一个针对个人网站设计的微型内容管理系统。

主要特点:

1. 不需要数据库支持,只需要一个可以运行 PHP 的 Web 环境
2. 只针对个人网站设计,没有复杂的成员管理和权限设置
3. 没有分类只有标签,免除发布文章时到底该怎么分类的纠结
4. 只有“文章”和“页面”两该个系统,没有“评论”、“插件”、“主题”,让你更专注于创造内容
4. 只有“文章”和“页面”两个系统,没有“评论”、“插件”,让你更专注于创造内容
5. 其他功能:网站基本信息、状态、主题、URL 类型、ICP 备案号、账号和密码等可在后台配置

安装
====
## 安装

1. 下载最新版的install.php,上传到网站根目录
2. 浏览器访问根目录下instal.php,填入网站信息和初始账号密码
1. 下载最新版的 install.php,上传到网站根目录
2. 浏览器访问根目录下 instal.php,填入网站信息和初始账号密码
3. 开始安装

结构
====
## 文件结构

```
mc-admin 后台
mc-files 内容
|--theme 主题
index.php 入口文件
admin 后台管理
core 核心
theme 主题
data 内容数据
|--config.php 配置文件
|--posts 文章
| |--data 数据
| |--index 索引
|--pages 页面
|--data 数据
|--index 索引
.htaccess Apache rewrite 配置文件
nginx.conf Nginx rewrite 配置
```

## URL 格式

默认 query 模式

文章: `http://example.com/?post/[a-z0-9]{6}`

标签: `http://example.com/?tag/[^/]+`

日期: `http://example.com/?date/([0-9]{4}-[0-9]{2}`

页面: `http://example.com/?([-a-zA-Z0-9]+)+`

可选 history 模式,需要服务器支持开启路径重写

文章: `http://example.com/post/[a-z0-9]{6}`

标签: `http://example.com/tag/[^/]+`

日期: `http://example.com/date/([0-9]{4}-[0-9]{2}`

页面: `http://example.com/([-a-zA-Z0-9]+)+`

## 模板标签

```

URL格式
=======
app_site_name() // 网站标题
app_site_desc() // 网站描述
app_nick_name() // 站长昵称

app_theme_url() // 主题文件夹中文件的URL

文章: http://1234n.com/?post/[a-z0-5]{6}
标签: http://1234n.com/?tag/[^/]+/
页面: http://1234n.com/?([-a-zA-Z0-5]+/)+

模板标签
=======
app_next_post() // 循环获取文章
app_post_title() // 文章标题
app_post_link() // 文章标题A链接
app_post_content() // 文章内容
app_post_url() // 文章URL
app_post_date() // 文章发布日期
app_post_time() // 文章发布时间
app_post_tags() // 文章标签

app_comment_code()// 文章评论代码
app_footer_code() // 网页底部代码
```
mc_site_name() // 网站标题
mc_site_desc() // 网站描述
mc_user_nick() // 站长昵称

mc_theme_url() // 主题文件夹中文件的URL

mc_next_post() // 循环获取文章
mc_the_name() // 文章标题
mc_the_date() // 发布日期
mc_the_time() // 发布时间
mc_the_content() // 文章内容
mc_the_tags() // 文章标签

## 打包发布

打包安装包文件 install.php 的构建命令

```shell
# 使用 php 命令执行
php build.php [指定版本号]
# 示例
php build.php 1.2.5
```
57 changes: 57 additions & 0 deletions admin/common.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php
define('PATH_ROOT', dirname(dirname(__FILE__))); // 定义根路径
require_once PATH_ROOT . '/core/common.php';

function app_check_login()
{
if (isset($_COOKIE['token'])) {
$token = $_COOKIE['token'];
global $app_config;
if ($token != md5($app_config['user_name'] . '_' . $app_config['user_pass'])) {
Header("Location:login.php");
exit;
}
} else {
Header("Location:login.php");
exit;
}
}

function shorturl($input)
{
$base32 = array(
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
'y', 'z', '0', '1', '2', '3', '4', '5'
);

$hex = md5('prefix' . $input . 'surfix' . time());
$hexLen = strlen($hex);
$subHexLen = $hexLen / 8;
$output = array();

for ($i = 0; $i < $subHexLen; $i++) {
$subHex = substr($hex, $i * 8, 8);
$int = 0x3FFFFFFF & (1 * hexdec('0x' . $subHex));
$out = '';
for ($j = 0; $j < 6; $j++) {
$val = 0x0000001F & $int;
$out .= $base32[$val];
$int = $int >> 5;
}
$output[] = $out;
}
return $output;
}

function post_sort($a, $b)
{
$a_date = $a['date'];
$b_date = $b['date'];

if ($a_date != $b_date)
return $a_date > $b_date ? -1 : 1;

return $a['time'] > $b['time'] ? -1 : 1;
}
File renamed without changes.
7 changes: 7 additions & 0 deletions admin/foot.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
</div>
</div>
<div id="footer">
<div class="footer_box">感谢使用 <a href="http://1234n.com/?projects/minicms/" class="link" target="_blank">MiniCMS</a> 进行创作<span>v<?php echo $app_config['version']; ?></span></div>
</div>
</body>
</html>
50 changes: 50 additions & 0 deletions admin/head.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php
ini_set("display_errors", "On");
error_reporting(E_ALL);
require_once '../data/config.php';

// if (isset($_COOKIE['token'])) {
// $token = $_COOKIE['token'];

// if ($token != md5($app_config['user_name'] . '_' . $app_config['user_pass'])) {
// Header("Location:index.php");
// exit;
// }
// } else {
// Header("Location:index.php");
// exit;
// }

$pagefile = basename($_SERVER['PHP_SELF']);
// echo $pagefile;exit;

?>
<!DOCTYPE html>
<html lang="zh-CN">

<head>
<meta charset="utf-8" />
<title>MiniCMS</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta content="telephone=no,email=no" name="format-detection" />
<meta name="generator" content="MiniCMS"/>
<link rel="icon" href="../favicon.ico" />
<link href="style.css" rel="stylesheet" />
</head>

<body>
<div id="menu">
<h3 id="menu_title">
<a href="index.php" class="link"><?php echo htmlspecialchars($app_config['site_name']); ?></a>
</h3>
<ul>
<li <?php echo $pagefile == 'post.php' || $pagefile == 'post-edit.php' ? 'class="current"' : ''; ?>><a href="post.php">文章</a></li>
<li <?php echo $pagefile == 'page.php' || $pagefile == 'page-edit.php' ? 'class="current"' : ''; ?>><a href="page.php">页面</a></li>
<li <?php echo $pagefile == 'settings.php' ? 'class="current"' : ''; ?>><a href="settings.php">设置</a></li>
<li><a href="logout.php">登出</a></li>
</ul>
<div class="clear"></div>
</div>
<div id="content">
<div id="content_box">
56 changes: 56 additions & 0 deletions admin/index.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?php
// 后台首页
require_once 'common.php';
app_check_login();

if (isset($_POST['login'])) {
if (
$_POST['user'] == $app_config['user_name']
&& $_POST['pass'] == $app_config['user_pass']
) {
setcookie('token', md5($app_config['user_name'] . '_' . $app_config['user_pass']));
// Header("Location: post.php");
}
}
?>
<?php require 'head.php' ?>
<div>
<div class="admin_page_name">管理面板</div>
<div class="admin_page_name">
<span>页面:</span>
<a href="page-edit.php" class="link">创建页面</a>
<a href="page.php" class="link">所有页面</a>
<a href="page.php?state=publish" class="link">已发布</a>
<a href="page.php?state=draft" class="link">草稿箱</a>
<a href="page.php?state=delete" class="link">回收站</a>
</div>
<div class="admin_page_name">
<span>文章:</span>
<a href="post-edit.php" class="link">撰写文章</a>
<a href="post.php" class="link">所有文章</a>
<a href="post.php?state=publish" class="link">已发布</a>
<a href="post.php?state=draft" class="link">草稿箱</a>
<a href="post.php?state=delete" class="link">回收站</a>
</div>
<div class="admin_page_name">
<span>前台:</span>
<a href="<?php app_site_link(); ?>" class="link" target="_blank">首页</a>
<a href="<?php app_get_url('archive'); ?>" class="link" target="_blank">存档</a>
<a href="<?php app_get_url('rss'); ?>" class="link" target="_blank">订阅</a>
<a href="<?php app_get_url('xml'); ?>" class="link" target="_blank">地图</a>
</div>
<div class="admin_page_name">
<span>系统:</span>
<a href="settings.php" class="link">设置</a>
<a href="logout.php" class="link">退出登录</a>
</div>
</div>

<div class="admin_index_help">
<span>资源链接:</span>
<span><a href="https://github.com/bg5sbk/MiniCMS" class="link" target="_blank">@Github</a></span>
<span><a href="http://1234n.com/?projects/minicms/" class="link" target="_blank">官方网站</a></span>
<span><a href="http://1234n.com" class="link" target="_blank">技术支持</a></span>
</div>

<?php require 'foot.php' ?>
70 changes: 70 additions & 0 deletions admin/login.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<?php
// 后台登录页
require_once dirname(dirname(__FILE__)).'/data/config.php';

if (isset($_COOKIE['token'])) {
$token = $_COOKIE['token'];

if ($token == md5($app_config['user_name'].'_'.$app_config['user_pass'])) {
Header("Location: index.php");
}
}

if (isset($_POST['login'])) {
if ($_POST['user'] == $app_config['user_name']
&& $_POST['pass'] == $app_config['user_pass']) {
setcookie('token', md5($app_config['user_name'].'_'.$app_config['user_pass']));
Header("Location: index.php");
} else {
$display_message = '账号或密码错误';
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title><?php echo htmlspecialchars($app_config['site_name']); ?> - Powered by MiniCMS</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="generator" content="MiniCMS" />
<meta name="author" content="MiniCMS" />
<link rel="icon" href="../favicon.ico" />
<style type="text/css">
* { font-family:"Microsoft YaHei",Segoe UI,Tahoma,Arial,Verdana,sans-serif; }
body { background:#f9f9f9; font-size:14px; }
.link { text-decoration:none; color:#0000ff; }
.link:hover { background:#0000ff; color:#fff; }
.login-form {width: 360px;margin: 120px auto 0;}
#login_title { text-align:center; margin: 0 auto; font-size:32px; color:#333; text-shadow: 0 2px 0 #FFFFFF;}
#login_form { width:360px; margin:0 auto; margin-top:20px; border:solid 1px #ccc; background:#fff; border-radius:3px 3px 3px 3px;}
#login_form_box { padding:16px; }
#login_form .label { font-weight:bold; padding-bottom:6px; color:#333; }
#login_form .textbox { border:1px solid #e0e0e0; padding:6px; margin-bottom:20px; border-radius:3px 3px 3px 3px; }
#login_form .textbox input { border:none; padding:0; font-size: 20px; width:100%; color:#333; outline: none; }
#login_form .bottom { text-align:center; }
#login_form .button { padding:4px 16px; font-size:14px; }
#footer { text-align:center; margin-top: 10px; color:#888; margin: 10px auto 0; font-size:11px; }
.display-message { border-radius:3px; border-style:solid; border-width:1px; }
.display-message { background-color: #FFFFE0; border-color: #E6DB55; padding:8px; margin: 10px 0; }
</style>
</head>
<body>
<div class="login-form">
<div id="login_title"><?php echo htmlspecialchars($app_config['site_name']); ?></div>
<?php if (isset($display_message)) { ?>
<div class="display-message"><?php echo $display_message; ?></div>
<?php } ?>
<div id="login_form">
<form action="login.php" method="post" id="login_form_box">
<div class="label">登录帐号</div>
<div class="textbox"><input name="user" type="text" /></div>
<div class="label">登录密码</div>
<div class="textbox"><input name="pass" type="password" /></div>
<div class="bottom"><input name="login" type="submit" value="登录" class="button" /></div>
</form>
</div>
<div id="footer">Powered by <a href="http://1234n.com/?projects/minicms/" class="link" target="_blank">MiniCMS</a></div>
</div>
</body>
</html>
4 changes: 4 additions & 0 deletions admin/logout.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?php
// 退出登录
setcookie("token", "", time() - 3600);
Header("Location: login.php");
Loading