用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3796|回复: 2
收起左侧

Wrox.Professional CodeIgniter2008.BBL学习笔记

[复制链接]
发表于 2011-6-23 14:24:49 | 显示全部楼层 |阅读模式
本帖最后由 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 [dbo].[categories] (
        [id] [int] IDENTITY (1, 1) NOT NULL ,
        [name] [varchar] (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,
        [shrtdesc] [varchar] (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,
        [logdesc] [text] COLLATE Chinese_PRC_CI_AS NOT NULL ,
        [status] [bit] NOT NULL ,
        [parentid] [int] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
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 [dbo].[products] (
        [id] [int] IDENTITY (1, 1) NOT NULL ,
        [name] [varchar] (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,
        [shortdesc] [varchar] (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,
        [longdesc] [text] COLLATE Chinese_PRC_CI_AS NOT NULL ,
        [thumbnail] [varchar] (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,
        [image] [varchar] (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,
        [sizes] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
        [colors] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
        [grouping] [varchar] (16) COLLATE Chinese_PRC_CI_AS NOT NULL ,
        [status] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
        [category_id] [int] NOT NULL ,
        [featured] [bit] NULL ,
        [price] [decimal](18, 2) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

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

评分

参与人数 1威望 +5 收起 理由
Hex + 5 很给力!

查看全部评分

 楼主| 发表于 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控制器;



发表于 2011-6-23 16:27:52 | 显示全部楼层
加分,感谢楼主的分享。

本版积分规则