POST TIME:2017-11-13 00:00
剛學(xué)習(xí)完dedecms的標(biāo)簽語(yǔ)法,我有很多困惑,覺(jué)得標(biāo)簽的意義比較抽象,不知道如何用標(biāo)簽來(lái)寫(xiě)一些具體的內(nèi)容。如果有一些數(shù)據(jù)庫(kù)的編程經(jīng)驗(yàn),就知道一個(gè)很常用的編程范例—增刪改查。比如說(shuō),我要建立的是書(shū)本的模型,有索書(shū)號(hào),書(shū)名,類型……,之后要寫(xiě)一個(gè)網(wǎng)頁(yè)來(lái)完成書(shū)本信息的增刪改查,這篇文章主要解決這種問(wèn)題。
一頻道(內(nèi)容模型)
我很長(zhǎng)時(shí)間弄不清頻道和欄目的區(qū)別。從網(wǎng)上找了一些解釋如下:
欄目就是網(wǎng)站中導(dǎo)航劃分出的模塊,如百度中的新聞、網(wǎng)頁(yè)、貼吧等就是欄目。
頻道是欄目的類型。官方的定義是:頻道指內(nèi)容模型,網(wǎng)站的欄目都是基于不同的模型建立的。也就是說(shuō)一個(gè)頻道還可以衍生出多個(gè)欄目,一個(gè)欄目只對(duì)應(yīng)于一個(gè)頻道。
查到了以上定義后,我以為對(duì)頻道和欄目已有較深刻的認(rèn)識(shí)了。直到我遇到這個(gè)問(wèn)題,“什么時(shí)候建立頻道,什么時(shí)候建立欄目?”
頻道對(duì)應(yīng)于數(shù)據(jù)模型,當(dāng)要建立一個(gè)新的數(shù)據(jù)模型,就要建立頻道。如書(shū)本模型,它和文章模型,圖片模型的數(shù)據(jù)表結(jié)構(gòu)不同。一個(gè)新的模型有以下的元素:數(shù)據(jù)表,增刪改代碼。
而欄目是對(duì)應(yīng)于功能而言的,就像百度中的新聞、網(wǎng)頁(yè)、貼吧,什么時(shí)候要添加欄目還是比較明顯的。3種模板屬于欄目的元素。
“一個(gè)頻道還可以衍生出多個(gè)欄目”這句話有點(diǎn)虛,實(shí)際中網(wǎng)頁(yè)中的內(nèi)容都很飽滿,每個(gè)欄目的內(nèi)容都可能很不同,除了實(shí)用的文章模型外,基本每個(gè)頻道都為一個(gè)欄目而設(shè)。
在dedecms中,有頻道>欄目>文章這幾個(gè)基本的單位。每個(gè)單位都會(huì)用id號(hào)唯一標(biāo)識(shí),頻道(cid,channel id),欄目(tid,type id),文章(aid,article id) 。
二添加模型
關(guān)于添加模型,不妨看下這篇文章。它主要講操作步驟,我會(huì)結(jié)合操作講講原理。上面提到,一個(gè)模型有數(shù)據(jù)表,增刪改代碼這兩個(gè)元素,下面就按這個(gè)思路發(fā)展。
點(diǎn)擊了“增加新模型”后,會(huì)看到表單中的附加表,填dede_addonXX,XX就是前面填寫(xiě)的名字標(biāo)識(shí)。Dedecms中的文章不是指具體的文章,更像是記錄。如圖片頻道中,上傳的一張圖片就是一個(gè)文章。所以一篇文章由兩部分組成,其一是基本信息,如作者,發(fā)布時(shí)間等,記錄在dede_archives中,這個(gè)表稱為主表。每個(gè)頻道的文章信息,存在附加表中,如圖片頻道的附加表為dede_addonimages。
順便說(shuō)一下,在模型性質(zhì)處有獨(dú)立模型的選項(xiàng),就是新建立的模型中,文章在dede_archives沒(méi)有記錄。可能見(jiàn)到dede_archives中多余的字段太多,不是每個(gè)模型都需要,才有這種設(shè)計(jì)。獨(dú)立模型更多叫單表模型,縮寫(xiě)為sg,有專門的sgarclist。現(xiàn)在剛剛接觸,就先不理它。
在“增加新模型”的表單提交后,會(huì)看到數(shù)據(jù)庫(kù)中多了一個(gè)dede_addonXX的表,不要急著定義這個(gè)表的字段,因?yàn)閐edecms會(huì)輔助我們完成這個(gè)過(guò)程。
現(xiàn)在大約來(lái)到“這篇文章”的第三點(diǎn),依次進(jìn)入 內(nèi)容模型管理>dede_addonXX的修改>字段管理>添加新字段 就可以為dede_addonXX添加字段了。添加完一個(gè)字段提交后后,會(huì)回到字段管理的頁(yè)面,看到“模型字段配置”,是一個(gè)代表剛才定義過(guò)程的標(biāo)簽,這是手動(dòng)定義數(shù)據(jù)庫(kù)表所沒(méi)有的。總之,對(duì)附加表用該方法添加新字段會(huì)更好。
關(guān)于增刪改的代碼,在前面的檔案發(fā)布/修改/管理出已經(jīng)定義了。開(kāi)始時(shí),用archives_add.php,archives_edit.php和content_list.php。由于dedecms有自動(dòng)表單功能,所以這個(gè)文件基本夠用了。自動(dòng)表單的意思是前面添加新字段時(shí)設(shè)置的字段,會(huì)在add,edit等表單中以控件形式出現(xiàn),不需用戶添加代碼。如果覺(jué)得不夠用,可以參照archives_add.php等DIY一下。
這樣自定義的頻道就可以用來(lái)生成欄目,像默認(rèn)欄目一樣好用。
對(duì)于增刪改,這可能只是主模型的搭建,對(duì)于輔助模型也可以參照其他后臺(tái)管理代碼,像分類信息模型中,增加一個(gè)地區(qū)表。要搞清后臺(tái)管理,有要費(fèi)一番功夫。
增刪改功能不僅限于后臺(tái),前臺(tái)也有這些功能。前臺(tái)就不能用表單這種呆板的提交,可能要用到ajax。可參考系統(tǒng)頂踩功能和評(píng)論功能的實(shí)現(xiàn)。
三使用模型中的數(shù)據(jù)
增刪改后還剩下查,這個(gè)功能的特點(diǎn)是不用填很多表單。數(shù)據(jù)的查詢一般用標(biāo)簽完成,field,arclist,list及其衍生標(biāo)簽已經(jīng)覆蓋了不少情況。
在文章模板中能用field標(biāo)簽查詢附加表的字段,而在列表模板中,也能通過(guò)arclist查詢到附加表的字段,如下:
<tr>
{dede:arclist addfields='sjdz,yysj' channelid='1}
<td>商家地址:[field:sjdz/]</td>
<td>營(yíng)業(yè)時(shí)間:[field:yysj/]</td>
{/dede:arclist}
</tr>
關(guān)鍵是addfields和channelid,addfields里面是你的自定義字段,channelid如果是普通文章就是1
當(dāng)然也有不少情況是不夠用的,要自定義標(biāo)簽。可看看下列文章:文章1,文章2