婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 網站建設 > 建站知識 > DedeCMS系統配置參數功能和運行分析

DedeCMS系統配置參數功能和運行分析

POST TIME:2020-04-11 21:14

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

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

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

首先,我們目標是實現在“添加新變量”前面加上一個對應的欄目選項,即如下圖所示位置。

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

<tr>
<td height="24" bgcolor="#ffffff" align="center">
<?php
$ds = file(DEDEADMIN.'/inc/configgroup.txt');//每行作為一個單元存放在數組中。
$totalGroup = count($ds);//統計數組個數。
$i = 0;
foreach($ds as $dl)
{
$dl = trim($dl);
if(empty($dl)) continue;
$dls = explode(',',$dl);//用逗號分隔字符串,分隔后存放在數組$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程序,只有標簽,沒有錯,實際上在前臺模板里面可以應用php文件,但不是直接應用,而是用織夢標簽開始與結束,例如下面這個代碼。

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

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

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

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

我們再看一下count()函數,函數是用來計算數組中的單元數目或對象中的屬性個數,我們打印一下count($ds),結果是8,說明文件上面的$ds數組有8個單元。數組$ds是一個一組數組,如果是多維,函數會一直向下執行,這是一個計算

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

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

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

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

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

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

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

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


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


看到沒有,我們已經加上“織夢基地”這個欄目選項了,我們每點擊一個欄目選項,就有一個表單對就設置,現在我們點擊“織夢基地”下面還是空的,什么也沒有。

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

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

在約114行,又有一段程序,這段程序是用來循環顯示下拉選項內容的,對應下圖5所示“所屬組”。

圖5

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

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

圖6

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

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

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

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

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

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

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

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

圖8

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

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

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

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


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

  • 400-1100-266
主站蜘蛛池模板: 同心县| 碌曲县| 阿坝县| 万山特区| 苏尼特左旗| 达尔| 阳原县| 治县。| 通河县| 松滋市| 天等县| 贡嘎县| 淮南市| 普兰店市| 靖西县| 秦皇岛市| 五台县| 无锡市| 桃园市| 南安市| 衡水市| 石泉县| 兰西县| 华坪县| 正镶白旗| 丰城市| 荣昌县| 仲巴县| 敖汉旗| 沭阳县| 南皮县| 柳河县| 九台市| 汾西县| 赫章县| 平江县| 商丘市| 宜兰县| 自贡市| 鄂温| 唐海县|