phpcms二次開發


文件目錄結構
根目錄
|  –  api  接口文件目錄
|  –  caches 緩存文件目錄
       |  – configs 系統配置文件目錄
       |  – caches_* 系統緩存目錄
|  –  phpcms  phpcms框架主目錄
       |  – languages 框架語言包目錄
       |  – libs 框架主類庫、主函數庫目錄
       |  – model 框架數據庫模型目錄
       |  – modules 框架模塊目錄
       |  – templates 框架系統模板目錄
|  –  phpsso_server  phpsso主目錄
|  –  statics  系統附件包
       |  – css 系統css包
       |  – images 系統圖片包
       |  – js 系統js包
|  –  uploadfile  網站附件目錄
|  –  admin.php  后台管理入口
|  –  index.php  程序主入口
|  –  crossdomain.xml  FLASH跨域傳輸文件
|  –  robots.txt 搜索引擎蜘蛛限制配置文件
|  –  favicon.ico  系統icon圖標



URL訪問
PHPCMS是采用MVC設計模式開發,基於模塊和操作的方式進行訪問,采用單一入口模式進行項目部署和訪問,無論訪問任何一個模塊或者功能,只有一個統一的入口。
參數名稱    描述    位置    備注
m    模型/模塊名稱    phpcms/modules中模塊目錄名稱    必須
c    控制器名稱    phpcms/modules/模塊/*.php 文件名稱    必須
a    事件名稱        phpcms/modules/模塊/*.php 文件中方法名稱

模塊訪問方法[示例]:
http://yourdomain.com/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 為其他參數 與正常get傳遞參數形式相同

如果我們訪問您的域名 如:
http://www.yourdomain.com/index.php
phpcms默認路由會定位到content模塊的index控制器中的init操作,因為系統在沒有指定模塊和控制器的時候,會執行默認的模塊和操作。
因此下面的URL的結果是相同的:系統還支持URL路由的功能,這些都能夠帶來其他的url訪問效果。
http://www.yourdomain.com/index.php?m=content&c=index&a=init



系統類庫與函數調用
1.系統類庫位於系統的phpcms/libs/classes目錄下面,函數庫文件名為*.class.php
2.系統函數庫位於系統的phpcms/libs/functions目錄下面,函數庫文件名為*.func.php,其中global.func.php為框架中默認加載,global.func.php中函數可直接使用
系統類庫調用
pc_base::load_sys_class('類名','擴展地址','是否初始化');
示例:
$http = pc_base::load_sys_class('http'); //實例化http類
pc_base::load_sys_class('format', '', 0); //調用form類,不進行實例化操作
系統函數庫調用
pc_base::load_sys_func('函數庫名');
示例:
pc_base::load_sys_func('mail'); 調用mail函數包



模塊
phpcms v9框架中的模塊,位於phpcms/modules目錄中 每一個目錄稱之為一個模塊。即url訪問中的m
示例:
http://www.yourname.com/index.php?m=content
那么您訪問的就是phpcms/modules/content 這個模塊。
如果創建一個模塊,只要在 phpcms/modules 目錄下創建文件夾並放入你的控制器類就可以了



控制器
phpcms v9的控制器就是模塊的類文件,位於phpcms/modules/模塊/目錄下面。類名成就是文件名+.php,例如一個名為mytest的控制器,那么他的命名為mytest.php即可。
控制器類默認繼承系統的函數庫,可以直接使用。控制器類的類名稱與控制器文件名必須相同
如果您創建了一個mytest.php在test模塊下,那么我們在瀏覽器里面輸入URL:
http://www.yourname.com/index.php?m=test&c=mytest

下面是一個控制器類的基本格式,在構建模塊部分會具體講解
<?php
defined('IN_PHPCMS') or exit('No permission resources.');
class mytest {
    function __construct() {
    }
    public function init() {
        echo 'hellp phpcms v9,my name is defalut action';
    }
}
?>
如果你添加的控制器類繼承了其他的類,你要小心你的方法名不要和那個類中的方法名一樣了,否則你的方法會覆蓋原有的。



命名規范
PHPCMS其自身的一定規范。下面是使用PHPCMS做二次開發中應該遵循的命名規范:
類文件需要以.class.php為后綴(這里是指的phpcms的系統類庫文件和模塊中的類庫文件,第三方引入的不做要求),例如http.class.php。
函數文件需要以.func.php為后綴(第三方引入的不做要求),例如mail.func.php。
類名和文件名一致,例如 phpcmsapp類的文件命名是phpcmsapp.class.php。
數據模型需要以“數據表名稱_model.class.php”為形式,類名稱與文件名必須相同。



配置文件調用
配置文件配置在caches/configs/目錄下。
配置文件調用:使用 load_config方法
$upload_url = pc_base::load_config('配置文件','要獲取的配置鍵','默認配置。當獲取配置項目失敗時該值發生作用','是否強制重新加載');
示例:
調用系統配置中的附件路徑
$upload_url = pc_base::load_config('system','upload_url');



二次開發技巧
1.如果要對已存在的控制器進行二次開發,為了方便升級不建議直接對內核文件直接修改該,您可以通過"MY_*.php"的形式進行二次開發。
例如您要對改phpcms/mood/index.php進行二次開發。您可以在與index.php同級的目錄下建立"MY_index.php"
MY_index.php代碼如下
<?php
class MY_index extends index{
    function __construct() {
        parent::__construct();
    }
    //……your code
 }
 ?>
這樣當您通過url訪問index控制器的時候,系統會默認指向MY_index.php 並且原文件的方法將被繼承,可以直接使用。



數據庫配置
數據庫配置文件位置:caches/configs/database.php
我們打開這個配置文件,加入我們的數據庫配置信息。數據庫配置信息為二維數組結構,默認為default,可以根據default結構配置多個數據庫鏈接(如:extended_1)
<?php
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
    ),
);
?>
根據您的數據庫連接信息修改上面的配置內容,修改完成后,保存該數據庫配置文件。



路由配置
路由配置文件位置:caches/configs/route.php
我們打開這個配置文件,加入我們的路由配置信息。路由配置信息為二維數組結構,默認為default。
路由配置文件內容是這樣的:
<?php
return array(
    'default'=>array('m'=>'admin', 'c'=>'index', 'a'=>'init'),
    'test.youname.com'=>array('m'=>'test', 'c'=>'index', 'a'=>'init'),
);
?>
data為一個二維數組,可設置POST和GET的默認參數。POST和GET分別對應PHP中的$_POST和$_GET兩個超全局變量。
如下面的例子,在程序中您可以使用$_POST['catid']來得到data下面POST中的數組的值。
data中的所設置的參數等級比較低。如果外部程序有提交相同的名字的變量,將會覆蓋配置文件中所設置的值。
如:
<?php
return array(
    'default'=>array(
        'm'=>'phpcms',
        'c'=>'index',
        'a'=>'init',
        'data'=>array(
            'POST'=>array(
                'catid'=>1
            ),
            'GET'=>array(
                'contentid'=>1
            )
        )
    )
)
?>
外部程序POST了一個變量catid=2那么你在程序中使用$_POST取到的值是2,而不是配置文件中所設置的1。



系統配置
系統配置文件位置:caches/configs/system.php
具體詳見該文件注釋



構建模塊
開發流程
為你的phpcms創建一個模塊的一般開發流程是:
1.    創建數據庫和數據表;(沒有數據庫操作可略過)
2.    創建模塊目錄
3.    創建模塊控制器類;
4.    創建模塊類與模塊函數;(如果只是簡單的模塊可以不必創建)
5.    創建模板文件;
6.    運行和調試。

創建模塊
phpcms v9框架中的模塊,位於phpcms/modules目錄中 每一個目錄稱之為一個模塊
如果要創建一個模塊,只要在 phpcms/modules 目錄下創建文件夾並放入你的控制器類就可以了。
例如我要開發一個叫做test的模塊,那么首先在 phpcms/modules 目錄下創建文件夾,並將其命名為test。
test文件夾下通常有三個文件夾:
classes    為模塊類庫包
functions  為模塊函數庫包
templates  為模塊模板包 這里通常放置含有權限控制的控制器模板,也就是后台模板。

如果您的模板有單獨的前台模板,你需要在phpcms\templates\default下創建一個您的模塊目錄來放置前台模板
"default"為你的風格包名稱,我們默認適用default
這里我們在default文件夾下創建名為test的文件夾存放模板



創建模塊控制器
在創建模塊中我們已經創建好了一個名為“test”的模塊,接下來我們繼續為這個模塊添加兩個控制器類。
phpcms v9的控制器就是模塊的類文件,位於phpcms/modules/模塊/目錄下面。
類名成就是文件名+.php,例如一個名為mytest的控制器,那么他的命名為mytest.php即可。
控制器類默認繼承系統的函數庫,可以直接使用。控制器類的類名稱與控制器文件名必須相同。

控制器類文件包含兩種形式:
1.mytest.php 控制器,前台瀏覽(不含權限控制)
<?php
/*
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;
    }
}
*/
?>
這個控制器的url訪問方法前面已經介紹過了
http://www.yourname.com/index.php?m=test&c=mytest
http://www.yourname.com/index.php?m=test&c=mytest&a=mylist
沒有填寫 “a” 的情況下,默認調用init方法

2.mytest_admin.php 控制器,后台管理(含權限控制)
后台控制控制器需要加載admin模塊下的admin類,並繼承該類。
需要注意的是因為你添加的控制器類繼承了其他的類,你要小心你控制器的方法名不要和該類中的方法名一樣了,否則會造成影響,具體請查看admin類中有哪些方法。
<?php
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;
    }
}
?>
在控制器中增加模板調用
phpcms 可以實現完全的模板與程序分離,所以在我們的控制器程序中要加載模板,才可以更友好的顯示出來。
1.加載前台模板
前台模板文件在phpcms\templates\default\模塊名稱 目錄中,本示例也就在phpcms\templates\default\test中
加載模板方法如下:
include template('test', 'mytest', 'default');
其中 test為模塊名稱 mytest 為模板目錄下模板名稱,default為風格名稱,默認不填為defalut
在上面例子中如果要給mytest.php中init方法加載一個mytest的模板,如下
public function init() {
    $var = 'hello world!';
    include template('test', 'mytest', 'default');
}
這樣我們通過url訪問該方法的時候也就加載了對應的模板。
2.加載后台模板
后台模板文件在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,注意:后台模板必須以.tpl.php 作為后綴
在上面例子中如果要給mytest_admin.php中init方法加載一個mytest_admin_list的模板,如下
public function init() {
    $myvar = 'oh,i am phpcmser';
    include $this->admin_tpl('mytest_admin_list');
}



創建數據庫模型類
數據庫模型位於:phpcms/model/ 目錄下。
數據模型文件的命名規則建議為數據表名稱+'_model.class.php'
如果在我們的創建的模塊中我要使用一個數據庫"test",首先需要建立一個數據庫模型文件,文件名稱為'test_model.class.php'
內容如下:
<?php
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.數據庫模型類名稱必須與文件名稱相同;
2.$this->db_setting = 'default'為數據庫配置文件中配置數據庫鏈接池名稱,默認為default,一般情況下不需要修改。
3.$this->table_name = 'test'為數據表名稱

這樣我們就建立好了一個數據庫模型類。
在模塊的控制器中使用
$this->db = pc_base::load_model('test_model');
來加載。
具體如下
<?php
/*
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中所支持的方法請參照phpcms/libs/classes/model.class.php中方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM