底層模板(Innertext),底層模板實(shí)際上就是對(duì)于有多條記錄的模板輸出,用戶手工去指定單個(gè)記錄的樣式对蒲。
因?yàn)檫@個(gè)概念很虛線,那么這個(gè)地方還是通過(guò)實(shí)踐去說(shuō)明吧锻霎。
大家在標(biāo)簽測(cè)試的地方輸入:
- 這是使用默認(rèn)底層模板的標(biāo)簽:
{dede:arclist row=10}
{/dede:arclist}
- 這是手工指定底層模板的標(biāo)簽:
{dede:arclist row=5}
<a href=’[field:arcurl/]’>[field:title /]</a> 點(diǎn)擊:[field:click/] <br />
{/dede:arclist}
有一點(diǎn)需注意的是,在沒(méi)有指定底層模板(Innettext)的時(shí)候揪漩,系統(tǒng)一般調(diào)用 templets/system 里的
相應(yīng)該文件作為底層模板旋恼。
例如:
{dede:arclist row=10}{/dede:arclist}
它實(shí)際由系統(tǒng)默認(rèn)調(diào)用了templets/system/part_arclist.htm 這文件的東西作為底層模板。這文件的內(nèi)容是
<a href="[field:filename /]">[field:title /]</a>
那么
{dede:arclist row=10}{/dede:arclist}
就等同于
{dede:arclist row=10}·<a href="[field:filename /]">[field:title /]</a><br/>
{/dede:arclist}既能用短標(biāo)記奄容,也能直接定義樣式冰更,又不依賴數(shù)據(jù)庫(kù),這是dedecms模板和其它模板的最大區(qū)別昂勒。
在標(biāo)記之間 [field:…/] 這些就是底層模板變量蜀细,這些標(biāo)記一般也是屬于 Dedecms 標(biāo)簽的模式,只是 { … } 符號(hào)改為了 [ … ]叁怪,因此底層模板中的標(biāo)簽也是具有DedeCms標(biāo)簽的特性的审葬,例如深滚,在底層模板中使用 [field:global name=’cfg_webname’/] 同樣可以表示全局變量 $cfg_webname奕谭。
在此我簡(jiǎn)單介紹一下常用的 arclist 標(biāo)記的底層模板字段及意義:
arclist的底層模板字段實(shí)際上是對(duì)應(yīng)相應(yīng)該主索引表的,在文檔模板中則對(duì)應(yīng)該主表和附加表痴荐,主
表字段是一樣的血柳,我等會(huì)介紹一下,附加表的可以在模型里找生兆。
arclist常用的字段有:
ID(同 id),
title(標(biāo)題),
color,
typeid(欄目ID),
description(摘要难捌,同 info),
writer(作者),
shorttitle(短標(biāo)題),
memberid(會(huì)員ID),
pubdate(發(fā)布時(shí)間),
click,
litpic(縮圖圖,同 picname),
typename(欄目名稱),
arcurl(網(wǎng)址鸦难,同 filename),typeurl(欄目網(wǎng)址)stime(pubdate 的"0000-00-00"格式根吁,等同于[field:pubdate function="strftime('%y-%m-%d',@me)"/]),
textlink(等同<a href='[field:arcurl /]'>[field:title/]</a>),
typelink(等同<a href='[field:arcurl /]'>[field:title/]</a>),
imglink(等同<a href='[field:arcurl /]'><img src='[field:picname/]' border='0'></a>),
image(等同<img src='[field:picname/]'>),
大家需注意的一個(gè)問(wèn)題是:[field:標(biāo)記名稱/]這種寫(xiě)法是僅在底層模板中才用的。在文檔模板中合蔽,字段是用 {dede:field name='title'/}這樣形式表示的击敌。不過(guò)在一種特殊的情況下,Innertext是無(wú)效的拴事,就是指定了 runphp=’yes’ 屬性沃斤,:A圣蝎、function 擴(kuò)展;B衡瓶、在Innertext中直接編程徘公。
一、那么首先說(shuō)
A哮针、function 擴(kuò)展:
在標(biāo)記中关面,可以使用 {dede:標(biāo)記名稱 function=”函數(shù)名(@me,其它參數(shù))” /}這樣模式對(duì)標(biāo)記的值進(jìn)行處理,其中 @me 就是表示標(biāo)記當(dāng)前的值诚撵,最終獲得的結(jié)果是這個(gè)函數(shù)返回的值缭裆。
大家不妨測(cè)試一下下面這個(gè)標(biāo)簽:{dede:global function="file_get_contents('http://www.baidu.com')" /}
下面再舉個(gè)實(shí)用的例子(測(cè)試一下):
{dede:arclist row=5}
<a href='[field:arcurl/]'>[field:title /]</a>
[field:pubdate function="strftime('%y-%m-%d %H:%M',@me);"/]<br />
{/dede:arclist}
從實(shí)例中大家可以注意到,{dede:xx/}和[field:xxx/}都支持function擴(kuò)展寿烟。實(shí)際上 [field:xxx/] 這種模式也是dede標(biāo)簽解析器解析的澈驼,所以作用一樣,它只是把 dede 換成 field { 換成 [在這里筛武,function 屬性的 function 不僅是用PHP自帶的缝其,用自己定義的也行。不過(guò)要注意function的格式徘六,自定義的function不能用echo這樣的輸出内边,而是返回一個(gè)字符串,這樣就行了待锈。
寫(xiě)好的函數(shù)放入 include/inc_channel_unit_functions.php 文件漠其,因?yàn)閐ede核心都會(huì)調(diào)用這個(gè)文件。
這里舉個(gè)簡(jiǎn)單的函數(shù):
function testMyFunc(str." 增加了我的東西哦竿音!";}
在標(biāo)簽中使用:
{dede:global name='cfg_webname' function='testMyFunc(@me)'/}
用function擴(kuò)展的好處是既可以增強(qiáng)系統(tǒng)的功能和屎,又保持標(biāo)記的簡(jiǎn)潔。
二春瞬、下面介紹的是另一種擴(kuò)展 B
在Innertext中直接編程這種方式和function編程的不同之處是柴信,你可以把PHP代碼直接寫(xiě)入到標(biāo)簽的底層模板代碼的地方,不過(guò)需要注意的是宽气,在這里的PHP代碼并非完全意義上的PHP代碼随常,它必須符合Dede限定的格式,即是最終返回值返回到 @me 變量中萄涯,同樣的是用 @me 表示標(biāo)記的最初的值绪氛。
使用格式: {dede:標(biāo)記名稱 runphp=yes} PHP代碼{/dede:標(biāo)記名稱}
大家測(cè)試一下這個(gè)代碼:
{dede:global name='cfg_webname' runphp='yes'}
$baidu = file_get_contents("http://www.baidu.com");
preg_match_all("/<title>(.*)<\/title>/isU",$baidu,$baidus);
@me = $baidus[1][0];
{/dede:global}
這里的 cfg_webname 不再顯示當(dāng)前站點(diǎn)名了,因?yàn)?@me =$ baidus[1][0];
改變了它的值涝影。
在使用標(biāo)記內(nèi)編程或function擴(kuò)展時(shí)枣察,很多情況都可能會(huì)調(diào)用數(shù)據(jù)庫(kù)。在V5版本中袄琳,DedeCms的數(shù)據(jù)庫(kù)進(jìn)行了改進(jìn)询件,無(wú)論你新建多少個(gè)類的對(duì)像燃乍,最終打開(kāi)的鏈接是只有一個(gè)的,并且會(huì)生成一個(gè) $dsql
的全局?jǐn)?shù)據(jù)庫(kù)類的變量宛琅。
以往有些懂dedecms數(shù)據(jù)庫(kù)類的人在調(diào)用function擴(kuò)展的時(shí)候刻蟹,一般的做法是用 $dsql = new DedeSql(false);
這樣新建一個(gè)類。實(shí)際上在V5中是不需要這樣的嘿辟。直接用 global $dsql;聲明一下就能使用舆瘪,并且在函數(shù)體中不要自行關(guān)閉(即執(zhí)行dsql->Close()
否則可能出錯(cuò)。
那么在這里舉個(gè)簡(jiǎn)單的例子(測(cè)試代碼):
{dede:global runphp='yes'}
global $dsql;
$restr = '';
$dsql->SetQuery("Select * From dede_feedback where ischeck=1 order by ID desc limit 5");
$dsql->Execute('feedback');
while($row = $dsql->GetArray('feedback')){
$restr .= "<a target='_blank' href='/plus/feedback.php?arcID={$row['aid']}&urlindex={$row['urlindex']}'> {$row['arctitle']}</a> -- ".cn_substr($row['msg'],200);
}
@me = $restr;{/dede:global}
這代碼是調(diào)用最新評(píng)論的红伦。dede本身沒(méi)有提供直接調(diào)用評(píng)論的標(biāo)簽英古,一般懂的人用loop標(biāo)簽調(diào)用,不過(guò)在本版中昙读,新增的SQL標(biāo)簽會(huì)更簡(jiǎn)單召调。
在 DedeCms V5 中有一個(gè)標(biāo)簽{dede:sql sql="SQL語(yǔ)句 limit 記錄"}底層模板{/dede:sql}
我現(xiàn)在改一下剛才調(diào)用評(píng)論的地方(測(cè)試代碼):
{dede:sql sql="Select * From dede_feedback where ischeck=1 order by ID desc limit 5"}
<a target='_blank' href='/plus/feedback.php?arcID=[field:aid/]&urlindex=[field:urlindex/]'>[field:arctitle/]</a> -- [field:msg/]<hr />
{/dede:sql}
這結(jié)果應(yīng)該和上面的代碼是一樣的。
為了補(bǔ)允調(diào)用全站數(shù)據(jù)的不足蛮浑,V5中新增了 arcfulllist 標(biāo)記唠叛,它的作用與 arclist 標(biāo)記有點(diǎn)類同,不示不同的是 arcfulllist 里的文件名有時(shí)候可能是動(dòng)態(tài)的沮稚,這因?yàn)樗鞘褂盟阉鲿r(shí)用的那個(gè)簡(jiǎn)單索引表艺沼。在專題文章、相關(guān)文章中默認(rèn)都是使用 arcfulllist 調(diào)用指定的 id 的文檔的蕴掏。
由于這標(biāo)記可能造成文件名不同步障般,我們系統(tǒng)后面增加了文檔名批量修正功能,但為了防止忘記操作盛杰,建議建立欄目就設(shè)定好文檔命名規(guī)則挽荡,以后不要經(jīng)常更改。
一就是常用的模型饶唤,二是新出的模塊徐伐,三是插件贯钩。
大家進(jìn)到Dede管理后臺(tái)“頻道管理->內(nèi)容模型管理”的地方可以看到:
分類信息專題普通文章圖片集軟件Flash產(chǎn)品這些都是內(nèi)置的模型募狂。大家也可以自己新建一個(gè)模型,有不少人問(wèn):Dedecms的文本存儲(chǔ)在哪里呀角雷?下面我一步一步的教大家建立一個(gè)用文本存儲(chǔ)的文章模型祸穷。
首先“增加一個(gè)新模型”,建立好后“添加字段”勺三,然后轉(zhuǎn)向欄目管理的地方雷滚。建立好后轉(zhuǎn)到欄目管理的地方新建一個(gè)頂級(jí)欄目,內(nèi)容模型選剛才建好的那個(gè)吗坚。建立好欄目后祈远,隨意在那個(gè)欄目增加一篇文章呆万。預(yù)覽文章,會(huì)發(fā)生新增的模型顯示的文檔〕捣荩現(xiàn)在再回到頻道模型管理的地方谋减,在新建的頻道點(diǎn)擊“模板”。
對(duì)于類同的模型扫沼,最好是把類同的模板作為當(dāng)前模型的模板出爹。如剛才建立的模型,實(shí)際上模板和普通文章模板是一樣的缎除。
關(guān)于字段的問(wèn)題严就,在文檔模板中字段是用{dede:field name='字段名'/}表示。例如在軟件模型中文件類型 filetype 單行文本(varchar) 固化表單 [修改]
語(yǔ)言 language 單行文本(varchar) 固化表單 [修改]
軟件類型 softtype 單行文本(varchar) 固化表單 [修改]
授權(quán)方式 accredit 單行文本(varchar) 固化表單 [修改]
操作系統(tǒng) os 單行文本(varchar) 固化表單 [修改]
軟件等級(jí) softrank 整數(shù)類型 固化表單 [修改]
官方網(wǎng)址 officialurl 單行文本(varchar) 固化表單 [修改]
語(yǔ)言這字段就可以用 {dede:field name='language'/} 表示器罐,此外梢为,title , keywords,description 這些實(shí)際上主索引表的東西,剛才說(shuō)模板時(shí)已經(jīng)介紹過(guò)它的含義了轰坊。
有用戶提過(guò)一個(gè)問(wèn)題抖誉,就是關(guān)于自定義模型如何在表布表單中調(diào)整字段的順序。Dedecms目前沒(méi)有這選項(xiàng)衰倦,需要改的必須用 phpmyadmin 進(jìn)入 it_channeltype 這個(gè)表袒炉。編輯 fieldset 這里的XML,調(diào)一下位置就行了樊零。
此外大家要區(qū)別一下自動(dòng)模型和系統(tǒng)模型的區(qū)別我磁,系統(tǒng)模型是固化了的,要調(diào)整必須自己修改程序驻襟,
對(duì)于普通人是無(wú)法改的夺艰。不過(guò)這版本允許自行增加一些字段在里面。
因?yàn)檫@次講座是個(gè)中級(jí)講座沉衣,模型這塊我就不太深入的講解了郁副,最后介紹一下插件和模塊。
插件和模塊DEDE增加新模型,必須一步到位,如果不用phpmyadmin,輸入錯(cuò)誤什么的,在后臺(tái)修改不了豌习。
插件在Dedecms中是就是一些小的實(shí)際的程序的集合存谎,它可以簡(jiǎn)單的安裝和刪除,不過(guò)安裝和刪除僅去掉數(shù)據(jù)庫(kù)的索引記錄肥隆,并非進(jìn)行真正的安裝既荚。
官方網(wǎng)前自帶的插件有:
文件管理器站內(nèi)新聞發(fā)布友情鏈接模塊留言簿模塊投票模塊論壇擴(kuò)展廣告管理正則規(guī)則測(cè)試器隨機(jī)模
板防采集木馬掃描檢測(cè)數(shù)據(jù)轉(zhuǎn)換與導(dǎo)入實(shí)際上很多情況下單用插件是滿足不了系統(tǒng)的需求的,實(shí)際上很多情況下單用插件是滿足不了系統(tǒng)的需求的栋艳。因此Dedecms V5提出了模塊的概念恰聘。
模塊是對(duì)系統(tǒng)模型的一個(gè)補(bǔ)充,因?yàn)镈edecms的模板解析機(jī)制相對(duì)復(fù)雜,如果所有東西都依賴模型晴叨,就
結(jié)果只有一個(gè):速度越來(lái)越慢凿宾。而使用模塊就補(bǔ)充了這方面的不足。在 Dedecms V5 的菜單中“擴(kuò)展模塊”里放的就是Dedecms的模塊兼蕊。
模塊文件是一個(gè)標(biāo)準(zhǔn)化的xml文件菌湃,它即包含了模塊安裝刪除的數(shù)據(jù),也偶包含了圖片等二進(jìn)制文件遍略。有些人問(wèn)我惧所,為什么在DedeCms V5的安裝包里沒(méi)發(fā)現(xiàn)ask、group等目錄绪杏?因?yàn)檫@些東西都封裝起來(lái)了下愈,如果你不安裝它,是不會(huì)看到這些文件的蕾久,這樣就能盡大限度滿足一些站長(zhǎng)想要功能多势似,一些想要功能實(shí)用的需求。