保持谦卑之心
No design , No code

【ci框架】精通CodeIgniter框架

一、大纲

1、codeigniter框架的授课内容安排  
2、codeigniter框架的简介  
  
    |-----关于框架的概念  
    |-----使用CI框架的好处  
    |-----为什么选择CI框架  
      
  
3、codeigniter框架的具体安装步骤  
  
    |-----官网下载:http://www.codeigniter.com/  
    |-----httpd.conf配置文件中rewrite重写机制的开启  
    |-----httpd.conf配置文件虚拟主机的开启  
    |-----httpd-vhosts.conf配置文件中虚拟主机的配置  
    |-----hosts文件中添加DNS映射  
  
4、codeigniter框架的目录结构分析  
  
    |-----框架目录结构分析  
    |-----项目部署  
  
5、codeigniter框架中URL各部分的分析及简单的工作原理:http://域名/入口文件/模块名/控制器/方法/参数列表  
6、codeigniter框架详细执行流程分析:如果没有模块文件夹的话,则为:http://域名/入口文件/控制器/方法/参数列表  
7、codeigniter框架中config.php配置文件的分析  
8、codeigniter框架中使用rewrite重写机制隐藏index.php单一入口文件  
  
9、codeigniter框架中控制器  
  
    |-----控制器的创建位置  
    |-----控制器的命名规范  
    |-----控制器文件的分目录管理  
    |-----方法的命名规范:1、不能以list命名 2、方法名与类名不同名  
    |-----方法中如何获取GET方式提交过来的数据,如:$username = $this->input->get_post('username', true);//获取post或get方式提交过来的数据  
    |-----方法中如何获取POST方式提交过来的数据,如:$username = $this->input->post('username', true);$username = $this->input->get_post('username', true);  
      
10、codeigniter框架中视图  
  
    |-----视图的创建位置:appcation/views/ 目录下  
    |-----视图的命名规范:login.php   login.html  
    |-----如何在控制器中载入视图模板文件:$this->load->view("login"); $this->load->view("login.html");  
    |-----如何在控制器中给视图模板文件传递数据:$this->load->view("login.html",$data);//extract函数  
    |-----视图模板文件的分目录管理:$this->load->view("admin/category/addcategory.html");  
  
11、codeigniter框架中的模型  
  
    |-----模型的创建位置:application/models 目录下  
    |-----模型的命名规范:不区分大小写,建议首字母大写  
    |-----如何在控制器中载入模型(自动加载和手动加载):$this->load->model("user_model");  
    |-----模型文件的分目录管理:$this->load->model("admin/user_model");  
  
12、codeigniter框架中如何扩展控制器、模型  
  
    |-----基控制器的扩展:class Common extends CI_Controller{}  
    |-----基模型的扩展:class Model extends CI_Model{}  
  
13、codeigniter框架中数据库操作  
  
    |-----连接mysql数据库的配置:application/config/database.php  
    |-----如何在模型中连接mysql数据库(自动载入和手动载入):$this->load->database();  
    |-----使用普通查询操作完整数据的增删改查操作:1、$this->db->query($query);//结果集  
    |-----使用快捷操作类完成数据的增删改查操作:将sql语句的拼接放在成员方法中进行  
    |-----用户管理系统-管理员的查询  
    |-----用户管理系统-管理员的添加  
    |-----用户管理系统-管理员的修改  
    |-----用户管理系统-管理员的删除  
  
14、codeigniter框架中辅助函数  
  
    |-----辅助函数的位置:application/helpers 目录 或 system/helpers 目录  
    |-----如何在控制器中载入辅助函数:$this->load->helper("url");//载入url_helper.php文件  
    |-----自定义辅助函数  
    |-----辅助函数的扩展  
    |-----辅助函数的载入机制:首先考虑载入application/helpers 目录下的文件,再考虑载入system/helpers 目录下的文件  
    |-----用户管理系统-页面的跳转:header("location:".site_url("admin/login/"));//创建一个url,并跳转  
  
15、codeigniter框架中的配置文件  
      
    |-----配置文件的位置:application/config/ 目录下  
    |-----如何在CI项目的控制器中载入配置文件(手动载入和自动载入):$this->config->load("pagination");  
    |-----如何自定义配置文件:application/config/pagination.php    配置项变量名必须是 $config['配置项']  
    |-----配置文件中配置项的命名规范:$config['配置项']  
    |-----如何动态给配置项设置值:$this->config->set_item("配置项","配置项值");  
    |-----如何将分页配置写到配置文件中  
    |-----如何将配置文件合并:$this->config->load("pagination",true);//参数2:true  
  
16、codeigniter框架中的通用类库  
  
    |-----通用类库的位置:application/libraries/ 目录 system/libraries/ 目录  
    |-----如何在ci项目的控制器中载入通用类库:$this->load->library("upload");//文件上传类库的载入  
    |-----通用类库的载入机制:优先考虑载入application/libraries/ 目录下类库,其次考虑载入 system/libraries 目录下类库  
    |-----分页类库的载入(定制分页风格):$this->load->library("pagination");  
    |-----用户管理系统-管理员列表页分页功能的完成  
  
17、codeigniter框架与smarty模板引擎的无缝整合  
  
    |-----如何将第三方类库:smarty模板引擎整合到CI项目中来        
  
    |-----如何在控制器中载入smarty模板引擎:$this->load->library("tp");  
  
18、codeigniter框架中完成用户登录系统  
  
    |-----用户登录系统-session类库的使用  
    |-----用户登录系统-cookie类库的使用  
    |-----用户登录系统-使用captache辅助函数完成图像验证码的创建  
    |-----用户登录系统-验证码原理  
    |-----用户登录系统-session登录  
    |-----用户登录系统-cookie登录  
    |-----用户登录系统-增加公共操作控制器(扩展系统核心控制器类文件)  
    |-----用户登录系统-cookie的三种使用方式  
        |-----php原生态语法结构中设置cookie的函数  
        |-----ci框架的cookie辅助函数  
        |-----input类库  
  
19、codeigniter框架与ueditor编辑器的无缝整合  
  
    |-----整合步骤  
  
20、codeigniter框架与fckeditor编辑器的无缝整合  
  
    |-----整合步骤  
  
21、codeigniter框架中完成无限级分类下拉菜单  
      
    |-----无线递归方式完成(比较复杂一点,效率低,不推荐使用)  
    |-----path方式完成(最为简便的方式,几行代码就可搞定)  
  
22、codeigniter框架中使用jquery完成省市区三级联动功能  
  
23、codeigniter框架中完成商品分类管理模块  
  
    |-----商品分类管理模块-添加商品分类  
    |-----商品分类管理模块-添加商品子分类  
    |-----商品分类管理模块-修改商品分类  
    |-----商品分类管理模块-商品分类列表  
    |-----商品分类管理模块-商品分类的删除  
    |-----商品分类管理模块-商品分类排序  
    |-----文件上传类库的使用  
    |-----图像处理类库的使用  
    |-----商品分类管理模块-添加分类banner  
    |-----如何将文件上传和图像处理的有关配置放到配置文件中  
    |-----商品分类管理模块-分类banner列表  
    |-----商品分类管理模块-编辑分类banner  
    |-----商品分类管理模块-banner的启用和禁用  
    |-----商品分类管理模块-分类banner排序  
  
24、codeigniter框架完成一个权限管理系统  
  
    |-----权限管理系统-数据表的创建  
    |-----权限管理系统-业务分析  
    |-----权限管理系统-操作权限管理  
    |-----权限管理系统-添加操作权限  
    |-----权限管理系统-修改操作权限  
    |-----权限管理系统-删除操作权限  
  
    |-----权限管理系统-模块管理  
    |-----权限管理系统-添加模块  
    |-----权限管理系统-修改模块  
    |-----权限管理系统-删除模块  
  
    |-----权限管理系统-角色管理  
    |-----权限管理系统-添加角色并为角色设置权限  
    |-----权限管理系统-为当前角色添加操作权限  
    |-----权限管理系统-为当前角色删除操作权限  
    |-----权限管理系统-修改角色  
    |-----权限管理系统-删除角色  
  
    |-----权限管理系统-添加管理员的同时为管理员设置多个角色  
    |-----权限管理系统-添加管理员角色  
    |-----权限管理系统-修改管理员角色  
    |-----权限管理系统-删除管理员角色  
    |-----权限管理系统-当前管理员角色列表  
      
25、显示最后一条查询的sql语句:主要用于在连贯操作时,检测拼接的sql语句是否正确   
      
    echo $this->db->last_query();//如:select * from pt_users where uid>10 order by datetime desc limit 0,10

 

请问
26、CI_DB_pdo_driver PDO数据库驱动类  
  
    $this->db->affected_rows();//影响记录数,区分:$this->db->get("order_master")->num_rows();//获取到的结果集行数  
  
    $this->db->count_all("order_master");//对于某个表不带条件的查询  
  
    $this->db->count_all_results();//快捷操作类方法,适用于带条件的查询  
  
    $this->db->insert_id();//新插入记录的id  
  
    $this->db->trans_enabled = true;//开启事务(默认是false,所以在使用事务前必须将其赋值为true)  
  
    $this->db->trans_begin();//开始事务  
  
    $this->db->trans_rollback();//事务回滚  
  
    $this->db->trans_commit();//提交事务  
  
    $this->db->trans_status();//事务状态 true 或 false         CI_DB_driver驱动类中的方法
27、CI_DB_mysql_driver  mysql数据库驱动类  
  
    $this->db->affected_rows();//影响记录数,区分:$this->db->get("order_master")->num_rows();//获取到的结果集行数  
  
    $this->db->count_all("order_master");//对于某个表不带条件的查询  
  
    $this->db->count_all_results();//快捷操作类方法,适用于带条件的查询  
  
    $this->db->insert_id();//新插入记录的id  
  
    $this->db->trans_enabled = true;//开启事务(默认是false,所以在使用事务前必须将其赋值为true)  
  
    $this->db->trans_begin();//开始事务  
  
    $this->db->trans_rollback();//事务回滚  
  
    $this->db->trans_commit();//提交事务  
  
    $this->db->trans_status();//事务状态 true 或 false         CI_DB_driver驱动类中的方法
28、CI_DB_mysqli_driver  mysqli数据库驱动类  
  
    $this->db->affected_rows();//影响记录数,区分:$this->db->get("order_master")->num_rows();//获取到的结果集行数  
  
    $this->db->count_all("order_master");//对于某个表不带条件的查询  
  
    $this->db->count_all_results();//快捷操作类方法,适用于带条件的查询  
  
    $this->db->insert_id();//新插入记录的id  
  
    $this->db->trans_enabled = true;//开启事务(默认是false,所以在使用事务前必须将其赋值为true)  
  
    $this->db->trans_begin();//开始事务  
  
    $this->db->trans_rollback();//事务回滚  
  
    $this->db->trans_commit();//提交事务  
  
    $this->db->trans_status();//事务状态 true 或 false         CI_DB_driver驱动类中的方法
29、model模型类中引用其它model模型类(如:category_model)和数据库(如:product)  
  
    public function __construct() {  
        parent::__construct();  
        $this->product_db = $this->load->database('product', true);//通过model基类中的__get()方法选择性的引入CI超级对象中已加载类库,如:"load"  
        $this->load->model('category_model');  
    }
30、控制器中引用其它模型类(如:category_model)和数据库(如:product)  
  
    public function __construct() {  
        parent::__construct();  
        $this->product_db = $this->load->database('product', true);  
        $this->load->model('category_model');  
    }
31、helper函数中引用CI超级对象的方法  
  
    function get_order_status_by_order($order_status){  
  
        $CI =& get_instance();//获取CI超级对象  
  
        $CI->load->Model('order_model');//通过CI超级对象可以载入任何模型  
  
    }
32、缓存驱动的加载方式  
  
    $this->load->driver('cache', array('adapter' => 'memcached'));//加载缓存驱动或缓存适配器,当前为memcached缓存;注意:CI框架只支持memcached,不支持memcache,windows操作系统下只有memcache扩展  
  
    $this->load->driver('cache', array('adapter' => 'file'));//加载缓存驱动或缓存适配器,当前为file缓存  
  
    $this->load->driver('cache', array('adapter' => 'redis'));//加载缓存驱动或缓存适配器,当前为redis缓存  
  
    $this->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file'));//优先选择apc缓存,file文件缓存作为替代方案;如果服务器不支持apc缓存时,选择file文件缓存
33、静态html模板文件中如何动态加载区域块内容  
  
    //index.html文件  
    <div include="/index.php/pub/common_nav" rel="include"></div>  
  
    //jquery代码  
    $(document).ready(function () {  
        $('[rel=\'include\']').each(function (e) {  
        var t = $(this),  
        url = t.attr('include') + location.search;  
        url && $.get(url, function (data) {//url:'/index.php/pub/common_nav'  
            t.html(data);  
        })  
        })  
    })
34、拼接insert sql语句  
    /** 
     *一维关联数组,拼接sql语句 
     *$data['username']="admin"; 
     *$data['password']="12345"; 
     *$data['sex']=""; 
     */  
    function add_user( $data ) {  
            if ( empty($data) || !is_array($data) ) {  
                return false;  
            }  
            foreach ($data as $key => $value) {  
                if ( $value === '') {  
                    unset($data[$key]);//删除数组中值为空的元素  
                }  
            }  
            $cols = array_keys($data);//获取数组所有的键名  
            $values = array_values($data);//获取数组所有的值  
            $cols_str = implode(",", $cols);//将数组所有的键名拼接成一个字符串  
            $values_str = "'".implode("','", $values)."'";//将数组所有的键值放到单引号中  
            //拼接sql:INSERT INTO user (username,password) VALUES ('admin','12345');  
            $sql = "INSERT INTO user ({$cols_str}) VALUES ({$values_str})";//拼接sql  
            $this->db->query($sql);  
    }
35、拼接insert sql语句  
    /** 
     *一维关联数组,拼接sql语句 
     *$data['username']="admin"; 
     *$data['password']="12345"; 
     *$data['sex']=""; 
     */  
    function add_user( $data ) {  
            if ( empty($data) || !is_array($data) ) {  
                return false;  
            }  
            foreach ($data as $key => $value) {  
                if ( $value === '') {  
                    unset($data[$key]);//删除数组中值为空的元素  
                }  
            }  
            $cols = array_keys($data);//获取数组所有的键名  
            $values = array_values($data);//获取数组所有的值  
            foreach($values as $k=>$val){  
                $values[$k]="'".$val."'";//将所有的键值放到单引号中  
            }  
            $cols_str = implode(",", $cols);//将数组所有的键名拼接成一个字符串  
            $values_str = implode(",", $values);//将数组所有的键值拼接成一个字符串  
            //拼接sql:INSERT INTO user (username,password) VALUES ('admin','12345');  
            $sql = "INSERT INTO user ({$cols_str}) VALUES ({$values_str})";//拼接sql  
            $this->db->query($sql);  
    }
36、拼接update sql语句  
    /** 
     * 编辑用户信息 
     * $userid=1; 
     * $data['username']='admin'; 
     * $data['password']='123'; 
     */  
    function edit_user(userid, $data) {  
        if ( empty($data) || !is_array($data) ) {  
            return;  
        }  
        foreach ($data as $key => $value) {  
            $str .= isset($str)?", {$key} = '{$value}'":"{$key} = '{$value}'";  
        }  
        //拼接sql:UPDATE user SET username='admin',password='123' WHERE addr_id = '1';  
        $sql = "UPDATE user SET {$str} WHERE addr_id = '{$addr_id}'";  
        $this->db->query($sql);  
    }
37、数据库快捷操作类常用方法  
    /** 
     * 查询订单 
     * 
     * @param $query 
    */  
    public function get_order_list($query, $offset = 0, $limit = 20) {  
        if (is_array($query) && !empty($query)) {  
            foreach ($query as $key => $val) {  
                if (is_array($val)) {  
                    $this->order_db->where_in($key, $val);  
                } else {  
                    $this->order_db->where($key, $val);  
                }  
            }  
        }  
        $this->order_db->order_by('updatetime', 'desc');  
        $this->order_db->order_by('id', 'desc');  
        if (!$limit) {  
            $query = $this->order_db->get('order');  
        } else {  
            $query = $this->order_db->get('order', $limit, $offset);  
        }  
          
        if ($query->num_rows() > 0) {  
  
            return $query->result_array();  
        }  
  
        return array();  
    }
38、拼接select sql语句  
    function get_user_list($cols=array("username","password")) {  
        $col=implode(",",$cols);//查询的列属性  
        $sql = "SELECT $col FROM user ORDER BY addr_id DESC";  
        $this->db->query($sql)->result_array();  
    }
39、CI框架中cookie的三种使用方式  
  
    //第一种设置cookie的方式:采用php原生态的方法设置的cookie的值  
    setcookie("user_id",$user_info['user_id'],86500);  
    setcookie("username",$user_info['username'],86500);  
    setcookie("password",$user_info['password'],86500);  
    //echo $_COOKIE['username'];  
  
    //第二种设置cookie的方式:通过CI框架的input类库设置cookie的值  
    $this->input->set_cookie("username",$user_info['username'],60);  
    $this->input->set_cookie("password",$user_info['password'],60);  
    $this->input->set_cookie("user_id",$user_info['user_id'],60);  
    //echo $this->input->cookie("password");//适用于控制器  
    //echo $this->input->cookie("username");//适用于控制器  
    //echo $_COOKIE['username'];//在模型类中可以通过这种方式获取cookie值  
    //echo $_COOKIE['password'];//在模型类中可以通过这种方式获取cookie值  
  
    //第三种设置cookie的方式:通过CI框架的cookie_helper.php辅助函数库设置cookie的值  
    set_cookie("username",$user_info['username'],60);  
    set_cookie("password",$user_info['password'],60);  
    set_cookie("user_id",$user_info['user_id'],60);  
    //echo get_cookie("username");
40、array_merge()合并数组函数的使用  
    <?php  
    header("content-type:text/html;charset='utf-8'");  
    $arr1=array(  
          
        "13012"=>array(  
            "brand_id"=>2,  
            "category_id"=>3  
        )  
  
    );  
  
    $arr2=array(  
          
        "13012"=>array(  
            "goods_id"=>3576,  
            "goods_name"=>"sanyang"  
        )  
  
    );  
    /** 
     *echo "<pre>";print_r(array_merge($arr1,$arr2)); 
     *结果: 
     *Array 
     *  ( 
     *      [0] => Array //索引重置为数字索引 
     *          ( 
     *              [brand_id] => 2 
     *              [category_id] => 3 
     *          ) 
     *      [1] => Array 
     *          ( 
     *              [goods_id] => 3576 
     *              [goods_name] => sanyang 
     *          ) 
     *  ) 
     */  
  
     /** 
     *echo "<pre>";print_r(array_merge($arr1['13012'],$arr2['13012'])); 
     *结果: 
     *  Array 
     *  ( 
     *      [brand_id] => 2 
     *      [category_id] => 3 
     *      [goods_id] => 3576 
     *      [goods_name] => sanyang 
     *  )    
     */  
  
    ?>
41.json格式数据:  
       public function json(){  
           $data[0]['goods_id']=3567;  
           $data[0]['goods_name']="sanyang";  
           $data[1]['goods_id']=3567;  
           $data[1]['goods_name']="sanyang";  
           echo json_encode($data);exit;  
           /** 
            * 结果: 
            * [ 
            *    { 
            *        "goods_id": 3567, 
            *        "goods_name": "sanyang" 
            *    }, 
            *    { 
            *        "goods_id": 3567, 
            *        "goods_name": "sanyang" 
            *    } 
            *] 
            */  
       }  
42.联合查询 left join  
//controller控制器  
$query = array(  
        'product_id' => $product_id,  
        'activity.status' => array(1, 2, 0),  
        'activity.is_del' => 0  
);  
$query['activity.activity_id<>'] = $activity_id;  
  
$goods_list = $this->activity_model->get_activity_good_mapping($query, 0, 0);  
  
//model模型  
public function get_activity_good_mapping($query,$offset = 0, $limit = 0,$get=''){  
        $this->db = $this->activity_db;  
        if (is_array($query) && !empty($query)) {  
            foreach ($query as $key => $val) {  
                if (is_array($val)) {  
                    $this->db->where_in($key, $val);  
                } else {  
                    $this->db->where($key, $val);  
                }  
            }  
        }  
          
        $this->db->from('activity_goods');  
        $this->db->join('activity', 'activity_goods.activity_id = activity.activity_id','left');  
          
        if (!$limit) {  
              
        } else {  
            $query = $this->db->limit($limit, $offset);  
        }  
        $query = $this->db->get();  
        if ($query->num_rows() > 0) {  
              
            return $query->result_array();  
        }  
  
        return array();  
}
43.ci框架如何记录sql日志?  
  
(1)配置日志目录: 在"application/config/config.php" 文件中配置日志目录  
   $config['log_path']="/opt/www/logs/";  
(2)在 "system/database/DB_driver.php" 文件的query()方法末尾添加如下语句:  
   log_message( 'db','【sql语句:'.$this->last_query().'】');//这样所有执行过的sql语句都会按日期时间格式记录到 "/opt/www/logs/" 目录下  
   return $RES;

 

赞(0) 打赏
未经允许不得转载:吴庆宝的个人blog » 【ci框架】精通CodeIgniter框架

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

吴庆宝的技术博客

技术博客github

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏