http://blog.csdn.net/yanhui_wei/article/details/25803945
一、大綱
?
?
[php] ?view plaincopy
1、codeigniter框架的授課內容安排?? 2、codeigniter框架的簡介?? ?? ????|-----關于框架的概念?? ????|-----使用CI框架的好處?? ????|-----為什么選擇CI框架?? ?????? ?? 3、codeigniter框架的具體安裝步驟?? ?? ????|-----官網下載:http: ????|-----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方式提交過來的數據,如:$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); ????|-----視圖模板文件的分目錄管理:$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"); ????|-----自定義輔助函數?? ????|-----輔助函數的擴展?? ????|-----輔助函數的載入機制:首先考慮載入application/helpers?目錄下的文件,再考慮載入system/helpers?目錄下的文件?? ????|-----用戶管理系統-頁面的跳轉:header("location:".site_url("admin/login/")); ?? 15、codeigniter框架中的配置文件?? ?????? ????|-----配置文件的位置:application/config/?目錄下?? ????|-----如何在CI項目的控制器中載入配置文件(手動載入和自動載入):$this->config->load("pagination");?? ????|-----如何自定義配置文件:application/config/pagination.php????配置項變量名必須是?$config['配置項']?? ????|-----配置文件中配置項的命名規范:$config['配置項']?? ????|-----如何動態給配置項設置值:$this->config->set_item("配置項","配置項值");?? ????|-----如何將分頁配置寫到配置文件中?? ????|-----如何將配置文件合并:$this->config->load("pagination",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(); ?
[php] ?view plaincopy
26、CI_DB_pdo_driver?PDO數據庫驅動類?? ?? ????$this->db->affected_rows(); ?? ????$this->db->count_all("order_master"); ?? ????$this->db->count_all_results(); ?? ????$this->db->insert_id(); ?? ????$this->db->trans_enabled?=?true; ?? ????$this->db->trans_begin(); ?? ????$this->db->trans_rollback(); ?? ????$this->db->trans_commit(); ?? ????$this->db->trans_status(); [php] ?view plaincopy
27、CI_DB_mysql_driver??mysql數據庫驅動類?? ?? ????$this->db->affected_rows(); ?? ????$this->db->count_all("order_master"); ?? ????$this->db->count_all_results(); ?? ????$this->db->insert_id(); ?? ????$this->db->trans_enabled?=?true; ?? ????$this->db->trans_begin(); ?? ????$this->db->trans_rollback(); ?? ????$this->db->trans_commit(); ?? ????$this->db->trans_status(); [php] ?view plaincopy
28、CI_DB_mysqli_driver??mysqli數據庫驅動類?? ?? ????$this->db->affected_rows(); ?? ????$this->db->count_all("order_master"); ?? ????$this->db->count_all_results(); ?? ????$this->db->insert_id(); ?? ????$this->db->trans_enabled?=?true; ?? ????$this->db->trans_begin(); ?? ????$this->db->trans_rollback(); ?? ????$this->db->trans_commit(); ?? ????$this->db->trans_status(); ?
[php] ?view plaincopy
29、model模型類中引用其它model模型類(如:category_model)和數據庫(如:product)?? ?? ????public?function?__construct()?{?? ????????parent::__construct();?? ????????$this->product_db?=?$this->load->database('product',?true); ????????$this->load->model('category_model');?? ????}?? [php] ?view plaincopy
30、控制器中引用其它模型類(如:category_model)和數據庫(如:product)?? ?? ????public?function?__construct()?{?? ????????parent::__construct();?? ????????$this->product_db?=?$this->load->database('product',?true);?? ????????$this->load->model('category_model');?? ????}?? [php] ?view plaincopy
31、helper函數中引用CI超級對象的方法?? ?? ????function?get_order_status_by_order($order_status){?? ?? ????????$CI?=&?get_instance(); ?? ????????$CI->load->Model('order_model'); ?? ????}?? [php] ?view plaincopy
32、緩存驅動的加載方式?? ?? ????$this->load->driver('cache',?array('adapter'?=>?'memcached')); ?? ????$this->load->driver('cache',?array('adapter'?=>?'file')); ?? ????$this->load->driver('cache',?array('adapter'?=>?'redis')); ?? ????$this->load->driver('cache',?array('adapter'?=>?'apc',?'backup'?=>?'file')); [php] ?view plaincopy
33、靜態html模板文件中如何動態加載區域塊內容?? ?? ???? ????<div?include="/index.php/pub/common_nav"?rel="include"></div>?? ?? ???? ????$(document).ready(function?()?{?? ????????$('[rel=\'include\']').each(function?(e)?{?? ????????var?t?=?$(this),?? ????????url?=?t.attr('include')?+?location.search;?? ????????url?&&?$.get(url,?function?(data)?{ ????????????t.html(data);?? ????????})?? ????????})?? ????})?? [php] ?view plaincopy
34、拼接insert?sql語句?? ???? ????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?({$cols_str})?VALUES?({$values_str})"; ????????????$this->db->query($sql);?? ????}?? [php] ?view plaincopy
35、拼接insert?sql語句?? ???? ????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?({$cols_str})?VALUES?({$values_str})"; ????????????$this->db->query($sql);?? ????}?? [php] ?view plaincopy
36、拼接update?sql語句?? ???? ????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?{$str}?WHERE?addr_id?=?'{$addr_id}'";?? ????????$this->db->query($sql);?? ????}?? [php] ?view plaincopy
37、數據庫快捷操作類常用方法?? ???? ????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();?? ????}?? [php] ?view plaincopy
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();?? ????}?? [php] ?view plaincopy
39、CI框架中cookie的三種使用方式?? ?? ???? ????setcookie("user_id",$user_info['user_id'],86500);?? ????setcookie("username",$user_info['username'],86500);?? ????setcookie("password",$user_info['password'],86500);?? ???? ?? ???? ????$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);?? ???? ???? ???? ???? ?? ???? ????set_cookie("username",$user_info['username'],60);?? ????set_cookie("password",$user_info['password'],60);?? ????set_cookie("user_id",$user_info['user_id'],60);?? ???? [php] ?view plaincopy
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"?? ????????)?? ?? ????);?? ???? ?? ????? ?? ?????>?? ?
[php] ?view plaincopy
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;?? ??????????? ???????}?? ?
[php] ?view plaincopy
42.聯合查詢?left?join?? $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);?? ?? 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();?? }?? [php] ?view plaincopy
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().'】'); ???return?$RES;??
?
二、部分截圖如下:
?
?
?
?
三、數據庫操作類之間的繼承關系(區分數據庫普通操作類和數據庫快捷操作類),如圖所示:
?
注意:CI_DB類是在DB()函數中動態定義的,沒有單獨的類庫文件
? ? ? ? ?DB()函數在DB.php文件中定義
? ? ? ? ?DB.php文件中部分代碼如下:
?
????????
[php] ?view plaincopy
require_once(BASEPATH.'database/DB_driver.php'); ?? if?(?!?isset($active_record)?OR?$active_record?==?TRUE)?? {?? ????require_once(BASEPATH.'database/DB_active_rec.php');?? ?? ????if?(?!?class_exists('CI_DB'))?? ????{?? ????????eval('class?CI_DB?extends?CI_DB_active_record?{?}'); ????}?? }?? else?? {?? ????if?(?!?class_exists('CI_DB'))?? ????{?? ????????eval('class?CI_DB?extends?CI_DB_driver?{?}'); ????}?? }?? ?? require_once(BASEPATH.'database/drivers/'.$params['dbdriver'].'/'.$params['dbdriver'].'_driver.php'); ?? $driver?=?'CI_DB_'.$params['dbdriver'].'_driver'; $DB?=?new?$driver($params); ?? if?($DB->autoinit?==?TRUE)?? {?? ????$DB->initialize();?? }?? ?? if?(isset($params['stricton'])?&&?$params['stricton']?==?TRUE)?? {?? ????$DB->query('SET?SESSION?sql_mode="STRICT_ALL_TABLES"');?? }?? ?? return?$DB;
?
?
? ? ?提示:$this->load->database();//內部通過加載DB.php文件并調用DB()函數來實現不同數據庫驅動類的加載
??????????????$this->product_db?=?$this->load->database('product',?true);
??????????????$this->wms_db?=?$this->load->database('wms',?true);
??????????????$this->order_db?=?$this->load->database('order',?true);
?
?
四、模型類分析:CI_Model
?
?
模型類分析:CI_Model
?
?
數據庫普通操作類(CI_DB_driver)中的query()方法內部,通過$driver= $this->load_rdriver();?$RES= new $driver();兩行代碼加載并實例化了一個CI_DB_mysql_result結果集對象(總結:以驅動的方式加載結果集對象),經過對結果集對象的一些列初始化操作,最終返回此結果集對象(總結:query()方法中返回了一個CI_DB_mysql_result結果集對象)
?
[php] ?view plaincopy
?function?load_rdriver(){?? ????$driver?=?'CI_DB_'.$this->dbdriver.'_result';?? ?? ????if?(?!?class_exists($driver))?? ????{?? ????????include_once(BASEPATH.'database/DB_result.php'); ????????include_once(BASEPATH.'database/drivers/'.$this->dbdriver.'/'.$this->dbdriver.'_result.php'); ????}?? ?? ????return?$driver; }?? ?????????? 提示:也就是說,類似 $this->db->query("select * from user"); 的語句,返回的都是一個結果集對象
??????????????????? $this->db->query("select * from user")->result_array();//將結果集轉換為二維關聯數組
??????????????????? $this->db->query("select * from user")->row_array();//將結果集轉換為一維關聯數組
?
?
?
?
數據庫快捷操作類(CI_DB_active_record)中的get()、insert()等多個方法內部都調用了數據庫普通操作類中的query()方法,即:間接的返回了CI_DB_mysql_result結果集對象
數據庫快捷操作類中很多對結果集的操作函數內部都是通過封裝返回的CI_DB_mysql_result結果集對象中的方法來完成相似功能的(總結:get()、insert()方法內部最后調用了query()方法,并返回query()方法執行的結果,所以返回的也是一個CI_DB_mysql_result結果集對象)
數據庫快捷操作類中的方法其實只干了一件事情,那就是通過函數的方式幫助我們拼接了要執行的sql語句,并執行該sql語句
但是對于復雜的sql語句,尤其對于復雜的多表查詢語句,個人還是建議直接使用數據庫普通操作類中的query()方法(適用于兩個表以上的情況)
對于返回的結果集對象而言,結果集對象中的方法是通用的(總結:CI_DB_mysql_result結果集對象中對結果集的處理函數對于數據庫普通操作類和數據庫快捷操作類是通用的)
?
我們可以這樣理解:數據庫快捷操作類是對數據庫普通操作類的二次封裝
?
提示:數據庫操作類的繼承關系
class CI_DB_active_record extends CI_DB_driver {
//代碼
}
轉載于:https://www.cnblogs.com/kenshinobiy/p/4779042.html
總結
以上是生活随笔 為你收集整理的**【ci框架】精通CodeIgniter框架 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。