PHP仿博客园个人博客数据库与界面设计(2)_PHP教程
推荐:PHP session_start()问题解疑(详细介绍)本文,将这些问题,做一个简单的汇总,以便大家查阅。 1. 错误提示 Warning: Cannot send session cookie - headers already sent Warning: Cannot send session cache limiter - headers already sent 分析及解决办法 这 一类问题,的原因是你在程序中使用PHP session
这个设计模式是从一个老外那里学的!
原理就是:
首先我们加载我们的config.php, 初始化session变量,获得 $action 这个重要变量的值;
然后我们判断 $action 和 $username 的值, 如果用户没有登录以及用户名为空,返回登录页面;
如 果用户正确输入了用户名和密码,则注册一个session 变量 $username,然后跳转到主页面 index.php, 这时我们会调用默认的 $action admin( ), 这个函数会加载一个模版admin.php;里面有个数组变量 $results['pageTitle'],以及我们的后台博客样式框架。
如果用户输入错了,则给出提示信息。
这个设计理念的核心就是, give {action} then {do something}
我们会在后面的代码中反复看到。
这个就是博客后台的框架样式,从博客园copy 来的,采用表格布局的,兼容的,可自定义其他样式的,简单的,实用的,可扩展的,完美后台框架。
这个样式在其他的浏览器中表现同样兼容,写这篇博文的时候,我已完成了部分功能。 下一篇:实现随笔,文章,日记 以及他们分类的CRUD。废话不多说了,上一篇有个核心概念就是 give action do something !
这篇我就用代码来解释这个概念是啥意思,先看我的 post.class.php . 这个文件是我们的数据层处理类。
简单介绍一下这个model 类,它继承了一个数据库基类来做crud 等常用操作, 每次初始化时就会初始化一个数据库对象 $db. 我们就用这个对象来操作我们的数据。
对于数据操作有2个重要方法 storePostFormValues( ) , storeDiaryFormValues( ),它们2个方法是数据流的开始。
还 有2个方法很有意思,addChildNumber( ), reduceChildNumber( ), 它们负责在插入或删除文档时的 一个暗箱操作。因为我的文档可以用多个分类,所以在操作文档的时候,要考虑到一个问题,就是 category 表中有个字段 记录了该分类下的 文档数量。所以要动态地改变这些数目的值。
下面配合 post.php 控制器,我们就可以开始我们数据的流程了(我的控制器还不是一个类,所以无法生成API文档。因为这还不是真正地MVC架构。)所以在MVC之前,这个也能更利于的理解MVC到底是神马东东,以及你自己如何去应用,写出自己的MVC。
以下的情形都是假设:
$action = "天上掉下个女朋友给我吧!"; 让我们传入这个控制器看会发生神马事情。
复制代码 代码如下:require_once( "config/config.php" );
session_start( );
$action = isset( $_GET['action'] ) ? $_GET['action'] : "";
$username = isset( $_SESSION['username'] ) ? $_SESSION['username'] : "";
if( !$username )
{
header("Location: index.php?action=login");
exit;
}
这里我们有个重要流程控制语句 switch , 这个单词是 开关的意思; 所以当上面那个 $action = "天上掉下个女朋友给我吧!"; 传入 switch 时,只有2种可能,一种是开,一种是关。这里有点双关地意思,有些同学可能看出来了。嘿嘿!
言归正传:看看我们的 switch 是如何开关这些 $action , 很明显 天上不会掉个女朋友给我,因为控制器里没有这个开关,所以只能还是说说代码的事。
复制代码 代码如下:switch( $action )
{
case "newPost" :
newPost( );
break;
case "delete" :
delete( ) ;
break;
case "updatePost":
updatePost( );
break;
case "IsDraft":
listDraft( );
break;
case "logout" :
logout( );
break;
case "isPost":
listPost( );
break;
case "diffentCategoryPost":
diffentCategoryPost( );
break;
case "unCategory":
unCategory( );
break;
default :
listPost( );
break;
}
分享:浅析PHP的ASCII码转换类本篇文章是对PHP的ASCII码转换类进行了详细的分析介绍,需要的朋友参考下 复制代码 代码如下: class ascii { function decode($str) { preg_match_all( /(d{2,5})/, $str,$a); $a = $a[0]; foreach ($a as $dec) { if ($dec 128) { $utf .= chr($dec); } else if ($dec
- 相关链接:
- 教程说明:
PHP教程-PHP仿博客园个人博客数据库与界面设计(2)。