校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 網(wǎng)站建設(shè) > 建站知識 > DedeCMS系統(tǒng)配置參數(shù)功能和運行分析

DedeCMS系統(tǒng)配置參數(shù)功能和運行分析

POST TIME:2020-04-11 21:14

本教程主要分析講解dedecms系統(tǒng)基本參數(shù)功能是如何實現(xiàn)的,如何存在到數(shù)據(jù),程序是如何執(zhí)行,具體某個配置這里不講,因為比較簡單,在其它教程里講解。簡言之,這個教程以分析DedeCMS系統(tǒng)配置參數(shù)功能的php程序、模板運用等內(nèi)容。

進入到Dedecms系統(tǒng)配置參數(shù)界面,如下圖所示,這個圖只截取基本一部分。

這個界面所對應(yīng)的php程序文件是http://www.dedebase.com/dede/sys_info.php,即sys_info.php,這個php文件,對應(yīng)的模板文件是sys_info.htm,以后我們分析某一功能首先要找出,那一功能對應(yīng)原php程序和模板。今天就分析織夢系統(tǒng)配置參數(shù)下面每個功能的實現(xiàn)和運行,這樣說有可能不是清夢,我們一個功能一個功能的分析。

首先,我們目標(biāo)是實現(xiàn)在“添加新變量”前面加上一個對應(yīng)的欄目選項,即如下圖所示位置。

要實現(xiàn)這個功能,首先就要找到這個欄目,我們打開文件sys_info.htm,在這個模板文件中好像沒有明顯的這一行信息,我們仔細(xì)找一下,找到如下一段php代碼。

<tr>
<td height="24" bgcolor="#ffffff" align="center">
<?php
$ds = file(DEDEADMIN.'/inc/configgroup.txt');//每行作為一個單元存放在數(shù)組中。
$totalGroup = count($ds);//統(tǒng)計數(shù)組個數(shù)。
$i = 0;
foreach($ds as $dl)
{
$dl = trim($dl);
if(empty($dl)) continue;
$dls = explode(',',$dl);//用逗號分隔字符串,分隔后存放在數(shù)組$dls里面。
$i++;
if($i>1) echo " | <a href='javascript:ShowConfig($i,$totalGroup)'>{$dls[1]}</a> ";
else{
echo " <a href='javascript:ShowConfig($i,$totalGroup)'>{$dls[1]}</a> ";
}
}
?>
| <a href="#" onClick="ShowHide('addvar')">添加新變量</a></td>
</tr>

這好像與我們平時看到的織夢前臺模板有點矛盾,一般的前臺模板(路徑是templets/default)文件不一樣,不一樣在在前臺模板文件里面,看不到php程序,只有標(biāo)簽,沒有錯,實際上在前臺模板里面可以應(yīng)用php文件,但不是直接應(yīng)用,而是用織夢標(biāo)簽開始與結(jié)束,例如下面這個代碼。

[field:global runphp='yes' name=autoindex]
if (@me < 9) @me = '0'.@me;
else @me = @me;
[/field:global]

但是像在模板sys_info.htm中這樣直接應(yīng)用php程序沒有,織夢也不允許,那為什么在sys_info.htm模板文件能用呢?因為,這個模板文件被包含引用在了sys_info.php文件,這是php程序中的規(guī)定,只要在php程序中包括有其它文件如模板,那么,在它所包括的文件中就可以直接使用php程序與htm嵌套使用,這是一個重要的知識點,如果不理解這一點,就會給我們帶來困惑。

回過頭來我們再分析一下上面<tr>與</tr>之間的這段php代碼。現(xiàn)在我們詳細(xì)分析一下這段代碼,如何添加一個欄目,例如我們添加“織夢基地”這樣一個欄目。這一小段代碼用到比較多的知識,我們詳細(xì)分析一下。這段代碼用到了四個php函數(shù),分別是file(),count(),trim(),explode(),一個數(shù)組遍歷語句foreach,還用到了一個js函數(shù)ShowConfig()這個函數(shù)就是一個選擇卡功能。

函數(shù)file()的作用是把每行作為一個單元存放在數(shù)組中,我們直接打印出$ds = file(DEDEADMIN.'/inc/configgroup.txt'),顯示的結(jié)果是:Array ( [0] => 1,站點設(shè)置 [1] => 2,核心設(shè)置 [2] => 3,附件設(shè)置 [3] => 4,會員設(shè)置[4] => 5,互動設(shè)置 [5] => 6,性能選項 [6] => 7,其它選項 [7] => 8,模塊設(shè)置 ) 。很明顯這個結(jié)果是一個數(shù)組,我們打開文件confinggroup.txt文件發(fā)現(xiàn),每一行對應(yīng)數(shù)組中的一個單元,這正是這個file()函數(shù)的強大之處。

我們再看一下count()函數(shù),函數(shù)是用來計算數(shù)組中的單元數(shù)目或?qū)ο笾械膶傩詡€數(shù),我們打印一下count($ds),結(jié)果是8,說明文件上面的$ds數(shù)組有8個單元。數(shù)組$ds是一個一組數(shù)組,如果是多維,函數(shù)會一直向下執(zhí)行,這是一個計算

多維數(shù)組的好方法工具。在數(shù)據(jù)庫語言中也有這個名稱完全相同的函數(shù),經(jīng)常用來計算查詢出來的記錄條數(shù)或字段數(shù),等講到數(shù)據(jù)庫知識我們詳細(xì)講解,注意區(qū)別。

函數(shù)trim()是去除字符串首尾處的空白字符(或者其他字符),刪除左邊、右邊空白字符(或其他字符)的函數(shù)分別是ltrim(),rtrim(),就是在函數(shù)trim()前面加上左右英文第一個字母即可。去除的字符包括如下五大類:

" " (ASCII 32 (0x20)),普通空格符。
" " (ASCII 9 (0x09)),制表符。
" " (ASCII 10 (0x0A)),換行符。
" " (ASCII 13 (0x0D)),回車符。
"" (ASCII 0 (0x00)),空字節(jié)符。
" " (ASCII 11 (0x0B)),垂直制表符。

這里為什么要去除空白字符呢,如果不這樣,那么,當(dāng)程序執(zhí)行到if(empty($ds)) continue;時,程序下面的代碼就執(zhí)行不了了,那么,文件configgroup.txt內(nèi)容就循環(huán)不出來了。

第四個函數(shù)explode()這個函數(shù)非常重要,它的作用就是一個字符串分割另一個字符串,返回一個字符串組成的數(shù)組。在這段代碼中$dls = explode(',',$dl),explode把字符串$dl分割成一個數(shù)組,例如當(dāng)循環(huán)到第一個即“1,站點設(shè)置”,這個函數(shù)會把這個字符串他割成[0]=1;[1]="站點設(shè)置"這樣的數(shù)組。與它相反的一個函數(shù)implode()是把數(shù)組連接成一個字符串。

在循環(huán)里面的if($i>1)這個判斷是作什么用的呢?他是用來處理每個欄目選項的“豎線”當(dāng)?shù)谝粋€的時候,是沒有豎線的,這也為我們提供了一種思路,例如,我們網(wǎng)站導(dǎo)航有很多站都有豎線,當(dāng)然,導(dǎo)航用的是css或js知識。

最后,有一個js函數(shù)ShowConfig($i,$totalGroup),這個函數(shù)是用來實現(xiàn)欄目選項卡功能的,這里暫時不作多解釋,以后,會有專題詳細(xì)講解選項卡功能。

為了方便大家對這段程序的理解,制作這段程序的運行流程圖如下所示。


通過上面的分析,我們得知,只要我們在文件configgroup.txt最后一行,加上“9,織夢基地”,就可以了,我們加上試一下。截取圖如下,


看到?jīng)]有,我們已經(jīng)加上“織夢基地”這個欄目選項了,我們每點擊一個欄目選項,就有一個表單對就設(shè)置,現(xiàn)在我們點擊“織夢基地”下面還是空的,什么也沒有。

現(xiàn)在我們再在“織夢基地”下面加上一些配置參數(shù),怎么加配置參數(shù)呢?要解決這個問題,首先們要分析一下其它的配置選項是如何加上并達(dá)到配置作用的。我們回到模板sys_info.htm,接著上面的代碼繼續(xù)向下看,接下來的代碼是“添加新變量”也就是后臺中如下圖4所示(截取部分圖片)

圖4
這個圖片與模板sys_info.htm對應(yīng)的代碼是第70行到127行代碼,即這段代碼是一個form表單,再向下找還有一個form表單,本來DedeCMS系統(tǒng)配置參數(shù)直接用一個表單就可以解決,為什么要用二個呢?因為,“添加新變量”對應(yīng)的表單是一個向數(shù)據(jù)庫里面添加數(shù)據(jù)的,即insert into,而另一個表單收集到的數(shù)據(jù)是更新即update,二個對數(shù)據(jù)庫不同的操作,所以,分成二個表單。從這個例子我們可以看出,一個模板可以有多個表單,他們相互不影響,雖然他們都提交同一個php程序來處理數(shù)據(jù),這二個表單最重要的一點就是第一個有一行是<input type='hidden' name='dopost' value='add'>;第二個表單有一行是<input type="hidden" name="dopost" value="save">,如果沒有這二個,那么,這個表單就會出錯,這二行是用來處理數(shù)據(jù)的條件。這二行分別對應(yīng)sys_info.php程序文件里面的二個條件if($dopost=="add"),if($dopost=="save")。這一點我們在“織夢后臺添加頂級欄目詳解”這個教程里講過,這里再提一下,重點知識。

在約114行,又有一段程序,這段程序是用來循環(huán)顯示下拉選項內(nèi)容的,對應(yīng)下圖5所示“所屬組”。

圖5

再向下看,就是一段搜索代碼,跳過,另一個教程我們詳細(xì)分析搜索功能。

接著看代碼,到了第二個表單form了,這個就是除“添加新變量”欄目選項外的其它所有欄目,循環(huán)代碼。先看第二個表單第一段代碼如下圖6所示,

圖6

這段代碼的作用是當(dāng)用戶(或管理員)進入系統(tǒng)基本參數(shù)后,默認(rèn)顯示第一個的功能,這段代碼就起到了這個作用,無非就是把css設(shè)置成style="display:none"或空的問題,這一段就不用解釋了,跟上面那段代碼一樣是個循環(huán)我們已經(jīng)分析過了。

接下來這一大段php代碼就是除“添加新變量”外所有欄目選項的循環(huán)代碼。

前二行代碼
$dsql->SetQuery("Select * From `dede_sysconfig` where groupid='{$dls[0]}' order by aid asc");
$dsql->Execute();

這二行代碼是重點,他們的作用是,從數(shù)據(jù)庫表dede_sysconfig里面,把變量類型ID等于{$dls[0]}值的所有字段都查詢出來,$dls這個數(shù)組在圖6中已經(jīng)循環(huán)查詢出來了。只要把這個表中所有字段查出來下面就方便使用了。為了方便大家把數(shù)據(jù)庫表dede_sysconfig截取了一張圖7如下所示。

圖7
用這個while循環(huán),實現(xiàn)了隔行變色的功能,這個功能類似于我們用js或css實現(xiàn)隔行換色,而且比css要簡單的多了,如果我們用jquery的話,也非常容易,對于隔行變色,我們以后總結(jié)。還有一點在這個while循環(huán)中,有一個$dsql->GetArray()函數(shù),這個作用返回當(dāng)前的一條記錄并把游標(biāo)移向下一記錄,其實,當(dāng)我們執(zhí)行上面二行代碼后,我們雖然把數(shù)據(jù)從數(shù)據(jù)查詢出來了,但是他仍然在一張表中,通過$sql->GetArray()我們可以從表中找取出一條記錄來,我們在這里看到這個簡單的代碼,其實它的底層函數(shù)是mysql_fetch_array(),只是織夢幫我們封裝好了,要查詢看這個$dsql->GetArray()函數(shù),請在目錄/include/dedesql.class.php這個數(shù)據(jù)庫類里面大約383行就能找到。

接下來,程序通過type類型,來決斷顯示你的表單信息,雖然,這里只是一句話帶過,但是這段代碼相當(dāng)多的,因為簡單這里不用分析了。我們重點看其中一句。

if ($row['varname']=='cfg_cookie_encode') {
$addstr=' <a href="javascript:resetCookieEncode();" style="color:blue">[重新生成]</a>';
}

這段代碼是對應(yīng)后臺系統(tǒng)配置參數(shù)里面的“核心設(shè)置”cookie加密碼后面有個重新生成功能,如下圖8所示。

圖8

這個[重新生成]cookie加密碼,通過一個javascript的函數(shù)resetCookieEncode()(這個函數(shù)在模板sys_info.htm最上能找到),通過ajax技術(shù),進入到php程序文件sys_info.php,在這個文件中最后一段代碼,計算隨機cookie加密碼來獲取生成密碼。關(guān)于cookie,seetion我們有一個專題,這里不作過講,在講織夢會員系統(tǒng),會員注冊時會詳細(xì)講到。

現(xiàn)在我們分析完了,現(xiàn)在我們在織夢后添加新變量到“織夢基地”那個選項欄目里面:

變量名稱:cfg_zmpath
變更值:http://www.dedebase.com
變量類型:文本
參數(shù)說明:織夢基地網(wǎng)址
所屬組:織夢基地

填寫完這些后,點擊“保存變量”,點擊“織夢基地”,如下圖所示成功了。


收縮
  • 微信客服
  • 微信二維碼
  • 電話咨詢

  • 400-1100-266
主站蜘蛛池模板: 吕梁市| 措勤县| 长治市| 吉安县| 镇康县| 从江县| 鹰潭市| 邵阳县| 喀喇| 腾冲县| 荣成市| 舞钢市| 台中县| 清新县| 子长县| 沅陵县| 德保县| 黑山县| 弥渡县| 龙岩市| 清原| 平凉市| 绥宁县| 湄潭县| 云林县| 襄垣县| 鹤峰县| 合阳县| 廊坊市| 四平市| 南岸区| 桐乡市| 裕民县| 万年县| 岐山县| 普陀区| 临洮县| 新巴尔虎右旗| 商城县| 博客| 襄垣县|