摘要:YzmCMS是采用MVC設(shè)計(jì)模式開發(fā),基于模塊和操作的方式進(jìn)行訪問,采用單一入口模式進(jìn)行項(xiàng)目部署和訪問,無論訪問任何一個(gè)模塊或者功能,只有一...
YzmCMS是采用MVC設(shè)計(jì)模式開發(fā),基于模塊和操作的方式進(jìn)行訪問,采用單一入口模式進(jìn)行項(xiàng)目部署和訪問,無論訪問任何一個(gè)模塊或者功能,只有一個(gè)統(tǒng)一的入口。
如果您在二次開發(fā),建議開啟APP_DEBUG,在根目錄下index.php文件的12行。
一、基本目錄結(jié)構(gòu)
..../ 根目錄 ..../application 全站應(yīng)用目錄 ..../cache 緩存目錄[必須可寫入] ..../common 全站公共目錄[必須可寫入] ..../uploads 默認(rèn)上傳目錄[必須可寫入] ..../yzmphp 程序核心目錄[不建議修改] ..../index.php 程序單一入口文件 ..../.htaccess Apache偽靜態(tài)文件[如您不是Apache軟件,可根據(jù)此規(guī)則重寫偽靜態(tài)] ..../nginx.conf Nginx下偽靜態(tài)文件
application目錄下每一個(gè)文件夾都是一個(gè)單獨(dú)的模塊(module)
每個(gè)模塊下都有四個(gè)文件夾(common、controller、model、view)一個(gè)文件(index.html),這幾個(gè)文件時(shí)必須有的,新建模塊時(shí)也一定要有這幾個(gè)文件。
以admin模塊舉例:
application ---admin ------common(模塊公共目錄) ------controller(模塊控制器目錄) ------model(模塊模型目錄) ------view(模塊視圖目錄)
二、創(chuàng)建一個(gè)新控制器
controller目錄中的每一個(gè).php文件都是一個(gè)控制器,控制器名稱都以.class.php后綴結(jié)尾。
新建一個(gè)控制器:test
文件名稱:test.class.php,控制器類的類名稱與控制器文件名必須相同
<?php //這兩行必須要,后臺權(quán)限控制 defined('IN_YZMPHP') or exit('Access Denied'); yzm_base ::load_controller('common', 'admin', 0); //這兩行必須要,后臺權(quán)限控制 class test extends common { //訪問該控制器的該方法的URL: //http://test.yzmcms.com/admin/test/init public function init() { echo '程序默認(rèn)加載控制器中的init方法'; } //訪問該控制器的該方法的URL: //http://test.yzmcms.com/admin/test/mytest public function mytest() { echo '這個(gè)是mytest方法'; } }
URL地址說明:
你的網(wǎng)址/模塊名稱/控制器名稱/方法名稱
//加載其他控制器 如:yzm_base ::load_controller('common', 'admin', 0); 說明:yzm_base ::load_controller('控制器名稱', '模塊名稱', 是否初始化); //加載系統(tǒng)類 如yzm_base ::load_sys_class('page','',0); 說明yzm_base ::load_sys_class('類名稱','擴(kuò)展地址',是否初始化); 如果初始化,返回的是一個(gè)類的實(shí)例化對象,否則只是加載該類。
三、常見方法說明
本系統(tǒng)中最常用的三種方法:D()方法、 M()方法、 U()方法、
D方法
D是data 的首字母,參數(shù)為一個(gè)表名稱,返回的是一個(gè)數(shù)據(jù)表對象(在YzmCMS3.0以下版本中是M方法)
//實(shí)例化一個(gè)數(shù)據(jù)表對象,只傳入表名即可,以下所有操作表示在對test表進(jìn)行操作 $db = D('test'); //添加內(nèi)容[成功:返回自動增長的ID,失敗:false] //$db->insert(數(shù)組); //$db->insert(array('name'=>'姓名','sex'=>'男')); //$db->insert(array('name'=>'姓名','sex'=>'男'), true); //第二個(gè)參數(shù)選填 如果為真值 則開啟實(shí)體轉(zhuǎn)義 //刪除內(nèi)容[返回影響行數(shù)] //$db->delete(array('id>'=>'15')); //$db->delete(array(3,4,5), true); //第二個(gè)參數(shù)存在時(shí),第一個(gè)參數(shù)為索引數(shù)組,批量刪除多個(gè) //$db->delete(array('1'=>1)); //刪除所有數(shù)據(jù) //更新內(nèi)容[返回影響行數(shù)] //$db->update(array('name'=>'姓名','sex'=>'男123'),array('id'=>'10')); //$db->update(array('name'=>'姓名','sex'=>'aaa'),array('id'=>'10'),'1'); //第三個(gè)參數(shù)選填 如果存在,并為真值 則開啟實(shí)體轉(zhuǎn)義 //$db->update('click=click+1',array('id'=>"1")); //第一個(gè)參數(shù)不是數(shù)組,類似于更新文章點(diǎn)擊數(shù)的功能 //查詢內(nèi)容 select方式[返回二維數(shù)組] //$result = $db->select(); //$result = $db->field('uname,id')->select(); //$result = $db->where(array('name'=>'%php%'))->select(); //like 查詢 //$result = $db->join('`yzmcms_admin` ON yzmcms_admin.id=yzmcms_admintype.id')->where(array('id'=>'1'))->select(); //join 聯(lián)合查詢 //$result = $db->where("typeid in (1,2)")->select(); //SQL : select * from user where typeid in (1,2) //$result = $db->where(array('name'=>'%php%'))->limit('0,5')->select(); //like 查詢 //$result = $db->where(array('name'=>'%php%'))->limit('0,5')->order('id desc')->select(); //like 查詢 //$result = $db->where(array('sex'=>'男'))->limit('0,5')->select(); //$result = $db->field('uname,id')->where(array('sex'=>'男'))->limit('0,3')->order('id desc')->select(); //$result = $db->field("sex ,count(sex),avg(height),sum(height) ")->group("sex")->having(" avg(height) >160")->select(); //$result = $db->field("sex ,count(sex) as '總個(gè)數(shù)',avg(height) as '平均身高',sum(height) as '總身高' ")->group('sex')->select(); //$result = $db->field("sex ,count(sex) as '總個(gè)數(shù)',avg(height) as '平均身高',sum(height) as '總身高' ")->group("sex")->having(" 平均身高 >160")->select(); //條件大于寫法 //$res = $db->where(array('id > '=>21))->select(); //同理,不等于或者小于如下 //$res = $db->where(array('id != '=>21))->select(); //P($res); //查詢內(nèi)容 find方式[返回一維數(shù)組] //$result = $db->find(); //$result = $db->field('uname,id')->find(); //$result = $db->where("typeid in (1,2)")->find(); //SQL : select * from user where typeid in (1,2) limit 1 //$result = $db->field('id,name,height')->where(array('sex'=>'男'))->find(); //$result = $db->join('`yzmcms_admin` ON yzmcms_admin.id=yzmcms_admintype.id')->where(array('id'=>'1'))->find(); //join 聯(lián)合查詢 //$result = $db->field('uname,id')->where(array('sex'=>'男'))->order('id desc')->find(); //查詢記錄數(shù)[返回記錄行數(shù)] //$result = $db->total(); //$result = $db->where(array('age>'=>'12'))->total(); //$result = $db->join('`yzmcms_admin` ON yzmcms_admin.id=yzmcms_admintype.id')->where(array('age>'=>'12'))->total(); //自定義執(zhí)行SQL語句 [yzmcms 代表表前綴] //$db->query("select * from yzmcms_admin"); //獲取一維數(shù)組,一條結(jié)果 //$db->fetch_array($db->query("select * from yzmcms_admin")); //獲取二維數(shù)組 //$db->fetch_all($db->query("select * from yzmcms_admin")); //用于調(diào)試程序,輸入最后一條SQL語句 //$db->lastsql();
YzmCMS 3.8版本新增的數(shù)據(jù)庫操作
// 新增 one 方法,用來查詢某個(gè)字段的值 [返回值為字符串類型] $res = D('admin')->field('rolename')->where(array('adminid'=>1))->one(); P($res); //運(yùn)行結(jié)果 string(15) "超級管理員" $res = D('article')->field('userid')->where(array('id'=>1))->one(); P($res); //運(yùn)行結(jié)果 string(1) "1" //新增 alias 別名方法,用于給表起別名 $admin = D('admin'); $res = $admin->alias('a') ->field('a.adminid,a.adminname,a.rolename,b.address,b.loginip,b.logintime') ->where(array('loginresult'=>1)) ->join('yzmcms_admin_login_log b ON a.adminname=b.adminname', 'left') ->limit(5) ->select(); $admin->lastsql(); //最后生成的SQL為: SELECT a.adminid,a.adminname,a.rolename,b.address,b.loginip,b.logintime FROM yzm_admin a LEFT JOIN yzm_admin_login_log b ON a.adminname=b.adminname WHERE loginresult=1 LIMIT 5 // 注意: join里的 “yzmcms_” 可表示任意的表前綴,無需修改 // 新增 事務(wù)處理 $affair = D('affair'); $affair->start_transaction(); //開啟事務(wù) // 模擬業(yè)務(wù)流程,執(zhí)行插入和更新操作 $res = $affair->insert(array('name'=>'袁志蒙','password'=>'test')); $res2 = D('test')->update(array('name'=>'yzmcms','password'=>'123456'), array('id'=>1)); if($res && $res2){ $affair->commit(); //提交事務(wù) }else{ $affair->rollback(); //事務(wù)回滾 }
YzmCMS 5.7版本新增的數(shù)據(jù)庫操作
// insert方法新增第4個(gè)參數(shù):replace // 語法:insert($data, $filter = false, $primary = true, $replace = false) // $data 要增加的數(shù)據(jù),參數(shù)為數(shù)組 // $filter 是否開啟實(shí)體轉(zhuǎn)義 // $primary 是否過濾主鍵 // $replace 是否為replace // 返回值: 成功:返回自動增長的ID,失敗:false $data = array('title'=>'title', 'content'=>'content'); D('test')->insert($data, true); // 新增批量插入方法:insert_all // 語法:insert_all($data, $filter = false, $replace = false) // $data 要增加的數(shù)據(jù),參數(shù)為二維數(shù)組 // $filter 是否開啟實(shí)體轉(zhuǎn)義 // $replace 是否為replace $data = array( array('title'=>'title1', 'content'=>'content1'), array('title'=>'title2', 'content'=>'content2'), array('title'=>'title3', 'content'=>'content3'), ); $res = D('test')->insert_all($data, true);
M方法
M是model的首字母,參數(shù)為一個(gè)model類名稱,返回的是一個(gè)model類對象,意為加載并實(shí)例化本模塊下的model類
U方法
U是URL的首字母,返回的是一個(gè)URL字符串,意為生成URL地址
// 生成當(dāng)前模塊下的當(dāng)前控制器的add方法URL地址 如:U('add'); // 生成當(dāng)前模塊下的test控制器的add方法URL地址 如:U('test/add') ; // 生成admin模塊下的test控制器的add方法URL地址 如:U('admin/test/add') 說明:U('模塊名稱/控制器名稱/方法名稱') U方法可以有第二個(gè)參數(shù),即可傳參 如:U('admin/test/init',array('id'=>1,'status'=>1))和U('admin/test/init','id=1&status=1')是等效的
四、二次開發(fā)原則
YzmCMS作者開發(fā)時(shí)比較注重代碼簡潔、系統(tǒng)高效等特點(diǎn),所以您在使用YzmCMS做二次開發(fā)中也應(yīng)該遵循以下開發(fā)原則:
1.新增功能盡量不要修改系統(tǒng)原文件,建議以模塊插件形式開發(fā)。
2.用戶自定義全局函數(shù)寫到“common/function/extention.func.php”文件中,不影響系統(tǒng)升級。
3.方法名稱和變量名稱都以小寫字符命名。
4.類文件都以小寫字符命名,并以.class.php后綴結(jié)尾。
5.所有方法盡可能寫上注釋等。
網(wǎng)友評論:
不錯(cuò)
2019-07-13 08:46:56 回復(fù)
網(wǎng)友評論:
辛苦了,博主
2017-04-02 19:51:56 回復(fù)