html,body{height:100%}
body{max-width:800px;font-family:"Work Sans",sans-serif;margin:0 auto;line-height:1.7;font-size:20px;color:#333;padding:2em 1em;text-rendering:optimizeLegibility;height:100%}
@media screen and (max-width: 600px){body{max-width:100%;padding:1em}}
h1,h2,h3,h4,h5,h6{font-family:"Lato", "Helvetica Neue", Helvetica, sans-serif;font-weight:bold;line-height:1.8;margin:0;text-transform:capitalize}
a{color:#60c17d;text-decoration:none}
a:hover{color:#333}
p a{color:#333;text-decoration:none;background:-webkit-linear-gradient(transparent 90%, #85cf9b 10%);box-shadow:inset 0 0 0 0 #85cf9b;-webkit-transition:box-shadow ease 1s;-moz-transition:box-shadow ease 1s;transition:box-shadow ease 1s}
p a:hover{color:#fff;box-shadow:inset 0 -100px 0 0 #85cf9b}
figure{margin:0}
img{max-width:100%}
pre,code{overflow:auto;font-size:14px;border-radius:3px;border:1px solid #60c17d}
pre>code,code>code{border:none}
pre{padding:1em}
code{padding:0.1em}
blockquote{border-left:2px solid #60c17d;padding-left:1em;font-family:Georgia,Times,Times New Roman,serif;font-size:18px;font-style:italic}
.headline{font-size:4em}
@media screen and (max-width: 600px){.headline{font-size:2em}}
.post-headline{font-size:4em}
@media screen and (max-width: 600px){.post-headline{font-size:1.5em}}
.home{background-image:url(./public/images/left-arrow.svg);background-repeat:no-repeat;height:40px;width:40px;opacity:0.9;position:fixed;top:50px;left:50px}
.home:hover{opacity:1}
@media screen and (max-width: 1000px){.home{top:90%;left:90%;height:30px;width:30px;opacity:0.6}}
.video{width:100%;height:360px}
@media screen and (max-width: 1000px){.video{height:300px}}
@media screen and (max-width: 600px){.video{height:180px}}
#markdown-toc::before{content:"内容索引";font-weight:bold}
#markdown-toc ul{list-style:decimal}
#markdown-toc{border:1px solid #60c17d;padding:1.5em 2.2em;list-style:decimal;display:inline-block}
.red{color:#FF0000}
.tb_lib{width:100%;border-collapse:collapse;margin:0 auto}
.tb_lib th,.tb_lib td{padding:6px;border:1px solid #000}
.tb_lib th{background-color:#60c17d;text-align:left;color:#FFF}
.tb_lib tr.hover td{background-color:#C1FFC1}
.ft-p{font-size:12px;color:#ccc}
WeizePHP 文档
概览
WeizePHP是一款超小的PHP框架,使用MIT协议,您可以免费自由的应用于商业。她有后台、有权限管理、有完整的开发手册。入门简单,只要会php语法,就可以快速的开发各种应用和网站^_^。
目前常用于开发各类 网站
、企业管理系统
、手机APP接口
...
缺点
负责任的告诉你,WeizePHP框架有一定的局限性,特殊的需求,可能需要修改核心代码。核心代码就几行而已,想怎么改,就怎么改。
优点
简单、易用、好维护!!!
使用交流
QQ群:297634163(WeizePHP框架)
E-mail:weizesw@gmail.com / 310472156@qq.com
QQ:310472156
目录结构
./app/admin // 后台应用
./app/admin/article // 文章管理
./app/admin/home // 后台首页
./app/admin/login // 后登陆模块
./app/admin/nav // 导航管理
./app/admin/singlepage // 单页管理
./app/admin/system // 系统管理
./app/admin/user // 用户管理
./app/appapi // APP接口应用
./app/appapi/login // APP登陆接口
./app/content // 内容应用(系统默认加载的应用)
./app/content/article // 内容文章模块
./app/content/home // 内容首页(系统默认首页)
./app/content/singlepage // 内容单页模块
./app/general // 通用应用
./app/general/captcha // 通用验证码模块
./app/general/ueditor // 通用ueditor服务端模块
./app/general/upload // 通用上传模块
./app/member // 会员应用
./data // 数据目录
./data/backup_* // 备份目录
./data/cache // 缓存目录
./data/log // 系统日志
./data/tmp // 临时目录
./install // 框架安装目录
./lang // 语言包目录
./lib // 常用函数、类库目录
./public // 公共目录
./public/css // 公用css目录
./public/fonts // 公用字体目录
./public/images // 公用图片目录
./public/js // 公用js目录
./public/theme // 主题css/js/image目录
./public/ueditor // UEditor富文本编辑器
./public/webuploader // WebUploader上传组件
./theme // 主题模板
./theme/default // 主题默认模板
./upload // 上传目录
./weize // 框架核心目录
./weize/framework.php // 框架核心文件
./weize/function.php // 框架核心函数库
./weize/w_mysqli.class.php // 框架MySQL连接/分页类
./weize/w_user.class.php // 框架用户类
index.php 框架默认入口
admin.php 后台入口
appapi.php APP接口入口
general.php 通用应用入口
member.php 会员中心入口
docs.html WeizePHP开发文档
快速入门(动手写自己的 Hello world!)
1、在 ./app/content
目录下创建 hello
文件夹,并在 hello
文件夹下建立 index.php
文件
if(!defined('IN_WEIZEPHP')) { exit('Access Denied'); } // 禁止直接访问
$str = 'Hello World!'; // 赋值
$sql = "SELECT * FROM `{$wconfig['db']['tablepre']}user`";
$user = $wdb->get_row($sql); // 获取一条用户信息
include $wconfig['theme_path'] . '/content/hello/index.html.php'; // 包含模板文件
2、在 ./theme/default/content
目录下创建 hello
文件夹, 并在 hello
下建立 index.html.php
模板文件
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<title>Hello world!</title>
</head>
<body>
<?php echo $str; ?> <!-- 输出 -->
<?php print_r($user); ?> <!-- 打印输出用户信息 -->
</body>
</html>
3、访问刚刚做好的 hello
模块。下面是个示例网址:
想要开发新的模块,开发模式都跟这个 hello
模块类似。如果想要了解复杂一点的开发,可以查看系统自带的 article
文章模块和 singlepage
单页模块。
4、如果想在 后台
添加 hello
管理菜单。需要打开 ./lang/zh_cn/w_menu.inc.php
文件,然后添加如下代码,
$wmenu['admin/hello/edit'] = array('name'=>'hello编辑', 'display'=>1);
之后,刷新一下后台,即可看到新添加的 hello管理
菜单。
同时,也在后台也添加 ./app/admin/hello/edit.php
模块文件,最后写一下具体的控制逻辑。
单一入口说明
admin.php 后台入口
appapi.php APP接口入口
general.php 通用应用入口
member.php 会员中心入口
当访问 index.php?m=home&a=index 时,
程序读取的是首页模块,即 ./app/content/home/index.php 文件;
当访问 index.php?m=article&a=view&aid=1 时,
程序读取的是文章模块 ./app/content/article/view.php 文件,且ID为 1 的文章;
m 表示模块(即英文module)
a 表示模块下的一个动作文件(即英文action)
常量、变量、函数、类库、JS
W_PERMISSION // 是否启用权限控制(1开启,0关闭)
W_APPNAME // 当前应用名
IN_WEIZEPHP // 默认值是TRUE.主要用于避免其他程序被非法引用
W_ROOT_PATH // 根目录
// === 变量 ===
$m // 当前模块
$a // 当前动作
$isajax // 是否是AJAX访问。1为是,0为否
$wflag // 当前脚本访问标识。如:content/home/index
$wconfig['theme_path'] // 主题模板目录
$wconfig['theme_skin'] // 主题皮肤css/js/image目录
$wconfig['db']['tablepre'] // 表前缀
$wconfig['public_path'] // 公共目录(启用CDN时有用)
$wconfig['upload_path'] // 上传(启用CDN时有用)
$wmenu // 菜单数组
$wlang // 语言包数组
// === 函数 ===
w_stripslashes($string) // 去除反斜线
w_addslashes($string) // 添加反斜线
// 截取部分字符串
w_substr($str, $start = 0, $length = 30, $charset = "utf-8", $suffix = false)
w_sizecount($size) // 数据大小统计
w_get_client_ip() // 获取客户端IP
w_random($length) // 生产随机字符串,如:w_random(6);
w_sign($array) // 签名函数
// 语言替换函数
w_lang($lang, $array = array())
// 发送cookie到浏览器
w_setcookie($name, $value, $expire = 0, $httponly = false)
// 成功提示函数
w_success($message, $url = '')
// 错误提示函数
w_error($message, $url = '')
w_rewriteurl($url) // 伪静态函数
w_get_siteurl() // 获取站点网址函数。如:http://www.75hh.com/
// === 类库 ===
// 数据库类实例化
$wdb = new w_mysqli();
---------------------------------
// 获取一条数据
$sql = "SELECT * FROM `w_user`";
$row = $wdb->get_row($sql);
---------------------------------
// 获取多条数据
$sql = "SELECT * FROM `w_user`";
$lists = $wdb->get_all($sql);
---------------------------------
// 分页
$sql = "SELECT * FROM `w_user`";
$data = $wdb->pagination($sql, 1); // 1条一页
$output = $wdb->pagination_output();
foreach($data as $val) {} // 遍历分页数据
echo $output; // 输出分页HTML
---------------------------------
// 用户管理类实例化
$wuser = new w_user();
---------------------------------
$wuser->sid // Session ID
$wuser->session // Session 值
$wuser->aid // Access Token ID
$wuser->accesstoken // Access Token 值
$wuser->ip // 当前用户的IP地址
$wuser->uid // 当前用户的 uid
$wuser->lastvisit // 当前用户的上次访问时间
$wuser->formtoken // 当前用户表单令牌
$wuser->username // 当前用户名
$wuser->roleid // 当前用户角色ID
$wuser->point // 当前用户积分
$wuser->balance // 当前用户余额
$wuser->realname // 当前用户真名
$wuser->nickname // 当前用户昵称
---------------------------------
// 注册用户
$result = $wuser->register($username, $username_again, $password, $password_again, $email, $email_again, $roleid = 0, $mobile = '');
# $result 状态码 #
1 正确状态
0 未知错误
-1 用户名只允许使用字母、数字、下划线,且必须需以字母开头
-2 用户名不能小于3个字符
-3 用户名不能大于15个字符
-4 该用户名已经被注册
-5 两次输入的用户名不一致
-6 两次输入的密码不一致
-7 密码不能小于6个字符
-8 密码不能大于15个字符
-9 E-mail格式有误
-10 该E-mail已经被注册
-11 两次输入的邮箱不一致
-12 手机格式不正确
-13 手机已经被占用
-14 登录账号不正确
-15 IP登录错误次数过多,请N分钟后再试
-16 账号登录错误次数过多,请N分钟后再试
-17 用户不存在,或者已经被删除,您还可以尝试N次
-18 登陆密码错误,您还可以尝试N次
---------------------------------
$wuser->login($username, $password, $mode = "session") // 登录.如果登陆错误,这里限制15分钟锁定
$wuser->logout() // 登出
$wuser->check_access_permission() // 检查访问权限
$wuser->get_curapp_user_menu() // 获取“当前应用”的“用户菜单”
$wuser->actionlog($loginfo) // 记录用户操作日志
---------------------------------
// === JS ===
w_dialog_success(message, url) // 成功对话弹出框
w_dialog_error(message) // 错误对话弹出框
w_dialog_confirm(message, ok) // 确认对话弹出框
w_dialog_custom(title, message, ok) // 自定义对话弹出框
添加伪静态示例
// 2、添加内容伪静态
$wconfig['rewrite']['content'] = array();
$wconfig['rewrite']['content'] = array(
'/^index.php\?m=singlepage&a=view&spid=(\d+)$/' => 'singlepage-view-$1.html', // 单页伪静态示例
);
// 3、打开 .htaccess 文件,开启伪静态,并添加“单页”伪静态(这里是Apache伪静态示例)
RewriteEngine on
RewriteRule ^singlepage-view-(\d+).html$ index.php?m=singlepage&a=view&spid=$1
“单页伪静态” Nginx 示例
listen 80;
root /data/www/***;
server_name www.***.com ***.com;
location / {
index index.html index.htm index.php;
rewrite ^([^\.]*)/singlepage-view-(\d+)\.html$ $1/index.php?m=singlepage&a=view&spid=$2 last;
if (!-e $request_filename) {
return 404;
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www/***$fastcgi_script_name;
include fastcgi_params;
}
}
编码规范
本规范由编程原则组成,融合并提炼了开发人员长时间积累下来的成熟经验,意在帮助形成良好一致的编程风格。
index.php // 普通文件
menu.inc.php // 包含文件
extend.func.php // 函数文件
mysqli.class.php // 类库文件
framework.lang.php // 语言包文件
// === 常量命名 ===
全部使用大写字母命名,少数特别必要的情况下,可使用下划线“_”来分隔单词;
define('W_APPNAME', 'front'); // 前台应用
define('W_ROOT_PATH', dirname(__FILE__)); // 根目录
// === 变量、类、函数、表、字段命名 ===
一律为小写格式,除非必要,单词之间一般不使用下划线“_”进行分割;
以标准计算机英文为蓝本,杜绝一切拼音、或拼音英文混杂的命名方式;
变量命名只能使用项目中有据可查的英文缩写方式,
例如可以使用$data而不可使用$data1、$data2这样容易产生混淆的形式,
应当使用$articledata、$postdata这样一目了然容易理解的形式;
可以合理的对过长的命名进行缩写,例如$bio($biography),$ccb($ChinaConstructionBank),
前提是英文中有这样既有的缩写形式,或字母符合英文缩写规范;
必须清楚所使用英文单词的词性,在权限相关的范围内,
大多使用$allow***或$is***的形式,前者后面接动词,后者后面接形容词。
// === SQL语句书写 ===
所有SQL语句中,除了表名、字段名称以外,全部语句和函数均需大写;
数据库SQL语句中,所有数据必须加单引号,无论数值还是字串,以避免可能的注入漏洞和SQL错误。
$sql = "SELECT `username` FROM `{$wconfig['db']['tablepre']}user` WHERE `uid`='{$uid}'";
// === CSS 写作注意事项 ===
1. 属性写在一行内,属性之间、属性名和值之间以及属性与“{}”之间须有空格,例如:.class { width: 400px; height: 300px; }
2. 属性的书写顺序:
2.1. 按照元素模型由外及内,由整体到细节书写,大致分为五组:
位置:position,left,right,float
盒模型属性:display,margin,padding,width,height
边框与背景:border,background
段落与文本:line-height,text-indent,font,color,text-decoration,...
其他属性:overflow,cursor,visibility,...
2.2. 针对特殊浏览器的属性,应写在标准属性之前,例如:-webkit-box-shadow:; -moz-box-shadow:; box-shaow:;
3. 谨慎添加新的选择符规则,尤其不可滥用 id,尽可能继承和复用已有样式
4. 选择符、属性、值均用小写(格式的颜色值除外),缩写的选择符名称须说明缩写前的全称,例如 .cl -> Clearfix
5. 尽量避免使用各种 CSS Hack,如确实有必要,可以使用
6. 勿使用冗余低效的 CSS 写法,例如:
ul li a span { ... }
7. 慎用 !important
8. 建议使用在 class / id 名称中的词语
8.1. 表示状态:a->active
8.2. 表示结构:h->header,c->content,f->footer
8.3. 表示区域:mn->main,sd->side,nv-navigation,mu->menu
8.4. 表示样式:l-list,tab,p_pop
9. 开发过程中的未定事项,须用 [!] 标出,以便于后续讨论整理
数据表字典
w_config(站点配置表)
字段名 | 注释 | 备注 | 类型 |
---|---|---|---|
ckey | 键名 | varchar(255) | |
cvalue | 键值 | text |
w_user(用户表)
字段名 | 注释 | 备注 | 类型 |
---|---|---|---|
uid | 用户ID | mediumint(8) | |
用户邮箱 | char(40) | ||
username | 用户名 | char(15) | |
mobile | 手机号 | char(11) | |
password | 密码 | char(32) | |
status | 状态 | 0关闭,1启用 | tinyint(1) |
roleid | 角色ID | smallint(5) | |
regtime | 注册时间 | int(11) | |
regip | 注册IP | char(15) | |
lastlogintime | 上次登录时间 | int(11) | |
lastloginip | 上次登录ip | char(15) | |
logincount | 登陆次数 | mediumint(8) | |
point | 积分 | int(10) | |
balance | 余额 | decimal(10,2) | |
salt | 盐值 | char(6) | |
realname | 真名 | varchar(32) | |
nickname | 昵称 | varchar(32) |
w_role(角色表)
字段名 | 注释 | 备注 | 类型 |
---|---|---|---|
roleid | 角色ID | smallint(5) | |
status | 状态 | 0关闭,1启用 | tinyint(1) |
rolename | 角色名 | varchar(32) | |
permission | 权限 | text |
w_loginfailed(登陆失败锁定表)
字段名 | 注释 | 备注 | 类型 |
---|---|---|---|
ipusername | IP地址或者用户名 | char(15) | |
logintime | 登陆时间 | int(10) | |
count | 错误次数 | tinyint(1) |
框架所有表简单描述
w_actionlog // 用户操作日志表
w_adminlog // 管理员操作日志表
w_article // 文章表
w_article_attachment // 文章附件表
w_article_category // 文章分类表
w_article_content // 文章内容表
w_captcha // 验证码表
w_config // 配置表
w_loginfailed // 登陆失败锁定表
w_nav // 导航菜单表
w_role // 角色表
w_session // Session 表
w_singlepage // 单页表
w_singlepage_attachment // 单页附件表
w_singlepage_content // 单页内容表
w_upload // 上传表
w_user // 用户表
许可协议
MIT License
Copyright © 2013 - 2113 WeizePHP.
$(document).ready(function(e) {
// 返回按钮
$('#docs-back-btn').click(function() {
if( window.location.hash == '' ) {
return true;
} else {
window.history.back();
return false;
}
});
// 表格背景切换
$('.tb_lib tr').hover(
function(e) {
$(this).addClass("hover");
},
function(e) {
$(this).removeClass("hover");
}
);
});
一键复制
编辑
Web IDE
原始数据
按行查看
历史