【ci框架】ci框架授課思路

--------------------------------------------------------------------------------------------------------------------------------------------------javascript

授課過程當中若是涉及到文件夾或目錄時,可以使用縮進進行演示:php

applicationcss

|-----librarieshtml

|-----xxx_helper.php前端

systemjava

|-----librariesweb

|-----url_helper.phpsql

-----------------------------------------------------------------------------------------------------------------------------------------------------thinkphp

1、什麼是框架?數據庫

2、框架的優缺點分析及爲何要選擇框架
3、主流MVC框架介紹:


    一、thinkphp
    二、zendframework
    三、ci
    四、yii


4、CI框架特性介紹:


    一、輕量級:核心系統的類庫很是小
    二、採用了最流行的MVC架構模式
    三、生成乾淨的對搜索引擎友好化的url
       http://www.kuxiu.net/index.php/common/login/
    
    四、功能很是強大:
       擁有全範圍的類庫,可完成一個項目的大多數通用功能,包括: 讀取數據庫、發送電子郵件、數據確認、保存 session 、對圖片的操做,以及支持 XML-RPC 數據傳輸等
    
    五、不須要模板引擎:


       雖然CI框架自帶了一個可選的模板解析器程序,但不要求你必須使用模板;
       雖然模板引擎的代碼比較清晰,但這會帶來一個性能問題,由於僞代碼要先被轉換成PHP才能運行。咱們的目標是性能最大化, 因此咱們選擇不使用專用的模板引擎。


       固然,咱們也可使用ci框架自帶的模板引擎,也能夠整合第三方的模板引擎到ci框架中:smarty模板引擎
    
    六、中文化的文檔全面:
       
       雖然是一款國外的框架,可是中文化的文檔也是很是全面,便於咱們查閱



5、MVC模式:
視圖、
模型:
控制器
6、CI框架執行流程深刻分析:


     第一步:入口文件:
             //加載引導文件,http://www.kuxiu.net/system/core/CodeIgniter.php文件
    require_once BASEPATH.'core/CodeIgniter.php';
     
     第二步:require_once BASEPATH.'core/CodeIgniter.php';中


             //加載公共的函數庫
    require(BASEPATH.'core/Common.php');


    require(APPPATH.'config/constants.php');//常量文件


    /*
    配置類,加載配置文件時使用,如:
    $this->config->load();
    $this->config->item();
    $this->config->set_item();
    */
    $CFG =& load_class('Config', 'core');


    $URI =& load_class('URI', 'core');


    $RTR =& load_class('Router', 'core');


    $OUT =& load_class('Output', 'core');


    $SEC =& load_class('Security', 'core');


    $IN  =& load_class('Input', 'core');


    require BASEPATH.'core/Controller.php';//系統基類控制器文件
    return CI_Controller::get_instance();


    //在擴展系統基控制器時使用:MY_Controller.php
    if (file_exists(APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php')){
require APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php';//如:MY_Controller.php
     }
    


    $class  = $RTR->fetch_class();//當前請求的控制器,如:common
    $method = $RTR->fetch_method();//當前請求的控制器中的方法,如:index


    $CI = new $class();//實例化當前請求的控制器類對象


    關於hook的資料:就是在系統引導流程中插入本身的代碼,而不用修改核心代碼
    貌似能夠在 控制器以前(或者其餘時候) 執行本身的代碼,執行某個對象的方法或者某個函數。我如今把須要在全部控制器中都執行的代碼移到hook中了。應該就是這麼用的吧?


    雖然很神,可是實際上運用hook的狀況很少(由於ci已經解決了大部分你可能會遇到的問題)。當使用擴展沒法達到目的時,纔會考慮鉤子。

    hook在你執行controller以前執行,舉一個例子吧,有一次,項目要上線,可是服務器時間怎麼調也不正確。(由於要存訂單時間),沒辦法,一時調很差服務器,就寫了一個鉤子設置時區。(只是做爲臨時方案)


    一、index.php 做爲前端控制器,初始化運行 CodeIgniter 所須要的基本資源。 
    二、Router 檢查 HTTP 請求,以肯定誰來處理請求。 
    三、若是緩存(Cache)文件存在,它將繞過一般的系統執行順序,被直接發送給瀏覽器。 
    四、安全(Security)。應用程序控制器(Application Controller)裝載以前,HTTP 請求和任何用戶提交的數據將被過濾。 
    五、控制器(Controller)裝載模型、核心庫、輔助函數,以及任何處理特定請求所需的其它資源。 
    六、最終視圖(View)渲染髮送到 Web 瀏覽器中的內容。若是開啓緩存(Caching),視圖首先被緩存,因此將可用於之後的請求。 




7、URL調度模式:


    一、如何修改默認執行的控制器和方法:
       application/config/routes.php中配置以下項:

       $route['default_controller'] = "common";//默認執行的控制器

       


8、model詳解:
    一、模型類的命名規範:主須要首字母大寫便可,建議採用 User_model 形式
    二、引用模型的兩種方式:
       $this->load->model("user_model");//引用user_model模型
       $this->load->model("User_model");//應用user_model模型,這兩種方式是等價的
9、實例化模型的執行流程:
    $this->load->model("user_model");//引用user_model模型


10、CI框架中session與cookie類庫的使用:cookie登錄、session登錄


11、CI框架中文件處理類庫及圖像處理類庫的使用:文件上傳、縮略圖、水印功能


12、CI框架與smarty模板引擎的無縫整合:在項目中的應用


    提示:雖然模板引擎的代碼比較清晰,但這會帶來一個性能問題,由於僞代碼要先被轉換成PHP才能運行。咱們的目標是性能最大化, 因此咱們選擇不使用專用的模板引擎


十3、CI框架與UEditor編輯器的無縫整合:在項目中的應用(路徑問題)


十4、CI框架與報表類庫的無縫整合:在項目中的應用(報表的導入導出)


十5、導入機制和配置文件加載流程介紹


十6、配置文件:
    一、主配置文件:application/config/config.php,已自動加載,無需手動啓用
       分析:配置項目被存儲在一個叫$config[]的數組裏面,你能夠添加本身的配置項目到這個文件中
    二、加載單個自定義的配置文件:
       $this->config->load("thumb_settings");//配置文件的文件名,不帶.php擴展名
    三、加載多個自定義配置文件:
       若是須要加載多個自定義配置文件,通常狀況下他們會被合併爲一個數組;若是在不一樣的配置文件中存在同名的索引,那麼將會發生衝突;爲了不這個問題,你能夠將第二個參數設置爲true、這樣可使每一個配置文件中的內容存儲在一個單獨的數組中,數組的索引就是配置文件的名稱
       $this->config->load("thumb_settings",true);
       //至關於以下方式: 
       $this->config['thumb_settings'] = $thumb_settings;


       //參數3用來屏蔽當配置文件不存在時產生的錯誤信息
       $this->config->load("thumb_settings",false,true);


    四、如何獲取配置文件中的配置項:

       //加載配置文件:
       $this->config->load("thumb_settings");//縮略圖相關的配置文件
       //當視圖獲取的配置項不存在時,將返回false
       $this->config->item("config_thumb");//縮略圖的相關配置項
    
    五、如何動態設置一個配置項:


       //動態設置生成的縮略圖的名字
       $this->config->set_item("new_image",time.().$this->file_ext);
    
    六、思考一個問題:配置項是否能夠爲數組呢?


    七、配置類輔助函數:


       $this->config->site_url();//網站URL


       如何將url路徑中的index.php屏蔽?


       $config['index_page'] = 'index.php';//如:http://www.kuxiu.net/index.php/
       $config['index_page'] = '';//如:http://www.kuxiu.net/




       $this->config->base_url();//返回站點的根目錄


       提示:在生成images、css、js等的url時很是實用




       $this->config->system_url();//該函數用來獲得system文件夾的url


十7、分頁類的使用:
      
      //加載分類類庫
      $this->load->pagination("pagination");


十8、數據庫的增刪改查:


      普通查詢:
      
      一、$this->db->database();//加載數據庫實例化對象


      二、$query=$this->db->query($sql);//執行查詢,返回結果集;注意:query是普通數據庫操做類中的方法,快捷操做類繼承自普通數據庫操做類,因此快捷操做類中也有query方法,query方法返回一個結果集對象


      三、$object_array=$query->result();//返回一個對象數組;result是結果集類中的方法
         foreach($object_array as $object){
  echo $object->name;
         }


      四、$data_array=$query->result_array();//返回一個二維關聯數組;result_array()是結果集類中的方法,主要用來將結果集轉換爲二維關聯數組
         foreach($data_array as $row){
  echo $row['name'];
         }
      
      五、$object=$query->row();//返回一個對象;


      六、$row=$query->row_array();//返回一維數組


      七、$query->num_rows();//返回查詢到的記錄數


      八、$this->db->affected_rows(); //返回受影響的記錄數


      九、$this->db->insert_id();//返回最新插入記錄的id


      
      快捷查詢:


      插入數據:


      $this->db->insert("user",$data);
      分析:參數1:表名,不帶前綴,由於在配置文件中設置過數據表的前綴了
            參數2:包含數據的關聯數組
            缺點:$data關聯數組中的鍵名要與user表中字段名一一對應,缺一不可
      注意:$this->db->insert_batch();


      更新數據:


      $this->db->update("user",$data,條件);
      分析:參數1:表名,同上
            參數2:包含數據的關聯數組
   參數3:更新條件,有兩種形式:
數組形式:array("id"=>4)
鍵值對形式:"id=4"
      
      刪除數據:


      $this->db->delete("user",條件);//條件同上


      查詢數據:


      $query=$this->db->get();//返回結果集


      //參數2:每頁記錄數 參數3:開始位置;
      $query=$this->db->get("user",$pagesize,$limit);


      $data_array=$query->result_array();//將結果集轉化爲數組


      $this->db->get_where("user",$where,$limit,$pagesize);//查詢結果集,條件同上


      
      //在執行查詢以前,咱們能夠隨意設置查詢的字段及條件


      $this->db->select("username,realname,password");//字段間以逗號相隔


      $this->db->select_max("id");//查詢最大id


      $this->db->select_min("id");//查詢最小id


      $this->db->select_avg("score");//平均值


      $this->db->select_sum("score");//總值


      //主要用來設置表名,若是使用了此函數,在$this->db->get();函數中就無需表名了
      $this->db->from("user");




      $this->db->where();//傳遞給本函數的全部值都會被自動轉義,以便生成安全的查詢
      條件形式:
      簡單的鍵值對:
$this->db->where('name', $name); 
      自定義鍵值對:
$this->db->where('name !=', $name);
$this->db->where('id <', $id); 
      關聯數組:
$where=array("username"=>$username,"password"=>$password)


      字符串格式:
                $where = "name='Joe' AND status='boss' OR status='active'";
$this->db->where($where);




      注意:條件中能夠包含運算符




      $this->db->or_where();


      $this->db->where_in();


      $this->db->or_where_in();


      $this->db->where_not_in();


      $this->db->or_where_not_in();


      $this->db->group_by();


      $this->db->distinct();


      $this->db->having();


      $this->db->order_by();


      $this->db->limit(10);


      $this->db->count_all_results("user");
      分析:此函數容許你得到某個特定的Active Record查詢所返回的結果數量。可使用Active Record限制函數,例如 where(), or_where(), like(), or_like() 等等。範例:


      
      $this->db->set();//它能夠用來代替那種直接傳遞數組給插入和更新函數的方式
      
      案例:


      $this->db->set('name', $name); 
      $this->db->insert('mytable'); //生成: INSERT INTO mytable (name) VALUES ('{$name}')

      $this->db->empty_table();


      $this->db->truncate();


      鏈式查詢:鏈式方法容許你以鏈接多個函數的方式簡化你的語法


      $this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);


      $query = $this->db->get();


十9、輔助函數的加載:


      //單個輔助函數文件的加載
      $this->load->helper("url");//輔助函數文件的名字


      //多個輔助函數文件的加載
      $this->load->helper(array(
"url",
"pagination",
"image_lib"
      ));


      //一旦你載入了想要用到輔助函數文件,能夠用標準的函數調用方法來使用裏面的函數。


      base_url();// $this->base_url()是錯誤的寫法


      
      一、如何擴展系統原有的helper函數庫?
         在application/helpers/ 文件夾下創建一個文件,命名爲:MY_原系統函數庫名.php


      二、如何設置默認擴展文件名的前綴?
         找到application/config/config.php配置文件
         修改$config['subclass_prefix'] = 'MY_';便可
      
      三、如何修改數據表的前綴?
         找到application/config/database.php配置文件
修改$db['default']['dbprefix'] = 'gt_';//數據表的前綴

二10、如何設置url路由及url後綴


$config['uri_protocol'] = 'AUTO';//路由形式,如:http://www.kuxiu.net/common/index/1/
$config['uri_protocol'] = 'PATH_INFO';//路由形式,如:http://www.kuxiu.net/common/index?x=a&y=b

$config['url_suffix'] = '';//url後綴,如:http://www.kuxiu.net/common/index.html


二11、總結:


一、關於縮略圖的配置項目能夠放在config.php文件中


二、$this->db->insert("user",$data);//要求數據表中除主鍵字段外,其它字段在$data關聯數組中都有默認值才能執行成功,提示:$data通常爲一維關聯數組
   $this->db->insert_batch("user",$data);//$data通常爲二維關聯數組


三、跳轉:header("location:".site_url("common/login"));


四、設置時區
   $config['time_zone']=date_default_timezone_set('Asia/shanghai');


五、推薦使用鏈式操做
   $query=$this->db->query($sql);
   $data_array=$query->result_array();


   等價於:


   $data_array=$this->db->query($sql)->result_array();


六、如何配置ueditor編輯器文件上傳的路徑,如:將圖片上傳到根目錄下面的 php/upload/ 下
   
   首先:將ueditor/php/ 文件夾複製粘貼到根目錄下


   而後:在模板文件中修改文件上傳路徑:
{literal}
<!--注意:js文件的引入必須在body體中,不然不生效-->
<script type="text/javascript" src="http://www.kuxiu.net/public/js/ueditor/editor_config.js"></script>
<script type="text/javascript" src="http://www.kuxiu.net/public/js/ueditor/editor_all.js"></script>
<script type="text/javascript">
var ue = new UE.ui.Editor({
initialFrameWidth:750,//編輯器初始化寬度
initialContent:'',//編輯器初始化內容
imagePath:"/php/",//圖片上傳路徑,默認狀況下圖片上傳路徑的upload文件夾與圖片上傳腳本同目錄,因此這樣配置生成以下效果:"/php/upload/"
imageUrl:"/php/imageUp.php"//圖片上傳腳本文件
}
);
ue.render('content')//給id爲content的textarea表單控件渲染一個編輯器
</script>
{/literal}


   思考:默認狀況下,編輯器是按照日期自動建立存儲的文件夾的,如何修改這一規律?
        
找到php/Upload.class.php文件中的getFolder()函數,修改以下:
        /**
         * 按照日期自動建立存儲文件夾
         * @return string
         */
        private function getFolder(){
            $pathStr = $this->config[ "savePath" ];//保存路徑
            if ( strrchr( $pathStr , "/" ) != "/" ) {//保存路徑必須以"/"結尾
                $pathStr .= "/";
            }
            $pathStr .= date( "Ymd" );//年月日
            if ( !file_exists( $pathStr ) ) {//若是目錄不存在
                if ( !mkdir( $pathStr , 0777 , true ) ) {//層級建立目錄
                    return false;//建立失敗返回false
                }
            }
            ///return $pathStr;//建立成功返回路徑
   
        }     

七、系統加載類庫:core/Loader.php
  
   以下函數都在此類庫中定義


   $this->load->model("");
   $this->load->library("");
   $this->load->database("");
   $this->load->helper("");
   $this->config->load();

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

<?php

一、在講解文件所在目錄方面的問題時:

application
	|-----core
		|-----MY_Controller.php


system
	|-----core
		|-----Controller.php





思路:

1、目前在企業中使用比較多的框架有以下幾種:

一、zendframework框架:此框架由zend公司開發並負責維護,入門比較困難一點,可是聽說功能很強悍,屬於一款偏重量級的MVC框架
二、Yii框架:又稱爲 "易框架",在外企使用居多
三、thinkphp框架:是國人開發的一款框架,因爲它的註釋和使用文檔都是中文,因此很受國人的喜歡
四、codeigniter框架:簡稱CI框架,是國外一款流行的框架,跟前面的框架比較,ci框架是最輕量級的,也是最容易上手的


2、咱們選擇這款框架來學習,主要有如下幾點緣由:

一、ci是一個輕量級的框架,關於輕量級,可從兩方面來理解:
	一、體積小,解壓後不到4M,zendframework解壓後60M左右
	二、佔用資源少:ci應用程序在運行的時候,只是將正常運行所必須的幾個核心類庫載入到了內存中,其它類庫在請求的時候纔會加載,這樣就達到了資源的最小化,這跟那些須要不少資源的框架是不同的,有些框架在運行的時候,會將全部的類庫首先載入內存中,而無論這些類庫是否可以用的到,如:cakephp
	三、可是這個輕量級,並不影響它開發大型的web應用程序,爲何這麼說呢?
	首先,它自身所提供的類庫,已經可以幫助咱們完成web應用程序中的大部分功能
	再者,ci框架在整合第三方類庫方面也有獨到的優點,幾乎不須要進行任何配置

二、整合第三方類庫簡單,幾乎不須要進行任何配置

三、不須要使用模板引擎技術
   
   你們知道,php原生態的語法結構執行效率是最高的,由於跟使用了模板引擎技術的程序相比較,它少了一個編譯的過程


3、下面,咱們就來進行ci框架的安裝:

ci框架的安裝,咱們只須要按照以下步驟進行操做就能夠了
一、官網:http://www.codeigniter.com 去下載ci框架最新的版本,目前最新版本爲2.1.3
   中文網站:http://www.codeigniter.org.cn 

二、下載完畢後,解壓,並將其複製粘貼到程序的主目錄(d:/wamp/xmall/),而後再將其重命名爲"myshop",那麼"myshop" 就做爲ci項目名稱存在了

三、爲咱們的ci項目搭建一個虛擬主機:

   首先,找到httpd.conf配置文件,開啓虛擬主機的配置

   而後,找到httpd-vhosts.conf配置文件,進行虛擬主機的配置

   最後,找到hosts配置文件,爲咱們的ci項目添加dns映射

四、在瀏覽器中輸入 http://www.myshop.com/index.php 回車,如能看到以下歡迎界面,則表示咱們的ci項目安裝成功了


4、ci框架的目錄結構分析:

瞭解ci框架的目錄結構,有助於幫助咱們快速創建起對ci框架的一個總體認識

打開"myshop"項目,有以下文件和目錄

使用協議說明文檔、英文版的用戶手冊,這兩項不是項目所必須的,可暫時將其刪除

myshop
|-----system				框架程序目錄
	|-----core				框架的核心程序
		|-----CodeIgniter.php	引導性文件
		|-----Common.php	加載基類庫的公共函數
		|-----Controller.php	基控制器類文件:CI_Controller
		|-----Model.php		基模型類文件:CI_Model
		|-----Config.php	配置類文件:CI_Config
		|-----Input.php		輸入類文件:CI_Input
		|-----Output.php	輸出類文件:CI_Output
		|-----URL.php		URL類文件:CI_URl
		|-----Router.php	路由類文件:CI_Router
		|-----Loader.php	加載類文件:CI_Loader
	|-----helpers			輔助函數
		|-----url_helper.php	url相關的輔助函數,如:建立url的輔助函數
		|-----captcha_helper.php建立圖形驗證碼的輔助函數
	|-----libraries			通用類庫
		|-----Pagination.php	通用分頁類庫
		|-----Upload.php	通用文件上傳類庫
		|-----Image_lib.php	通用圖像處理類庫
		|-----Session.php	通用session類庫
	|-----language			語言包
	|-----database			數據庫操做相關的程序
		|-----DB_active_rec.php 快捷操做類文件(ActiveRecord)
	|-----fonts				字庫
	
|-----application			項目目錄
	|-----core				項目的核心程序
	|-----helpers			項目的輔助函數
	|-----libraries			通用類庫
	|-----language			語言包
	|-----config			項目相關的配置
		|-----config.php	項目相關的配置文件	
		|-----database.php	數據庫相關的配置文件
		|-----autoload.php	設置自動加載類庫的配置文件
		|-----constants.php	常量配置文件
		|-----routes.php	路由配置文件
	|-----controllers		控制器目錄
		|-----welcome.php	控制器文件,繼承CI_Controller
	|-----models			模型目錄
		|-----welcome_model.php	模型文件,繼承CI_Model
	|-----views				視圖目錄
		|-----welcome.php	視圖模板文件,默認後綴名爲.php
	|-----cache				存放數據或模板的緩存文件
	|-----errors			錯誤提示模板
	|-----hooks				鉤子,在不修改系統核心文件的基礎上擴展系統功能
	|-----third_party		第三方庫
	|-----logs				日誌

|-----index.php				入口文件




5、ci框架中的url路由規則:


瀏覽器中輸入 http://www.myshop.com/index.php/welcome/index/  回車時,默認狀況下會找到
application
	|-----controllers
		|-----welcome.php		控制器文件,並執行其中的index方法
		
		|-----admin			子目錄
			|-----category.php	控制器文件
			

究竟是不是呢?咱們打開welcome.php控制器文件,並在index方法中添加一些代碼,運行輸出,證實確實如咱們所料

咱們能夠將瀏覽器中的url概括以下:http://域名/入口文件/控制器/方法/參數列表

當輸入網址回車時,默認狀況下會直接從controllers目錄下尋找控制器文件,

若是咱們的控制器文件放在controllers目錄下的子目錄中,又該如何訪問呢?

例如:在controllers目錄創建一個admin子目錄,而後呢,在admin子目錄下建立一個category.php控制器文件

那麼,咱們在訪問category.php控制器文件中的addcategory方法時,在瀏覽器中怎樣訪問呢?

咱們能夠這樣來訪問:

http://www.myshop.com/index.php/admin/category/addcategory/

即:http://域名/入口文件/controllers下的子目錄/控制器/方法/參數列表


咱們在瀏覽器中輸入http://www.myshop.com/index.php 後面沒有跟 "控制器/方法/參數列表" 回車時,默認狀況下也會執行welcome.php控制器中的index方法。

這是由於ci框架爲咱們指定了一個默認的控制器和方法

默認控制器的設置在 "application/config/routes.php" 配置文件中進行設置的,咱們能夠從新設置默認的控制器


6、項目的部署:咱們在實際部署大型項目時,還能夠創建一些子目錄及文件來幫助咱們更好的管理咱們的項目

一、子目錄及入口文件的建立

controllers
	|-----admin		後臺控制器
	|-----home		前臺控制器
models
	|-----admin		後臺模型文件
	|-----home		前臺模型文件
views
	|-----admin		後臺模板文件
		|-----category	後臺商品分類模塊相關的模板文件
			|-----addcategory.html
		|-----public	後臺公共模板文件
			|-----top.html
			|-----left.html
			|-----footer.html
	|-----home		前臺模板文件
core
	|-----MY_Controller.php	擴展後的控制器文件,繼承CI_Controller

public				素材文件
	|-----images		images文件
		|-----admin	後臺images文件
		|-----home	前臺images文件
	|-----css		css文件
		|-----admin	後臺css文件
		|-----home	前臺css文件
	|-----js		js文件
		|-----admin	後臺js文件
		|-----home	前臺js文件

uploads				上傳附件

admin.php			後臺入口文件:訪問後臺控制器,都必須通過admin.php入口
index.php			前臺入口文件:訪問前臺控制器,都必須通過index.php入口

二、將後臺模板文件及素材文件部署到咱們的ci項目中來

css文件中採用絕對路徑
模板文件中採用絕對路徑

三、創建後臺控制器文件:

application
	|-----controllers
		|-----admin
			|-----index.php		index.php控制器文件
			|-----user.php		用戶控制器文件
控制器的命名規範

$this->load->view("admin/index.html");//將後臺模板文件顯示出來

四、將先後臺素材文件的路徑寫到常量文件中:application/config/constants.php

define("IMG_PATH","http://www.myshop.com/public/images/");	//images路徑
define("CSS_PATH","http://www.myshop.com/public/css/");		//css路徑	
define("JS_PATH","http://www.myshop.com/public/js/");		//js路徑

直接在控制器中獲取常量的值:

$data['img_path']=IMG_PATH;
$data['css_path']=CSS_PATH;
$data['js_path']=JS_PATH;

將$data數組傳遞給模板文件:

$this->load->view("admin/index.html",$data);//參數2:關聯數組

五、也能夠將素材文件的路徑放到application/config/config.php配置文件中

$config['img_path']="http://www.myshop.com/public/images/";
$config['js_path']="http://www.myshop.com/public/css/";
$config['js_path']="http://www.myshop.com/public/js/";

在控制器中獲取application/config/config.php配置文件中的配置項:

$data['img_path']=$this->config->item("img_path");
$data['css_path']=$this->config->item("css_path");
$data['js_path']=$this->config->item("js_path");

將$data數組傳遞給模板文件

$this->load->view("admin/index.html",$data);//參數2:關聯數組



六、創建後臺模型文件:

application
	|-----models
		|-----admin
			|-----user_model.php		用戶模型文件

模型文件的命名規範

如何在控制器中調用模型文件:

//一、實例化後臺的user_model類對象,對象名稱爲user_model
//二、將user_model實例化對象做爲控制器的user_model屬性
//三、所以,咱們能夠在控制器中經過 $this->user_model 來獲取user_model類對象,繼而能夠調用對象中的方法
$this->load->model("admin/user_model");

$this->user_model->adduser();


七、數據庫操做:

數據表的建立:gt_users   導入一些數據

查詢用戶:首先在model中鏈接數據庫,$this->load->database();而後咱們能夠在模型類的方法中查詢全部的數據

在ci框架中操做數據庫可分爲兩種方式

(1)方式一:普通查詢:經過sql語句及db類的query()方法來完成,以下所示:



下面,咱們先經過第一種方式來完成用戶管理系統

//insert、delete、update操做返回布爾true或false
//select操做成功時返回結果集對象,失敗時返回布爾值false
$query=$this->db->query($sql);

//經過結果集對象的方法將結果集轉化爲數據或對象
$data_array=$query->result_array();//將結果集轉換爲二維關聯數組
$row_array=$query->row_array();//將結果集轉換爲一維關聯數組

//獲取查詢到的行數
$num=$query->num_rows();

//db類中insert_id():返回最後一次插入數據的id
$id=$this->db->insert_id();





//分頁類庫的載入:
$this->load->library("pagination");//載入system/libraries/pagination.php分頁類庫
//分頁配置:
$config['base_url']="http://www.myshop.com/index.php/user/userlist/";
$config['total_rows']=200;//總記錄數,可從數據庫獲取
$config['per_page']=10;//每頁顯示的記錄數
$config['...']="...";//其餘配置

//初始化配置,使得分頁配置生效
$this->pagination->initialize($config);
//建立默認風格的分頁代碼
$pages=$this->pagination->create_links();//$content['pages']

//limit的值
$limit=($page-1)*$config['per_page'];

//注意:傳遞給模板文件的數據都必須放到關聯數組中,會將關聯數組中元素作爲變量
$this->load->view("login.html",$content);//至關於extract($content)




//將分頁配置信息放到application/config/pagination.php配置文件中
//載入pagination.php配置文件
$this->config->load("pagination");
//獲取配置選項
$per_page=$this->config->item("per_page");//每頁顯示的記錄數



鏈式操做:可採用鏈式操做

$data_array=$this->db->query($sql)->result_array();
$row_array=$this->db->query($sql)->row_array();

(2)方式二:快捷查詢:主要經過快捷操做類來進行數據庫操做(ActiveRecord)

什麼是快捷操做類:主要用來將sql語句的拼接放到類的方法中來完成。

下面,咱們再使用第二種方式來完成用戶管理系統

//查詢操做
$this->db->get("users",10,20);//參數2:每頁顯示的記錄數  參數3:開始查詢位置
$this->db->get_where("users",array('id'=>1),10,20);//參數3:每頁顯示的記錄數

//案例1:在函數內部幫助咱們自動拼接sql語句
$this->db->select("*");//一、返回一個db類實例化對象 二、將實例化對象做爲模型類的db屬性
$this->db->from("users");
$this->db->where("id",3);
$this->db->order_by("id","desc");
$this->db->get();

//案例2:
$this->db->select("*");
$this->db->where("id",3);
$this->db->order_by("id","desc");
$this->db->get("users");
$this->db->count_all_results();//獲取查詢到的總記錄數

//插入操做:
$this->db->insert("users",$data_array);//參數1:表名   參數2:關聯數組

//更新操做:
$this->db->update("users",$data_array,$where);//參數1:表名  參數3:關聯數組

//刪除操做:
$this->db->delete("users",$where);//參數1:表名   參數2:關聯數組

//關於$where條件分析:
單條件時:使用鍵值對形式的條件
作比較時:使用運算符格式的條件
多條件時:使用關聯數組的格式





鏈式操做:

//將結果集轉化爲二維關聯數組
$data_array=$this->db->select('title')->from('mytable')->where('id', $id)->limit($limit, $pagesize)->get()->result_array();

//將結果集轉化爲一維關聯數組
$row_array=$this->db->select('title')->from('mytable')->where('id', $id)->get()->row_array();







?>