bigdos 发表于 2011-6-23 14:24:49

Wrox.Professional CodeIgniter2008.BBL学习笔记

本帖最后由 bigdos 于 2011-6-23 21:18 编辑

一共看了没有几本关于CI的书,这是第三本,第一本《PHP 敏捷开发框架 CodeIgniter》,当时刚开始接触CI,没有感觉——无从下手。后来看了IBM网站上的一篇实例文章“使用Codeigniter开发动态网站”,有点感觉。又看《Packtpub CodeIgniter 1.7 professional development》,这本用的是1.7版本,碰到许多版本结构问题,没办法回头看手册!这本书也是老版本1.6的,很多地方需要改啦。记录一下学习过程中的问题,如有疏漏请大家指正。预备:我配置了XPsp3 /IIS5 / MSSqlServer2000+sp4 / php5.3.6 / fastcgi1.5 / 微软出的php mssql 驱动 SQLSRV20 / url_modrewrite .如果不明白请参考 相关网文配置。
1、建筑的骨架 model,controller,view
1)首先创建数据表 categories
(mysql)
CREATE TABLE `categories` (
`id` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`shortdesc` varchar(255) NOT NULL,
`longdesc` text NOT NULL,
`status` enum('active','inactive') NOT NULL,
`parentid` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


(mssql)
CREATE TABLE . (
       IDENTITY (1, 1) NOT NULL ,
       (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,
       (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,
       COLLATE Chinese_PRC_CI_AS NOT NULL ,
       NOT NULL ,
       NOT NULL
) ON TEXTIMAGE_ON
GO

然后Products 表
(mysql)
CREATE TABLE `products` (
`id` INT NOT NULL AUTO_INCREMENT ,
`name` VARCHAR( 255 ) NOT NULL ,
`shortdesc` VARCHAR( 255 ) NOT NULL ,
`longdesc` TEXT NOT NULL ,
`thumbnail` VARCHAR( 255 ) NOT NULL ,
`image` VARCHAR( 255 ) NOT NULL ,
`sizes` ENUM('s','m', 'l', 'xl' ) NOT NULL ,
`colors` ENUM( 'red', 'blue', 'green', 'brown', 'white', 'black' ) NOT NULL ,
`grouping` VARCHAR( 16 ) NOT NULL ,
`status` ENUM( 'active', 'inactive' ) NOT NULL ,
`category_id` INT NOT NULL ,
`featured` ENUM ('true', 'false') NOT NULL,
`price` FLOAT( 4, 2 ) NOT NULL,
PRIMARY KEY ( `id` )
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

(mssql)
CREATE TABLE . (
       IDENTITY (1, 1) NOT NULL ,
       (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,
       (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,
       COLLATE Chinese_PRC_CI_AS NOT NULL ,
       (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,
       (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,
       (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
       (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
       (16) COLLATE Chinese_PRC_CI_AS NOT NULL ,
       (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
       NOT NULL ,
       NULL ,
       (18, 2) NULL
) ON TEXTIMAGE_ON
GO

注意:由于mssql和mysql的差异,Enum类型在mssql中根据情况作了转换,有的可以用bit替代,有的只能在编程中解决啦。
OK,数据库准备妥当,下面就是先各个建立Model文件,构造出整个应用的"骨骼"。"骨骼"在这里意味着每个文件添加两个函数,一个用来选择某个product/category的详细信息,另外一个则用来显示对应表的全部信息列表。

bigdos 发表于 2011-6-23 15:49:01

本帖最后由 bigdos 于 2011-6-23 21:30 编辑

第二弹 开工Model
1,Category Model
首先命名文件,你可以随意命名,但不能与controller或别的model名字冲突。本书中约定,使用M作为模型名前标,故创建 MCats.php 在 models文件夹里。
内容,原文
class MCats extends Model{      //1.7后更改为CI_Model,所有模型都继承自CI_Model
function MCats(){
    parent::Model();        // 这里是php4版本的构造函数,应该是1.7后都变了
}
}现在应该为
class MCats extends CI_Model {
    function __construct()
    {
      parent::__construct();
    }
}
添加代码
function getCategory($id){
    $data = array();
    $options = array('id' =>$id);
    $Q = $this->db->getwhere(‘categories’,$options,1);
    if ($Q->num_rows()>0){
      $data = $Q-> row_array();
    }            
    $Q-> free_result();
    return $data;
}
最终全部代码:<?php
class MCats extends CI_Model {
    function __construct()
    {
      parent::__construct();
    }
    function getCategory($id){
      $data = array();
      $options = array('id' =>$id);
      $Qry = $this->db->getwhere(‘categories’,$options,1);
      if ($Qry->num_rows()>0){
          $data = $Qry-> row_array();
      }            
      $Qry-> free_result();
      return $data;
    }
}
?>
再看 products 模型 mproducts.php
<?php
class MProducts extends CI_Model{
function __construct(){
    parent::__construct();
}
function getProduct($id){
    $data = array();
    $options = array('id'=> $id);
    $Qry = $this-> db-> getwhere(products,$opti
    if ($Qry->num_rows()>0){
      $data = $Qry-> row_array();
    }
    $Qry-> free_result();
    return $data;
}

function getAllProducts(){
    $data = array();
    $Qry = $this-> db-> get('products');
    if ($Qry->num_rows()>0){
      foreach ($Qry-> result_array() as $row){
      $data[] = $row;
                }
    }
    $Qry-> free_result();
    return $data;
}
}
?>

下面看 控制器 welcome.php//位于controllers文件夹下。注意在config中的config.php其中的$config['index_page']='welcome.php';所以创建welcome控制器;



Hex 发表于 2011-6-23 16:27:52

加分,感谢楼主的分享。
页: [1]
查看完整版本: Wrox.Professional CodeIgniter2008.BBL学习笔记