本文由織夢(mèng)官方團(tuán)隊(duì)成員天涯提供編寫:
因?yàn)檫@次主要是講座,缺乏體系的培訓(xùn)內(nèi)容,本次講座我將織夢(mèng)技術(shù)論壇較為常見的問題加以整理,并結(jié)合一些其他方面的應(yīng)用內(nèi)容進(jìn)行補(bǔ)充,讓大家更了解織夢(mèng)模板程序的使用。
1.安全設(shè)置
首先是程序安全問題,這里主要是一些擁有獨(dú)立服務(wù)器的站長(zhǎng),如果自己在系統(tǒng)安全部署上面有些經(jīng)驗(yàn)?zāi)菓?yīng)該沒有什么問題,有部分站長(zhǎng)沒有系統(tǒng)安全部署的經(jīng)驗(yàn),加上現(xiàn)在掛馬猖獗,所以許多人都在擔(dān)心,官方在早些時(shí)候就發(fā)了一個(gè)關(guān)于《織夢(mèng)模板 V5.3/V5.5 安全設(shè)置指南》的主題帖,地址為:http://www.genban.org/a/zhimengjianzhan/2009/1226/12.html,這里面說了如何在Win Serv環(huán)境配置服務(wù)器環(huán)境。
不過文中提到了織夢(mèng)的文件目錄,這里我對(duì)整個(gè)系統(tǒng)文件目錄進(jìn)行一個(gè)說明:http://www.genban.org/a/zhimengjianzhan/2009/1226/13.html,當(dāng)然,如果你安裝個(gè)模塊會(huì)相應(yīng)的增加一些目錄,例如模塊group、ask等。
{dede:sql}標(biāo)簽的用法
sql標(biāo)簽可以稱得上是個(gè)萬能標(biāo)簽了,查詢數(shù)據(jù)庫將其輸出,這里介紹一些關(guān)于這個(gè)標(biāo)簽的用法:
1.用來輸出統(tǒng)計(jì)內(nèi)容,這個(gè)是不錯(cuò)的,舉個(gè)例子,我們來統(tǒng)計(jì)下總共發(fā)了多少的文章,思路就是輸出dede_addonarticle這個(gè)文章附加表內(nèi)容總數(shù)就可以了。
{dede:sql sql="SELECT COUNT(*) AS nums FROM dede_addonarticle"}
[field:name = "nums"/]
{/dede:sql}
2.使用~field~來進(jìn)行特殊的查詢,比如之前論壇上面很多會(huì)員需要做一個(gè)輸出當(dāng)前發(fā)布文章會(huì)員的相關(guān)內(nèi)容,之前用sql或者arclist標(biāo)簽是沒辦法實(shí)現(xiàn)的,因?yàn)槊科獌?nèi)容是不同的,這里我們來用5.5的sql語句來做個(gè)示范。
我們首先在文章模板中相應(yīng)的位置加上下面的標(biāo)簽
{dede:sql sql="SELECT * FROM dede_archives WHERE writer=~writer~"}
[field:id/],
{/dede:sql}
這個(gè)放到article_article.htm頁面,將會(huì)檢索出當(dāng)前會(huì)員發(fā)布的相關(guān)文章,這里的~ writer~會(huì)根據(jù)當(dāng)前內(nèi)容的環(huán)境變量進(jìn)行替換后再執(zhí)行查詢。
這里出現(xiàn)在SQL語句中條件查詢的~ writer~,也就是$refObj->Fields[$value]這個(gè)里面的相關(guān)內(nèi)容
模板中使用PHP
許多人希望織夢(mèng)的模板標(biāo)簽?zāi)軌蚋屿`活,加入可以運(yùn)行PHP的功能,這里在織夢(mèng)模板 V5.5中就加入了一個(gè)可以執(zhí)行php的特殊標(biāo)簽{dede:php}{/dede:php},這個(gè)標(biāo)簽可以執(zhí)行PHP語句了。
我這里舉幾個(gè)常用的例子:
1.最簡(jiǎn)單的輸出內(nèi)容:
{dede:php}
$numA = 1;
$numB = 2;
echo $numA + $numB;
{/dede:php}
這個(gè)輸出的內(nèi)容是計(jì)算結(jié)果:
3
2.結(jié)合SQL查詢輸出單條內(nèi)容
{dede:php}
$row = $dsql->GetOne('select id,typename from dede_arctype where id=2');
print_r($row);
{/dede:php}
這個(gè)輸出的內(nèi)容是
Array
(
[id] => 2
[typename] => 問答
)
3.獲取當(dāng)前頁面的變量
比如我們這里進(jìn)入系統(tǒng)后臺(tái)的[模板]-[全局標(biāo)記測(cè)試],我們?cè)诖a中填入下面的內(nèi)容:
{dede:php}
print_r($refObj->Fields);
{/dede:php}
如果環(huán)境變量保持默認(rèn),即“不使用環(huán)境ID”,我們會(huì)看到以下的結(jié)果:
Array
(
[typeid] => 0
[phpurl] => /plus
[indexurl] => /
[templeturl] => /templets
[memberurl] => /member
[specurl] => /special
[indexname] => 主頁
[templetdef] => /templets/default
)
那我們?cè)贀Q個(gè)環(huán)境變量測(cè)試看看,這里以我本地的欄目為測(cè)試了:
Array
(
[id] => 3
[reid] => 0
[topid] => 0
[sortrank] => 1
[typename] => 產(chǎn)品
[typedir] => {cmspath}/product
… …
[indexname] => 主頁
[templetdef] => /templets/default
[position] => 主頁 > 產(chǎn)品 >
[title] => 產(chǎn)品
)
這樣一來就檢索出當(dāng)前頁面的局部變量了,接下來我們可以來結(jié)合前面的SQL語句來實(shí)現(xiàn)根據(jù)不同環(huán)境ID調(diào)用內(nèi)容不同欄目?jī)?nèi)容。
例如:
{dede:php}
$thisid = $refObj->Fields['id'];
$row = $dsql->GetOne('select id,typename from dede_arctype where id='.$thisid);
print_r($row);
{/dede:php}
這樣是來調(diào)用當(dāng)前欄目的標(biāo)題,這個(gè)標(biāo)簽功能類似于{dede:field.typename/}
寫自己的標(biāo)簽,讓別人說去吧
織夢(mèng)模板從V5.3開始就支持自己擴(kuò)展標(biāo)簽,不過許多新人很少用那個(gè)東西,今天我就來簡(jiǎn)單的介紹下如何編寫自己的調(diào)用標(biāo)簽。
我們需要知道下擴(kuò)展標(biāo)簽的存放目錄及文件名構(gòu)成,首先,擴(kuò)展的標(biāo)簽都是存放在/include/taglib這個(gè)目錄,名稱都是以“標(biāo)簽名.lib.php”格式,例如{dede:channel/}標(biāo)簽對(duì)應(yīng)的是channel.lib.php文件。
我們可以看一個(gè)示例標(biāo)簽:demotag.lib.php
if(!defined('DEDEINC'))
{
exit("Request Error!");
}
function lib_demotag(&$ctag,&$refObj)
{
global $dsql,$envs;
//屬性處理
$attlist="row|12,titlelen|24";
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);
$revalue = '';
//你需編寫的代碼,不能用echo之類語法,把最終返回值傳給$revalue
//------------------------------------------------------
$revalue = 'Hello Word!';
//------------------------------------------------------
return $revalue;
}
?>
我們登錄系統(tǒng)后臺(tái)的[模板]-[全局標(biāo)簽測(cè)試]中運(yùn)行{dede:demotag/},顯示如下的結(jié)果:
|