PHPCMS二次開發教程(轉)

来源:http://www.cnblogs.com/luhouxiang/archive/2016/06/27/5621808.html
-Advertisement-
Play Games

轉自:http://www.cnblogs.com/semcoding/p/3347600.html PHPCMS V9 結構設計 根目錄 |–api 結構文件目錄 |–caches 緩存文件目錄 |– configs 系統配置文件目錄 |– caches_* 系統緩存目錄 |–phpcms php... ...


轉自:http://www.cnblogs.com/semcoding/p/3347600.html

PHPCMS V9 結構設計

根目錄
|–api  結構文件目錄
|–caches 緩存文件目錄
   |– configs 系統配置文件目錄
   |– caches_* 系統緩存目錄
|–phpcms  phpcms框架主目錄
   |– languages 框架語言包目錄
   |– libs 框架主類庫、主函數庫目錄
   |– model 框架資料庫模型目錄
   |– modules 框架模塊目錄
   |– templates 框架系統模板目錄
|–phpsso_server  phpsso主目錄
|–statics  系統附件包
   | – css 系統css包
   | – images 系統圖片包
   | – js 系統js包
|–index.php  程式主入口

PHPCMS V9 核心文件說明

模塊與控制器

模塊:

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

訪問content模塊示例:http://www.yourname.com/index.php?m=content

控制器:

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

二次開發技巧

如果要對已存在的控制器進行二次開發,為了方便升級不建議直接對內核文件直接修改該,您可以通過“MY_*.php”的形式進行二次開發。

例如您要對改phpcms/mood/index.php進行二次開發。您可以在與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 資料庫配置文件
  • system.php 系統配置文件
  • route.php 路由配置文件

調用方法

如調用系統配置中的web_path:

pc_base::load_config('system', web_path ');

CMS入口文件:

PHPCMS是採用MVC設計模式開發,基於模塊和操作的方式進行訪問,採用單一入口模式進行項目部署和訪問,無論訪問任何一個模塊或者功能,只有一個統一的入口。

入口程式是在前期處理用戶請求的引導程式。它是唯一一個可以被最終用戶可以直接請求運行的。

文件路徑:根目錄/index.php

<?php
	define('PHPCMS_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR);
	include PHPCMS_PATH.'/phpcms/base.php';
	pc_base::creat_app();
?>

這段代碼首先載入了 phpcms 框架的引導文件 base.php,然後它根據指定的配置文件建立了一個 Web 應用實例並運行。

PHPCMS框架入口文件:

文件路徑:根目錄/phpcms/base.php 代碼片段如下:

<?php
	define('IN_PHPCMS', true);
	define('PC_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR);
	if(!defined('PHPCMS_PATH')) define('PHPCMS_PATH', PC_PATH.'..'.DIRECTORY_SEPARATOR);
	define('CACHE_PATH', PHPCMS_PATH.'caches'.DIRECTORY_SEPARATOR);
……
?>

該文件為框架入口文件,包含實例化系統/模塊類方法,調用系統/模塊方法,系統常用常量等。如:

	pc_base::load_model(‘*_model’) 載入資料庫模型 pc_base::load_sys_class(‘classname’) 實例化系統類
	pc_base::load_app_class(‘classname’,’admin’) 實例化模塊類
	pc_base::load_sys_func (‘funcfile’) 調用系統函數庫

全局函數文件:

文件路徑:根目錄/phpcms/libs/functions/global.func.php 代碼片段如下:

<?php
	function new_addslashes($string){
	if(!is_array($string)) return addslashes($string);
	foreach($string as $key => $val) $string[$key] = new_addslashes($val);
	return $string;
	}
	……
?>

該文件中的函數,為全系統基礎函數,可以在系統中直接調用。

二次開發技巧:

如果需要增加自己的全局函數,可根據需要增加到/phpcms/libs/functions/global.func.php/extention.func.php中,不會影響升級

數據模型基類:

文件路徑:根目錄/phpcms/libs/classes/model.class.php 代碼片段如下:

<?php
	pc_base::load_sys_class('db_factory', '', 0);
	class model {  //資料庫配置
	protected $db_config = ''; //資料庫連接
	protected $db = ''; //調用資料庫的配置項
	protected $db_setting = 'default'; //數據表名
	protected $table_name = ''; //表首碼
	public $db_tablepre = '';
	……
?>

載入數據模型後,可以的資料庫該類中方法進行資料庫操作。

表單調用類:

文件路徑:根目錄/phpcms/libs/classes/form.class.php。 代碼片段如下:

<?php
	class form {
	//編輯器調用
	public static function editor($textareaid = 'content', $toolbar = 'basic', $module = '', $catid = '', $color = '', $allowupload = 0, $allowbrowser = 1,$alowuploadexts = '',$height = 200,$disabled_page = 0) {
	} 
	//圖片上傳調用
	public static function images($name, $id = '', $value = '', $moudle='', $catid='', $size = 50, $class = '', $ext = '', $alowexts = '',$thumb_setting = array(),$watermark_setting = 0 ) {
	}
	……
?>

通過實例化該類可以,調用在程式中調用編輯器、表單上傳、日期選擇、欄目結構等表單。 實例化方法:pc_base::load_sys_class('form', '', 0);

模板解析緩存類:

文件路徑:根目錄/phpcms/libs/classes/template_cache.class.php 。 代碼片段如下:

<?php
	final class template_cache {
	public function template_compile($module, $template, $style = ‘default’)     {
	$tplfile = $_tpl = PC_PATH.'templates'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html'; 
	……
	?>

該類作用為解析模板,解析模板及更新模板緩存

PHPCMS V9 二次開發

PHPCMS URL訪問:

PHPCMS是採用MVC設計模式開發,基於模塊和操作的方式進行訪問,採用單一入口模式進行項目部署和訪問,無論訪問任何一個模塊或者功能,只有一個統一的入口。

參數名稱 描述 位置 備註

  • M 模型/模塊名稱 phpcms/modules中模塊目錄名稱 必須
  • C 控制器名稱 phpcms/modules/模塊/*.php 文件名稱 必須
  • A 事件名稱 phpcms/modules/模塊/*.php 中方法名稱

模塊訪問方法[示例]:

二次開發命名規範

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

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

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

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

二次開發開發流程

創建資料庫模型類

資料庫模型位於: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();
  }
 }
?>

資料庫模型類名稱必須與文件名稱相同;

	$this->db_setting = 'default'為資料庫配置文件中配置資料庫鏈接池名稱,預設為default,一般情況下不需要修改。
	$this->table_name = ‘test’為數據表名稱

創建模塊

如果要創建一個模塊,只要在 phpcms/modules 目錄下創建文件夾並放入你的控制器類就可以了。

例如要開發一個叫做test的模塊,那麼首先在phpcms/modules 目錄下創建文件夾,並將其命名為test。模塊的標準結構通常是這樣的。

如果您的模板有單獨的前臺模板,你需要在phpcms/templates/default下創建一個您的模塊目錄來放置前臺模板,"default"為你的風格包名稱,我們預設適用default

訪問test模塊示例:http://www.yourname.com/index.php?m=test

創建模塊控制器類

為test模塊增加一個名為myest的控制器 文件路徑:根目錄/phpcms/modules/test/mytest.php。 代碼片段如下:

<?php
  defined('IN_PHPCMS') or exit('No permission resources.');
    class mytest {
      function __construct() {
      }
      public function init() {
        $var = 'hello world!';
        echo $myvar;
      }
      public function mylist() {
        $var = 'hello world!this is a example!';
        echo $myvar;
      }
  }
?>

常用操作列表(1)

1.調用資料庫模型

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

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

2.載入系統類

$http = pc_base::load_sys_class('http'); //實例化http類
pc_base::load_sys_class('format', '', 0); //調用form類,不進行實例化操作3.載入系統函

3.載入系統函數庫

pc_base::load_sys_func('mail'); //調用mail函數包

4. 載入模塊類

$test = pc_base::load_sys_class(‘classname‘,’test’); //實例化test模塊下 classname類

5.載入模塊函數庫

pc_base::load_sys_func(‘global‘,’test’); //調用test模塊的global函數包

常用操作列表(2)

6.載入前臺模板

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

7.載入後臺模板

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

8.許可權控制

後臺控制控制器需要載入admin模塊下的admin類,並繼承該類

<?php
	defined('IN_PHPCMS') or exit('No permission resources.');
	pc_base::load_app_class('admin','admin',0);
	class mytest_admin extends admin { 
	//這個控制器需要登錄後臺才可以訪問 }
	?>

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我的個人博客站在使用百度富文本編輯器UEditor修改文章時,遇到了一些問題,(不知是bug,還是我沒有配置好)。但總算找到瞭解決方法,在此記錄下來。 小站首頁文章列表顯示為(顯示去除HTML標簽後的前600個字元): 具體在 www.zynblog.com 遇到的問題: 正常來講,進入文章修改頁, ...
  • 在這一個練習中,我們要使用帶返回值的方法。如果一個方法帶返回值,那麼它的形式是這樣的。 定義一個帶返回值的C#方法 static 返回類型 方法名字 (參數類型 參數1的名字,參數類型 參數2的名字) { 你的代碼 return 返回值 } static: 先不用管是什麼意思。在沒有講它的含義之前, ...
  • 最近寫了一個SOA服務,開始覺得別人拿到我的服務地址,然後直接添加引用就可以使用了,結果"大牛"告知不行。 讓我寫一個SOAP調用服務的樣例,我有點愣了,因為沒做過這方面的,於是搞到了一個Demo,然後學習了下。 學習如下: 在.Net中有一個對象:WebRequest它可以在後臺直接請求服務的方法 ...
  • 大家先來看看表單提交的幾種方式: 1、<!--通用提交按鈕--> <input type="submit" value="提交"> 2、<!--自定義提交按鈕--> <button type="Submit">提交</button> 3、<!--圖像按鈕--> <input type="image" ...
  • 函數最初的用處 大家剛學編程的時候,一定還記得為什麼要用函數。那就是把重覆的代碼歸納到一個函數中多次利用。這點毋庸置疑,大家也用的很熟了,但是除了這個還有什麼改進空間嗎?答案肯定是有的! PS.本文不討論面向對象、不討論設計模式,只是把視線聚焦在 Class 內部的函數上。 出現什麼問題了? 大家都 ...
  • ...
  • 本篇將詳細介紹Python 類的成員、成員修飾符、類的特殊成員。還有兩個類的綜合運用實例。 環境為:python3.5.1 類的成員 類的成員包括三大類:欄位、方法和屬性 最重要的是:所有成員中,只有普通欄位的內容保存在對象中,即:根據此類創建了多少對象,在記憶體中就有多少個普通欄位。而其他的成員,則 ...
  • 本篇主要是來分享從頭開始搭建一個dubbo+zookeeper平臺的過程,其中會簡要介紹下dubbo服務的作用。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...