一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

phpcms學(xué)習(xí)總結(jié)

 superli0426 2014-04-06

文件目錄結(jié)構(gòu)

根目錄

|  –  api  接口文件目錄

|  –  caches 緩存文件目錄

       |  – configs 系統(tǒng)配置文件目錄

       |  – caches_* 系統(tǒng)緩存目錄

|  –  phpcms  phpcms框架主目錄

       |  – languages 框架語言包目錄

       |  – libs 框架主類庫、主函數(shù)庫目錄

       |  – model 框架數(shù)據(jù)庫模型目錄

       |  – modules 框架模塊目錄

       |  – templates 框架系統(tǒng)模板目錄

|  –  phpsso_server  phpsso主目錄

|  –  statics  系統(tǒng)附件包

       |  – css 系統(tǒng)css包

       |  – images 系統(tǒng)圖片包

       |  – js 系統(tǒng)js包

|  –  uploadfile  網(wǎng)站附件目錄

|  –  admin.php  后臺(tái)管理入口

|  –  index.php  程序主入口

|  –  crossdomain.xml  FLASH跨域傳輸文件

|  –  robots.txt 搜索引擎蜘蛛限制配置文件

|  –  favicon.ico  系統(tǒng)icon圖標(biāo)

 

URL訪問

PHPCMS是采用MVC設(shè)計(jì)模式開發(fā),基于模塊和操作的方式進(jìn)行訪問,采用單一入口模式進(jìn)行項(xiàng)目部署和訪問,無論訪問任何一個(gè)模塊或者功能,只有一個(gè)統(tǒng)一的入口。

參數(shù)名稱    描述    位置    備注

m    模型/模塊名稱    phpcms/modules中模塊目錄名稱    必須

c    控制器名稱    phpcms/modules/模塊/*.php 文件名稱    必須

a    事件名稱        phpcms/modules/模塊/*.php 文件中方法名稱

 

 

模塊訪問方法[示例]:

http:///index.php?m=content&c=index&a=show&id=1

其中

m = content 為模型/模塊名稱 位于phpcms/modules/content

c = index   為控制器名稱    位于phpcms/modules/content/index.php

a = show    為方法名稱      位于phpcms/modules/content/index.php 中show()方法

id = 1 為其他參數(shù) 與正常get傳遞參數(shù)形式相同

 

 

如果我們?cè)L問您的域名 如:

http://www./index.php

phpcms默認(rèn)路由會(huì)定位到content模塊的index控制器中的init操作,因?yàn)橄到y(tǒng)在沒有指定模塊和控制器的時(shí)候,會(huì)執(zhí)行默認(rèn)的模塊和操作。

因此下面的URL的結(jié)果是相同的:系統(tǒng)還支持URL路由的功能,這些都能夠帶來其他的url訪問效果。

http://www./index.php?m=content&c=index&a=init

 

 

系統(tǒng)類庫與函數(shù)調(diào)用

1.系統(tǒng)類庫位于系統(tǒng)的phpcms/libs/classes目錄下面,函數(shù)庫文件名為*.class.php

2.系統(tǒng)函數(shù)庫位于系統(tǒng)的phpcms/libs/functions目錄下面,函數(shù)庫文件名為*.func.php,其中g(shù)lobal.func.php為框架中默認(rèn)加載,global.func.php中函數(shù)可直接使用

系統(tǒng)類庫調(diào)用

pc_base::load_sys_class('類名','擴(kuò)展地址','是否初始化');

示例:

$http = pc_base::load_sys_class('http'); //實(shí)例化http類

pc_base::load_sys_class('format', '', 0); //調(diào)用form類,不進(jìn)行實(shí)例化操作

系統(tǒng)函數(shù)庫調(diào)用

pc_base::load_sys_func('函數(shù)庫名');

示例:

pc_base::load_sys_func('mail'); 調(diào)用mail函數(shù)包

 

 

模塊

phpcms v9框架中的模塊,位于phpcms/modules目錄中 每一個(gè)目錄稱之為一個(gè)模塊。即url訪問中的m

示例:

http://www./index.php?m=content

那么您訪問的就是phpcms/modules/content 這個(gè)模塊。

如果創(chuàng)建一個(gè)模塊,只要在 phpcms/modules 目錄下創(chuàng)建文件夾并放入你的控制器類就可以了

 

 

控制器

phpcms v9的控制器就是模塊的類文件,位于phpcms/modules/模塊/目錄下面。類名成就是文件名+.php,例如一個(gè)名為mytest的控制器,那么他的命名為mytest.php即可。

控制器類默認(rèn)繼承系統(tǒng)的函數(shù)庫,可以直接使用??刂破黝惖念惷Q與控制器文件名必須相同

如果您創(chuàng)建了一個(gè)mytest.php在test模塊下,那么我們?cè)跒g覽器里面輸入U(xiǎn)RL:

http://www./index.php?m=test&c=mytest

 

 

下面是一個(gè)控制器類的基本格式,在構(gòu)建模塊部分會(huì)具體講解

defined('IN_PHPCMS') or exit('No permission resources.');

class mytest {

    function __construct() {

    }

    public function init() {

        echo 'hellp phpcms v9,my name is defalut action';

    }

}

?>

如果你添加的控制器類繼承了其他的類,你要小心你的方法名不要和那個(gè)類中的方法名一樣了,否則你的方法會(huì)覆蓋原有的。

 

 

命名規(guī)范

PHPCMS其自身的一定規(guī)范。下面是使用PHPCMS做二次開發(fā)中應(yīng)該遵循的命名規(guī)范:

類文件需要以.class.php為后綴(這里是指的phpcms的系統(tǒng)類庫文件和模塊中的類庫文件,第三方引入的不做要求),例如http.class.php。

函數(shù)文件需要以.func.php為后綴(第三方引入的不做要求),例如mail.func.php。

類名和文件名一致,例如 phpcmsapp類的文件命名是phpcmsapp.class.php。

數(shù)據(jù)模型需要以“數(shù)據(jù)表名稱_model.class.php”為形式,類名稱與文件名必須相同。

 

 

配置文件調(diào)用

配置文件配置在caches/configs/目錄下。

配置文件調(diào)用:使用 load_config方法

$upload_url = pc_base::load_config('配置文件','要獲取的配置鍵','默認(rèn)配置。當(dāng)獲取配置項(xiàng)目失敗時(shí)該值發(fā)生作用','是否強(qiáng)制重新加載');

示例:

調(diào)用系統(tǒng)配置中的附件路徑

$upload_url = pc_base::load_config('system','upload_url');

 

 

二次開發(fā)技巧

1.如果要對(duì)已存在的控制器進(jìn)行二次開發(fā),為了方便升級(jí)不建議直接對(duì)內(nèi)核文件直接修改該,您可以通過"MY_*.php"的形式進(jìn)行二次開發(fā)。

例如您要對(duì)改phpcms/mood/index.php進(jìn)行二次開發(fā)。您可以在與index.php同級(jí)的目錄下建立"MY_index.php"

MY_index.php代碼如下

class MY_index extends index{

    function __construct() {

        parent::__construct();

    }

    //……your code

 }

 ?>

這樣當(dāng)您通過url訪問index控制器的時(shí)候,系統(tǒng)會(huì)默認(rèn)指向MY_index.php 并且原文件的方法將被繼承,可以直接使用。

 

 

數(shù)據(jù)庫配置

數(shù)據(jù)庫配置文件位置:caches/configs/database.php

我們打開這個(gè)配置文件,加入我們的數(shù)據(jù)庫配置信息。數(shù)據(jù)庫配置信息為二維數(shù)組結(jié)構(gòu),默認(rèn)為default,可以根據(jù)default結(jié)構(gòu)配置多個(gè)數(shù)據(jù)庫鏈接(如:extended_1)

return array (

    'default' => array (

        'hostname' => 'localhost',

        'database' => 'phpcms',

        'username' => 'admin',

        'password' => 'admin',

        'tablepre' => 'v9_',

        'charset' => 'gbk',

        'type' => 'mysql',

        'debug' => true,

        'pconnect' => 0,

        'autoconnect' => 0

    ),

    /* 以下格外添加*/

    'extended_1' => array (

        'hostname' => '10.10.125.2',

        'database' => 'phpcms',

        'username' => 'admin',

        'password' => 'admin',

        'tablepre' => 'v9_',

        'charset' => 'gbk',

        'type' => 'mysql',

        'debug' => true,

        'pconnect' => 0,

        'autoconnect' => 0

    ),

);

?>

根據(jù)您的數(shù)據(jù)庫連接信息修改上面的配置內(nèi)容,修改完成后,保存該數(shù)據(jù)庫配置文件。

 

 

路由配置

路由配置文件位置:caches/configs/route.php

我們打開這個(gè)配置文件,加入我們的路由配置信息。路由配置信息為二維數(shù)組結(jié)構(gòu),默認(rèn)為default。

路由配置文件內(nèi)容是這樣的:

return array(

    'default'=>array('m'=>'admin', 'c'=>'index', 'a'=>'init'),

    'test.youname.com'=>array('m'=>'test', 'c'=>'index', 'a'=>'init'),

);

?>

data為一個(gè)二維數(shù)組,可設(shè)置POST和GET的默認(rèn)參數(shù)。POST和GET分別對(duì)應(yīng)PHP中的$_POST和$_GET兩個(gè)超全局變量。

如下面的例子,在程序中您可以使用$_POST['catid']來得到data下面POST中的數(shù)組的值。

data中的所設(shè)置的參數(shù)等級(jí)比較低。如果外部程序有提交相同的名字的變量,將會(huì)覆蓋配置文件中所設(shè)置的值。

如:

return array(

    'default'=>array(

        'm'=>'phpcms',

        'c'=>'index',

        'a'=>'init',

        'data'=>array(

            'POST'=>array(

                'catid'=>1

            ),

            'GET'=>array(

                'contentid'=>1

            )

        )

    )

)

?>

外部程序POST了一個(gè)變量catid=2那么你在程序中使用$_POST取到的值是2,而不是配置文件中所設(shè)置的1。

 

系統(tǒng)配置

系統(tǒng)配置文件位置:caches/configs/system.php

具體詳見該文件注釋

 

 

構(gòu)建模塊

開發(fā)流程

為你的phpcms創(chuàng)建一個(gè)模塊的一般開發(fā)流程是:

1.    創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表;(沒有數(shù)據(jù)庫操作可略過)

2.    創(chuàng)建模塊目錄

3.    創(chuàng)建模塊控制器類;

4.    創(chuàng)建模塊類與模塊函數(shù);(如果只是簡(jiǎn)單的模塊可以不必創(chuàng)建)

5.    創(chuàng)建模板文件;

6.    運(yùn)行和調(diào)試。

 

 

創(chuàng)建模塊

phpcms v9框架中的模塊,位于phpcms/modules目錄中 每一個(gè)目錄稱之為一個(gè)模塊

如果要?jiǎng)?chuàng)建一個(gè)模塊,只要在 phpcms/modules 目錄下創(chuàng)建文件夾并放入你的控制器類就可以了。

例如我要開發(fā)一個(gè)叫做test的模塊,那么首先在 phpcms/modules 目錄下創(chuàng)建文件夾,并將其命名為test。

test文件夾下通常有三個(gè)文件夾:

classes    為模塊類庫包

functions  為模塊函數(shù)庫包

templates  為模塊模板包 這里通常放置含有權(quán)限控制的控制器模板,也就是后臺(tái)模板。

 

 

如果您的模板有單獨(dú)的前臺(tái)模板,你需要在phpcms\templates\default下創(chuàng)建一個(gè)您的模塊目錄來放置前臺(tái)模板

"default"為你的風(fēng)格包名稱,我們默認(rèn)適用default

這里我們?cè)赿efault文件夾下創(chuàng)建名為test的文件夾存放模板

 

 

創(chuàng)建模塊控制器

在創(chuàng)建模塊中我們已經(jīng)創(chuàng)建好了一個(gè)名為“test”的模塊,接下來我們繼續(xù)為這個(gè)模塊添加兩個(gè)控制器類。

phpcms v9的控制器就是模塊的類文件,位于phpcms/modules/模塊/目錄下面。

類名成就是文件名+.php,例如一個(gè)名為mytest的控制器,那么他的命名為mytest.php即可。

控制器類默認(rèn)繼承系統(tǒng)的函數(shù)庫,可以直接使用??刂破黝惖念惷Q與控制器文件名必須相同。

 

 

控制器類文件包含兩種形式:

1.mytest.php 控制器,前臺(tái)瀏覽(不含權(quán)限控制)

/*

defined('IN_PHPCMS') or exit('No permission resources.');

class mytest {

    function __construct() {

    }

    public function init() {

        $myvar = 'hello world!';

        echo $myvar;

    }

    public function mylist() {

        $myvar = 'hello world!this is a example!';

        echo $myvar;

    }

}

*/

?>

這個(gè)控制器的url訪問方法前面已經(jīng)介紹過了

http://www./index.php?m=test&c=mytest

http://www./index.php?m=test&c=mytest&a=mylist

沒有填寫 “a” 的情況下,默認(rèn)調(diào)用init方法

 

 

2.mytest_admin.php 控制器,后臺(tái)管理(含權(quán)限控制)

后臺(tái)控制控制器需要加載admin模塊下的admin類,并繼承該類。

需要注意的是因?yàn)槟闾砑拥目刂破黝惱^承了其他的類,你要小心你控制器的方法名不要和該類中的方法名一樣了,否則會(huì)造成影響,具體請(qǐng)查看admin類中有哪些方法。

defined('IN_PHPCMS') or exit('No permission resources.');

pc_base::load_app_class('admin','admin',0);

class mytest_admin extends admin {

    public function __construct() {

    }

    public function init() {

        $myvar = 'oh,i am phpcmser';

        echo $myvar;

    }

}

?>

在控制器中增加模板調(diào)用

phpcms 可以實(shí)現(xiàn)完全的模板與程序分離,所以在我們的控制器程序中要加載模板,才可以更友好的顯示出來。

1.加載前臺(tái)模板

前臺(tái)模板文件在phpcms\templates\default\模塊名稱 目錄中,本示例也就在phpcms\templates\default\test中

加載模板方法如下:

include template('test', 'mytest', 'default');

其中 test為模塊名稱 mytest 為模板目錄下模板名稱,default為風(fēng)格名稱,默認(rèn)不填為defalut

在上面例子中如果要給mytest.php中init方法加載一個(gè)mytest的模板,如下

public function init() {

    $var = 'hello world!';

    include template('test', 'mytest', 'default');

}

這樣我們通過url訪問該方法的時(shí)候也就加載了對(duì)應(yīng)的模板。

2.加載后臺(tái)模板

后臺(tái)模板文件在phpcms\modules\模塊名稱\templates 目錄中,本示例也就在phpcms\modules\test\templates 中

加載模板方法如下:

include $this->admin_tpl('mytest_admin_list');

其中mytest_admin_list為phpcms\modules\test\templates中mytest_admin_list.tpl.php,注意:后臺(tái)模板必須以.tpl.php 作為后綴

在上面例子中如果要給mytest_admin.php中init方法加載一個(gè)mytest_admin_list的模板,如下

public function init() {

    $myvar = 'oh,i am phpcmser';

    include $this->admin_tpl('mytest_admin_list');

}

 

 

創(chuàng)建數(shù)據(jù)庫模型類

數(shù)據(jù)庫模型位于:phpcms/model/ 目錄下。

數(shù)據(jù)模型文件的命名規(guī)則建議為數(shù)據(jù)表名稱+'_model.class.php'

如果在我們的創(chuàng)建的模塊中我要使用一個(gè)數(shù)據(jù)庫"test",首先需要建立一個(gè)數(shù)據(jù)庫模型文件,文件名稱為'test_model.class.php'

內(nèi)容如下:

defined('IN_PHPCMS') or exit('No permission resources.');

pc_base::load_sys_class('model', '', 0);

class test_model extends model {

    public function __construct() {

        $this->db_config = pc_base::load_config('database');

        $this->db_setting = 'default';

        $this->table_name = 'test';

        parent::__construct();

    }

}

?>

注意:

1.數(shù)據(jù)庫模型類名稱必須與文件名稱相同;

2.$this->db_setting = 'default'為數(shù)據(jù)庫配置文件中配置數(shù)據(jù)庫鏈接池名稱,默認(rèn)為default,一般情況下不需要修改。

3.$this->table_name = 'test'為數(shù)據(jù)表名稱

 

 

這樣我們就建立好了一個(gè)數(shù)據(jù)庫模型類。

在模塊的控制器中使用

$this->db = pc_base::load_model('test_model');

來加載。

具體如下

/*

defined('IN_PHPCMS') or exit('No permission resources.');

class mytest {

    private $db;

    function __construct() {

        $this->db = pc_base::load_model('test_model');

    }

    public function init() {

        $result = $this->db->select();

        var_dump($result);

    }

}

*/

?>

其中$this->db中所支持的方法請(qǐng)參照phpcms/libs/classes/model.class.php中方法

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    日韩精品一级一区二区| 国产欧美日韩视频91| 少妇在线一区二区三区| 国产精品一区二区视频成人| 国产成人精品国产亚洲欧洲| 成人三级视频在线观看不卡 | 91偷拍与自偷拍精品| 色婷婷在线精品国自产拍| 日韩不卡一区二区在线| 日韩欧美高清国内精品| 日本免费一区二区三女| 欧美日韩乱码一区二区三区| 日韩成人中文字幕在线一区| 色婷婷激情五月天丁香| 日本美国三级黄色aa| 中文字幕精品人妻一区| 1024你懂的在线视频| 亚洲a码一区二区三区| 精品少妇人妻一区二区三区| 在线中文字幕亚洲欧美一区| 欧美成人欧美一级乱黄| 91亚洲精品亚洲国产| 国产三级欧美三级日韩三级| 欧美黄色黑人一区二区| 成在线人免费视频一区二区| 国产av一二三区在线观看| 国产成人精品一区在线观看| 微拍一区二区三区福利| 91久久精品国产一区蜜臀| 神马午夜福利一区二区| 中文字幕一区二区免费| 国产盗摄精品一区二区视频| 亚洲中文字幕亲近伦片| 国内午夜精品视频在线观看| 亚洲一区二区三区四区| 97人妻精品一区二区三区免| 日韩三级黄色大片免费观看| 亚洲欧美中文字幕精品| 中文字幕一区二区熟女| 欧美野外在线刺激在线观看| 美女被后入福利在线观看|