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 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控制器;
加分,感谢楼主的分享。
页:
[1]