ci架構(一),ci架構(
ci目錄結構
|-----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 入口檔案
訪問形式
在\application\controllers\welcome.php中添加函數:
public function hello() { echo "test"; }
入口檔案.php/控制器/動作
自己建立控制器,hello.php:
if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Hello extends CI_Controller { public function sayHello($name) { echo $name,",Hello World"; } }?>
注意:
- 方法名以底線開頭的是不能訪問成功的,只能間接訪問。
- 只能訪問public修飾的方法。
- 盡量不要與類名相同的方法,會當作建構函式。
載入視圖
application\views\view_test.php或者application\views\view\test.php(這中做法主要是方便同一類型的視圖可以放在同一個檔案夾下方便管理)
<html><head>head><body>test_ci_hello_worldbody>html>
控制器:
public function addView(){ $this->load->view("view_test");}
或者:
public function addView2(){ $this->load->view("view/test");}
效果:
分配變數
把資料從控制器中傳到視圖中,控制器:
public function addView() { $this->load->vars("title","value"); $list = array( array('id'=>1,'name'=>'jack','email'=>'123@123.com'), array('id'=>2,'name'=>'jack2','email'=>'1233@123.com'), array('id'=>3,'name'=>'jack3','email'=>'12333@123.com') ); $data['new_title']="標題"; $data['list']=$list; $this->load->vars($data); $this->load->view("view_test"); }
視圖:
echo $title;?>
echo $new_title;?>
test_ci_hello_world $listas$item
foreach( ):?>
| $item['id']?> |
$item['name']?> |
$item['email']?> |
endforeach;?>
效果:
public function addView() { $this->load->vars("title","value"); $list = array( array('id'=>1,'name'=>'jack','email'=>'123@123.com'), array('id'=>2,'name'=>'jack2','email'=>'1233@123.com'), array('id'=>3,'name'=>'jack3','email'=>'12333@123.com') ); $data['new_title']="標題"; $data['list']=$list; $this->load->vars($data); $this->load->view("view_test"); $this->load->view("footer"); }
視圖view_test:
echo $title;?>
echo $new_title;?>
test_ci_hello_world $listas$item
foreach( ):?>
| $item['id']?> |
$item['name']?> |
$item['email']?> |
endforeach;?>
視圖footer:
CI_hello_world!!!body>html>
顯示效果:
uri參數擷取
控制器:
public function getUri($id,$name,$year) { echo "id--->".$id."---name--->".$name."---year--->".$year."
"; echo "segment(1)--->".$this->uri->segment(1)."
"; echo "segment(2)--->".$this->uri->segment(2)."
"; echo "segment(3)--->".$this->uri->segment(3)."
"; echo "segment(4)--->".$this->uri->segment(4)."
"; echo "segment(5)--->".$this->uri->segment(5)."
"; }
效果:
載入資料庫
這個操作在MVC中是放到model中做的。
在\application\config\database.php中設定資料庫參數,注意dbprefix和swap_pre這兩個參數。在php中寫的是首碼,會預設當作swap_pre,然後放到資料庫中的時候會轉成dbprefix,但是最好兩個都弄成一樣的。
還有$active_group,預設是default,如果要串連兩個資料庫,把default另外取名,然後在函數中寫明參數就OK。
必須繼承資料核心類CI_Model,同時重載父類中的構造方法。
class Model_name extends CI_Model{ function __construct() { parent::__construct(); }}
在每次使用資料庫的時候,都需要載入一次資料庫:
$this->load->database();
為了方便,可以將資料庫的載入設定成自動載入,在\application\config\autoload.php中。
$autoload['libraries'] = array('database');
對於資料庫訪問對象,裝載到超級對象的屬性中 $this->db
$res = $this->db->query($sql);//返回對象$res->result();//返回數組,數組中是一個一個的對象$res->result_array();//返回二維數組,裡面是關聯陣列$res->row();//返回第一條資料,直接是一個對象
AR操作資料庫
在database.php檔案中,將$active_recoed的值改為TRUE,這樣就可以使用AR了。
//查詢public function index(){ $res = $this->db->get('表名');//這裡自動調用首碼 foreach($res->result() as $item) { echo $item->name."
"; }}
//插入public function index(){ $data=array( 'name'=>'lisi', 'password'=>md5('lisi') ); $bool = $this->db->insert("表名",$data); var_dump($bool);}
//更新public function index(){ $data=array( 'name'=>'wangwu', 'password'=>md5('wangwu') ); $bool = $this->db->update('表名',$data,array('id'=>3)); var_dump($bool);}
//刪除$bool = $this->db->delete('表名',array('id'=>2));var_dump($bool);
新手助PHP 程式 CI架構開發 進來看一眼吧
常規的方法是ul嵌套,即主菜單ul-li裡嵌套子功能表ul,要用到兩級迴圈
首先迴圈主菜單,要有固定的條件來判斷出主菜單,比如主菜單的uid==0或者其它。。。
- 欄目名稱</li>
if($news_item['uid'] == 0){ //判斷並得到主菜單
echo "
- ".$news_item['title'] . '
';
foreach ($news as $child_item): //迴圈二次
if($news_item['id'] == $child_item['uid']){ //判斷並得到對應子功能表
echo "
- "."ss".$child_item['title']."</li>";
}
endforeach;
echo "</ul></li>";
}
endforeach; ?>
</ul>
當然這僅限於兩級菜單,多級或無限極,可以使用函數遞迴
function menu($uid=0){ //設定預設從主菜單開始
global $news;
foreach ($news as $news_item):
if($news_item['uid'] == $uid){
echo "
- ".$news_item['title'] . '