做網站,我們是認真的!

網站適配電腦+手機端,僅1280元,送2000M阿里云服務器,送com域名+免費備案
網站前端采用靜態系統顯示,后端動態管理,我們承諾網站包收錄,完成網站之后把源碼給客戶!

觀點

互聯網+時代,說建站,談運營與網絡營銷

創建織夢并分析增加新模型功能

時間:2020-12-21

建立新模型不僅在織夢dedecms二次開發中常用到,有時候在仿站時也用到,雖然,建立模型比較簡單,但是模型里面的那十多項表單內容確不好理解,今天就通過建立模型相關程序和數據庫知識詳細分析一下,以便給大家一個系統的了解,以后,我們建立新模型的時候就可以大膽的做了。

  網上有很多關于建立新模型的教程,一般都是直接告訴我們怎么做,但是為什么這樣做?確沒有這樣的教程,本站建立的主要原因也是在此,通過分析程序來講解一些織夢功操作原理,這一點是與其它教程根本區別。在建立新模型前我們要對里面的每一項進行分析。

  進入網站后臺,用箭頭表示下一步:核心→內容模型→內容模型管理→點增加新模型→進入創建模型界面,如下圖所示,
創建織夢并分析增加新模型功能
                                                                               圖1

  接下來我們就詳細分析這一界面每一項功能作用。

  這個“新增內容模型”界面用到的文件是http://www.dedebase.com/dede/mychannel_add.php,即根目錄下面dede(如果后臺路徑沒有改的話)文件夾下面的mychannel_add.php,這個php程序,對應的模板文件是mychannel_add.htm,用到的數據庫表是dede_channeltype。

  現在回到新增內容模型界面:

  第一項是:頻道ID,這個“頻道ID”并不是指這個模型id,它只是一個id號,這個頻道ID對應的數據庫表字段是“id”,而模型id對應的數據庫表字段是“nid”,這二個id是非常容易混淆的。為了區別這二個id,我們看一下內容模型管理界面、數據庫表dede_channeltype(只截取表中有用的部分,其它忽略)和新增內容模型部分截圖三張圖對比如下。

創建織夢并分析增加新模型功能
                                                            圖21


創建織夢并分析增加新模型功能
                                                       圖22

創建織夢并分析增加新模型功能
                                                 圖23
  在圖21中的“id號”、“識別id”分別與圖22中的字段“id”、“nid”對應,即id號和表中字段id同一個id,識別id和表中字段nid(nid是模型id)是一個id。上面提到的“頻道ID”就是id號,也就是圖22中字段“id”,而圖23中第二項“名字標識”才是模型id,即對應表字段nid。這二者非常容易混淆。

  我是如何分清的呢?我們這樣來分析圖21和圖23,只不過都是數據庫表字段,在模板里的不同的叫法吧了,這二張圖里面的名字在圖22對應表里都有,這些對應我們通過模板mychannel_add.htm來找。打開這個模板,找到從61行開始向下看,我截取一部分圖如下所示。
創建織夢并分析增加新模型功能

  我們找到:name="id",value="<?php echo $newid; ?>" 這個name="id"就是數據庫表dede_channeltype里面對應的id,后面value 里面的變量$newid就是你在后臺填寫的唯一數字,也就是圖23第一項,你在后面那個方框里寫的數字。

  我們再看:name="nid" type="text" id="nid" value="ch<?php echo $newid; ?>" 這個name="nid"就是數據庫表dede_channeltype里面對應的模型id,即nid,后面value 里面的變量$newid就是你在后臺填寫的唯一數字,也就是圖23

第二項名字標識,你在后面那個方框里寫的數字。只不過在$newid前面強制加上了ch。

  以下各項與數據庫表dede_channeltype一一對應。與上面二個的分析完全一樣,這里些對應不一一分析了,留給大家作練習用,希望大家自己分析一下,這樣可以學習不少東西。

 我們再回到第一項,下面有段說明是“數字,創建后不可更改,并具有唯一性?!?,這里講的唯一性,指的是你寫的這個數值不能與其它模型重復,如文章的id號是1,商品的id號是6,分類信息的id號-8,在這里填寫的頻道id不能與這些id號重復,必須保持唯一性。

  像id,nid都是通過模板mychannel_add.htm,收集數據,然后,通過這些字段,把收集到的數據插入到數據庫,這一過程如何實現的呢?

  當用戶(或管理員或信息發布員)填寫好數據后,當點擊保存后,模板里面的這些字段如id,nid等,收集value后面的數據庫,然后,通過<form>里面的action="mychannel_add.php",這個mychannel_add.php文件,把數據插入到數據庫里面的。

  在mychannel_add.php這個文件中,首先初始化一下,然后,檢查收集到的數據如第一項id的數據是不是數字,不是就退出;第二項nid是不是“英文字母或與數字混合字符串”,不是就退出;第三項附加表addtable,是不是空,是空就退出程序,否則程序就向下運行,程序運行到$trueTable2 = str_replace("dede_",$cfg_dbprefix,$addtable);這一句,意思就是用用戶填寫的前綴即$cfg_dbprefix($cfg_dbprefix是用來收集用戶填寫的前綴)替換附加表$addtable里面的dede_這個前綴。

  程序接著向下運行,走到38行,這一行用來判斷,如果你選的模型是獨立模型,那么,id就變成負數了,這一行就是用來實現這一功能的。接下來41行就是用來檢查你的頻道id,頻道名稱標識,附加表是不是已經存在于數據庫,也就是檢查唯一性。

  接下來程序,繼續向下運行,創建附加表,在創建附加表前,先判斷一下是不是在數據庫里已經存在,若表不存在或刪除了表,就創建附加表,接著判斷一下,這個表是不是獨立模型,若是就創建附加表,否則就創建獨立模型表。到目前程序已經運行到第104行。

  接下來程序判斷是否為系統模型,如果不是系統模型,就設置一下字段,接下來用mysql語言insert into 把收集到的數據插入到數據庫中,程序結束,模型建好了。以下分析程序過程就是新增模型的建立過程。

  我們回到圖1找到第四項“附加表”,在這一行最后,有一個復選框,當我們選中的時候,點擊存在完后,這個mychannel_add.php文件中程序運行到53行,即if(!$istb || $isdel==1)這一句后面的$isdel==1這句,這句的作用就是當我們選中后,這個判斷就起作用了,如果你先中,當數據庫中已經存在表了,那么,程序就會刪除原來的表再重新建一個表,若在圖1中沒有選中,則$isdel==1不起來用。

  第五項“模型性質”:這個你選擇的是什么模型,程序會通過變量$issystem來判斷,例如我們分析程序創建附加表時,有一句判斷if($issystem != -1),這句用來判斷你選中的不是獨立模型,接著向下創建附加表。注意:獨立模型和系統模型,自動模型區別是,獨立模型不使用主表dede_archives,但系統強制創建字段aid,typeid,senddate,title, mid, channel,為什么會這樣強制創建這些字段呢,大家想一下,不管什么表,你發布一篇內容,這篇內容必須有標題吧,必須有欄目吧,這個欄目肯定屬于某一模型吧所以程序會強制創建必須要的字段,至于像發布時間要不要無所謂,對,但是我們往往會需要發布時間,所以,也在強制創建立的字段。

  我們在建立織夢模型時,到底用自動模型還是系統模型,還是獨立模型?這個具體問題,具體分析,系統模型建立了就不能刪除了,是固定死的,而自己模型可以刪除,這二個的話我建立用自動模型,對于獨立模型,如果你站很小直內容不多的話,獨立的可以選擇因為,其它二個模型要分表有一些不必要的操作,小站用不了白白浪費,但是如果大站,建議一定要分表,而且這樣可以減少服務器負擔??傊?,一般網站直接用織夢默認的自動模型,對于其它地方的東西如果沒有原則問題,那么直接用織夢默認的就行。

  剩下的都是與會員有關的選項,這些選擇今天不作分析,這些會在分析會員模塊的時候詳細分析或者在作織夢二次開發的時候,詳細分析。

  總結:對于以上分析,您需要最基本的html和php程序知識。這個教程用到的表有:主表dede_archives,模型表dede_channeltype;用到的文件有:mychannel_add.php,mychannel_add.htm,還用到一些數據庫知識,大家可以細細的研究一下這二個文件,特別是他們的對應關系,以及通過模板文件收集到的數據是如何插入到數據庫里面的等。多分析一些你會發現不知不覺進步神速。
0
首頁
案例
關于
聯系
凯时平台