KFC
原理: 引入模板引擎类,根据其语法规范,将网页制作成模板文件。

规范:
1. 一套模板风格以一个目录名放在View目录下;
2. 模板名称组成: 控制器名_功能名.html 例如user_closet.html

注意事项:
1.模板的开发规范根据不用模板引擎而不同。
2.KFC会将一些全局变量自动赋值到模板文件中以供使用,这些全局变量为:网站基本信息 $GLOBALS['gSiteInfo']和 语言包$GLOBALS['gLang']

范例:

使用phpTemplate引擎的模板:

header.html文件

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?=$webcharset?>" />
<title><?=$site_name?></title>
<link rel="stylesheet" href="<?=$image_site_url?>/css/personal.css" type="text/css" />
</head>


其他文件

<? include "header.html";?>

    <div class="menu">
      <ul>
        <li><a href="?action=defaults&view=defaults" id="menu1" class="menuvisited">显示资料</a></li>
        <li><a href="?action=defaults&view=editinfo" id="menu2">修改资料</a></li>
        <li><a href="?action=defaults&view=changepwd" id="menu3">修改密码</a></li>
      </ul>
    </div>
    
  </div>
  <div id="main">
    <? include "left.html";?>
    <div id="profileinfo">
      <ul>
        <li>用 户 名:<?=$loginuser['user_name']?></li>
        <li>昵  称:<?=$loginuser['user_nickname']?></li>
        <li>性  别:<? if($loginuser['user_gender']==0) echo "男生";if($loginuser['user_gender']==1) echo "女生";?></li>
        <li>地  区:<?=$loginuser['user_city']?></li>
        <li>保密邮箱:<?=$loginuser['user_email']?></li>
      </ul>
    </div>
  </div>
</div>
</div>
<!--end content -->
<? include "footer.html";?>



原理: 分析业务逻辑,抽象出接口,开发底层的业务类,提供给控制层使用。

规范:
1. 模型文件命名为 foo.class.php;
2. 类名跟文件名"."号的最前头一致, class foo{};

API:
resource parent::dbConnect(array $options);

注意事项:
由于数据库操作类有多种选择adodb,peardb,pdo,database,所以开发人员要熟悉这些类的使用方法。

类书写范例

<?php
/*
* 需要数据库操作的要 继承 Model
*  
*/
class UserWealthManage extends Model {
  // php5 的写法
  private  $mydb="";
  
  /**
  * 选择php5 构造函数
  *
  */
  function __construct(){
    $this->mydb = parent::dbConnect($GLOBALS['gDataBase1']);
  }
  /**
  * 或者php4 构造函数,这里只是为了说明KFC框架类库本身兼容php4,php5,
       * 但是应用项目最好采用php5的类规范来开发。
  *
  */
  function UserWealthManage(){
    $this->mydb = parent::dbConnect($GLOBALS['gDataBase1']);
  }
  /**
  * 获取用户
  *@params int $user_id
  *@return mixed
  */
  function GetUserWealth($user_id){
    $n=floor($user_id/100000);
    $table = "user_".($n+1)."0w";
    $query = "select * from $table where user_id=".$user_id;
    $user_wealth = $this->mydb->getAll($query);
    if($user_wealth!==false){
      return $user_wealth;
    }else{
      return false;
    }
    
  }
  /**
  * 解析字符串
  *@params string $str
  *@return array
  */
  function ParseItemStr($str){
    if(!empty($str)){
      if(substr($str,-1,1)==';') $str = substr($str,0,-1);
      $arrs = array();
      $array = array();
      $arrs = explode(";",$str);
      foreach ($arrs as $k=>$v){
        $array[$k] = explode(",",$v);      
      }
      unset($arrs);
      return $array;
    }
  }
  
       function __destruct(){
           unset($this->mydb);
      }
  
}



?>



轻量级数据库类database.class.php API

//初始化参数
class database($database_type,$host,$database,$user,$password,$port=false,$dsn=false);

//连接数据库
boolen connect(void);

//返回false 或者 连接资源
mixed query(string $sql_statement, array $array ='');

// 执行结果
boolen execute(string $sql_statement, array $array ='')

//返回根据从结果集取得的行生成的数组,如果没有更多行则返回 FALSE。
mixed fetchRow(resource $result)

//只返回一行
mixed getRow(resource $result);

// 取得结果集中行的数目
mixed countRows(resource result);

// 取得所有数据
array getAll(string $sql_statement, array $array ='');


<?php
// 应用举例
$db = new database($options['type'],$options['host'],$options['dbname'],$options['user'],
    $options['passwd'],$options['port']);

// 获取结果
$result = $db->query("select * from user where user_id=?", array($user_id));
while($row = $db->fetchRow($result)){
  $array[] = $row;
}

// 取得行数
$num = $db->countRow($result);

// 执行操作
$r = $db->execute("update user set user_name='ddd' where user_id='{$user_id}'");
if($r){
  return true;
else
   return false;

// 取得一行
$row = $db->getRow("select * from user where user_id=?", array($user_id));

// 取得所有
$array = $db->getAll("select * from user where 1");



?>
原理:利用面向对象的思维,将功能点定义为类的方法;将应用功能模块定义为一个类;

规范:
1. 控制器文件命名为 foo.class.php;
2. 类名跟文件名"."号的最前头一致,class foo{};
3. 类的方法命名采用"view_"或者"op_" 小写开头; 剩下功能描述部分(功能名)只能为大小写字母和数字组成,如view_home1 , op_saveForm
 *不带view_和op_ 开头的类方法不会做为应用项目系统的权限点;

API 接口:
// 权限验证
void   parent::authenticate();

// 引入业务模型
object $this->includeModel(string $model_name);

// 引入外部组件
object $this->addComponent($com_name);

// 赋值到模板,跟smarty一样
void   $this->assign('var',$value);

// 显示模板
void   $this->display($tpl_name);

// 显示提示信息
void   show_message(string $message);

// 返回
void   goback();

// 跳转到其他页面
void   Redirect(string $url,int $type);
 
 类书写范例

 <?php
 class foo extends Controller{
 
 /**
  * _constructor KFC自带的仿构造函数,会在类实例化时自动执行
  * @access public
  * @return void
  */
 function _constructor(){
      // 权限验证
      parent::authenticate();
 }
 /**
  * URL访问:?action=foo&view=home&var=1111
  * @access public
  * @return void
  */
     
 function view_home(){
       
    // 初始化外部变量
    $var = isset($_GET['var'])?$_GET['var']:'';
     
      // 引入业务模型
        $userManage = $this->includeModel("UserManage");
        $userinfo = $userManage->getUserInfo(22);


     // 引入外部组件
     $phpmailer = $this->addComponent('phpmailer');
 
       
   // 赋值到模板,跟smarty一样
     $this->assign("var",$var);
     // 显示模板
     $this->display("foo_home.html");
 }
 /**
  * 处理POST提交的操作:在form表单需要插入
  * <input type="hidden" name="action" value="foo">
  * <input type="hidden" name="op" value="saveForm">
  * @access public
  * @return void
  */
 function op_saveForm(){
    // $KFC_POST 获取了$_POST的所有数据;
    global $KFC_POST;

    print_r($KFC_POST);

    //....
    // 实际业务编程

   

    // 完成后需要跳转 几个内置函数可以参考使用

    // 显示提示信息
    show_message("操作成功!");
    // 返回
    goback();
    // 相当于 show_message_goback("操作成功!");

    //或者跳转到其他页面
    //类型1 使用php的header;类型2 使用js的location.href;类型3 使用setTimeout跳转;
    Redirect("http://www.google.cn",1);

 }

 function otherFunction(){
   
      // 编程

    return ;
 }

 }
 ?>
创建Hello World.
Posted in KFC » Documents on 2007/06/13 / 评论(0) »
在用KFC的自动安装程序启动了项目之后,在根目录下会出现应用项目名称,控制器目录Controllers下有一个默认文件defaults.class.php,里面有hello world举例存在。本文要描述的是如何手动启动KFC的应用项目。

第一步:在网站根目录下,首先将整个KFC框架拷贝过来,然后分别创建目录Controllers(控制器),Models(业务模型),Views(模板视图),tmp(缓存目录),Languages(语言包目录),public(公共目录),Plugins(外部插件目录)。
在public目录下再分别创建目录flashs,images,javascripts,stylesheets,htmls,这些目录将存放全站共享的静态文件。

第二步:创建配置文件config.ini.php,代码如下:

<?php
//Application

//use dev, online
define("APP_STATUS", 'dev');

// define application directory
define("APP_DIR", dirname(__file__));  

// define systems KFC directory, it can be relative
define('KFC_DIR', APP_DIR . "/KFC");

// define language
define("APP_LANG",'en');

// use database or not
define("USE_DATABASE",0);

// define session save handle (file, mysql, memcache)
define("SESSION_HANDLE",'file');

 
// turns off access to post variables through anything
define('HIDE_POST', 1);
// disallow spaces in url parameters, helps prevent sql injection.
define('STRIP_URL_VARS' ,1);

//Global-Site Settings
$GLOBALS['gSiteInfo']['site_name'] = 'KFC Demo';
$GLOBALS['gSiteInfo']['version'] = 'v1.0';
$GLOBALS['gSiteInfo']['site_url'] = 'http://localhost/';
$GLOBALS['gSiteInfo']['site_title'] = "KFC PHP Framework";
$GLOBALS['gSiteInfo']['webcharset'] = 'utf-8';
$GLOBALS['gSiteInfo']['pagenum'] = 15;


?>


第三步:创建一个入口文件index.php,代码如下:


<?php
include(dirname(__file__) . "/config.ini.php");
include(KFC_DIR . "/KFC.php");
$start_time = getmicrotime();

// new application
$kfc = &new KFC(APP_DIR,0);

// set defaults controller (option)
$kfc->setDefController('defaults');

// set default view style
$kfc->setDefView('defaults');


$kfc->run();

$end_time = getmicrotime();
echo "<center>执行时间: ".($end_time-$start_time)."</center>";
?>



第四步:在Controllers下面创建一个目录index(必须跟入口文件名称一致),然后在index目录下创建一个默认控制器文件defaults.class.php,代码如下:

<?php
class defaults extends Controller{
 
 function view_defaults(){
   
        //example use tpl
         $assign['homepage']['name'] = "Hello World!";
   
         $this->assign($assign);
         $this->display("index.html");
     
 }

}
?>



第五步:在Views目录下创建defaults目录,做为默认主题模板。然后在defaults目录下创建模板index.html
代码如下:


<html>
<base href="<?=$site_url?>">
<title><?=$site_title?></title>
<body>
<?=$homepage['name']?>
</body>
</html>


第六步:完成,在浏览器输入http://localhost/index.php
KFC v1.0.3发布
Posted in KFC » Downloads on 2007/04/26 / 锁定(0) »


KFC.v1.0.3.tar.gz,  size: 1.1M 包含KFC框架, admin示例, install安装目录, Docs文档, install.php安装程序等。
download :

changelog:
a.修补了权限系统保存角色权限的bug.
b.后台控制面板界面稍微调整,css完全兼容firefox和ie.
c.确定此版本应用为单数据库,单系统,多模块类型。
d.提供两种多服务器共享session方案,数据库存储和memcache存取。


示例demo: 后台管理
Posted in KFC » Demos on 2007/03/08 / 评论(0) »
 示例一:网站后台权限控制:

 http://www.kakapo.cn/demo/admin_demo/admin.php

  User: admin; Password: 123456;
分页: 1/3 第一页 1 2 3 下页 最后页 [ 显示模式: 摘要 | 列表 ]