标签织梦dedecms_自己制作标签教程02

dedecms教程  时间:2021-03-19  阅读:()

首先我简单的介绍下自己我是织梦官方团队的天涯接触织梦也有2年多时间了之前一直在论坛上做斑竹认识了很多喜爱织梦的朋友后来便加入了织梦团队发现这是一个充满朝气、有激情和学习力的地方这次受站长网的邀请来给大家做一次DedeCMS程序方面的讲座。

因为这次主要是讲座缺乏体系的培训内容本次讲座我将织梦技术论坛较为常见的问题加以整理并结合一些其他方面的应用内容进行补充让大家更了解DedeCMS程序的使用。

安全设置

首先是程序安全问题这里主要是一些拥有独立服务器的站长如果自己在系统安全部署上面有些经验那应该没有什么问题有部分站长没有系统安全部署的经验加上现在挂马猖獗所以许多人都在担心官方在早些时候就发了一个关于《DedeCms V5.3/V5.5安全设置指南》的主题帖地址为http://bbs.dedecms.com/172474.html 这里面说了如何在Win Serv环境配置服务器环境。

不过文中提到了织梦的文件目录这里我对整个系统文件目录进行一个说明http://bbs.dedecms.com/178324.html 当然如果你安装个模块会相应的增加一些目录例如模块g rou p、ask等。

{d ed e:sq l}标签的用法sq l标签可以称得上是个万能标签了查询数据库将其输出这里介绍一些关于这个标签的用法

1.用来输出统计内容这个是不错的举个例子我们来统计下总共发了多少的文章思路就是输出dede_addonarticle这个文章附加表内容总数就可以了。

{dede:sql sql="SELECT COUNT(*)AS nums FROM dede_addonarticle"}

[field:name="nums"/]

{/dede:sq l}

2.使用~fie ld~来进行特殊的查询 比如之前论坛上面很多会员需要做一个输出当前发布文章会员的相关内容之前用sq l或者a rc li st标签是没办法实现的 因为每篇内容是不同的这里我们来用5.5的sq l语句来做个示范。

我们首先在文章模板中相应的位置加上下面的标签

{dede:sq l sq l="SELECT* FROM dede_archives W HERE w riter=~w riter~"}

[fie ld: id/],

{/dede:sq l}

这个放到a rt ic le_a rt ic le.ht m页面将会检索出当前会员发布的相关文章这里的~w rite r~会根据当前内容的环境变量进行替换后再执行查询。

这里出现在SQ L语句中条件查询的~w rite r~也就是$refObj->Fie ld s[$value]这个里面的相关内容

模板中使用PHP

许多人希望织梦的模板标签能够更加灵活加入可以运行PHP的功能这里在DedeCMSV5.5中就加入了一个可以执行php的特殊标签{dede:php}{/dede:php}这个标签可以执行PHP语句了。

我这里举几个常用的例子

1.最简单的输出内容

{dede:ph p}

$numA=1;

$numB=2;echo$numA+$numB;

{/dede:php}

这个输出的内容是计算结果

3

2.结合SQL查询输出单条内容

{dede:ph p}

$row=$dsql->GetOne('select id,typename from dede_arctype where id=2');p rin t_r($row);

{/dede:php}

这个输出的内容是

A rray

(

[id]=>2

[typename]=> 问答

)

3.获取当前页面的变量

比如我们这里进入系统后台的[模板]-[全局标记测试]我们在代码中填入下面的内容{dede:ph p}p rint_r($refO bj->Fie ld s);

{/dede:php}

如果环境变量保持默认 即“不使用环境ID”我们会看到以下的结果

A rray

(

[typeid]=>0

[phpurl] =>/plus

[indexurl] =>/

[te m p letu rl] =>/te m p let s

[memberurl] =>/member

[specu rl] =>/special

[indexname]=>主页

[te m p letd e f] =>/te m p let s/d e fa u lt

)

那我们再换个环境变量测试看看这里以我本地的栏目为测试了

A rray

(

[id]=>3

[re id] =>0

[to p id]=>0

[so rt ra n k]=>1

[typename]=>产品

[typedir] =>{cmspath}/product

……

[indexname]=>主页

[te m p letd e f] =>/te m p let s/d e fa u lt

[posit io n] =>主页>产品>

[t it le] =>产品

)

这样一来就检索出当前页面的局部变量了接下来我们可以来结合前面的SQL语句来实现根据不同环境ID调用内容不同栏目内容。

例如

{dede:ph p}

$th isid=$refObj->Fie ld s[' id'];

$row=$dsql->GetOne('select id,typename from dede_arctype where id='.$thisid);p rin t_r($row);

{/dede:php}

这样是来调用当前栏目的标题这个标签功能类似于{dede:fie ld.type name/}

写自己的标签让别人说去吧

DedeCMS从V5.3开始就支持自己扩展标签不过许多新人很少用那个东西今天我就来简单的介绍下如何编写自己的调用标签。

我们需要知道下扩展标签的存放目录及文件名构成首先扩展的标签都是存放在/include/taglib这个目录名称都是以“标签名. lib.php”格式例如{dede:channel/}标签对应的是channel. lib.php文件。

我们可以看一个示例标签 demotag. lib.phpif(!defined('DEDEINC'))

{exit("Request Error!");

}

function lib_demotag(&$ctag,&$refObj)

{global$dsql,$envs;

//属性处理

$att list="row|12,t it le le n|24";

Fi l lAttsDefau lt($ctag->CAtt rib ute->Ite ms,$att list);ext ract($ctag->CAtt ribute->Ite ms, EXT R_SKIP);

$revalue=' ';

//你需编写的代码不能用ec ho之类语法把最终返回值传给$revalu e

//------------------------------------------------------

$revalue='He llo W ord!';

//------------------------------------------------------retu rn $revalue;

}

?>

我们登录系统后台的[模板]-[全局标签测试]中运行{dede:demotag/},显示如下的结果

这里我们知道其实标签生成的内容其实是这个函数的一个返回值这里返回的内容都是字符串也就是函数retu rn $revalue;中的$revalue需要是经过处理后生成的字符串。

$att list="row|12,t it le le n|24";这个是属性列表这个经过函数处理后会直接生成变量并复制我们可以测试下做如下的修改

$revalue='He llo W ord!';

$revalue .="

Row:".$row.";Tit le Len:".$tit le le n;

这样我们可以看到这个属性已经被创建变量并且赋值了。

接下来我们可以再进一步去修改这个标签。

比如说我们需要写一个标签专门来查询文章内容页的那个相关文章功能类似于上面sq l标签中的那个sq l只是这里我们将其分装为一个标签。

我们可以新建一个标签例如叫w rite ra rc那我们就需要创建一个w rit e ra rc. lib.p h p然后模仿de mot ag编写函数注意需要修改为fu n ct io n lib_w rite ra rc(&$ct ag,&$refO bj)

接下来我们就可以编写查询语句及对底层模板处理的相关函数了

$revalue=' ';

$innertext=$ctag->GetInnerText();

$ctp=new DedeTag Parse();

$ctp->Set NameSpace('field', '[', ']');

$sq l="SELECT* FRO M dede_arch ives W H ERE w rite r='{$refObj->Fie lds['w rite r']}' lim it 0,$row";

$innertext这个是用来获取标签的底层模板的 $ctp创建用于处理底层模板中的变量并处理进行替换。我们根据获取的属性编写我们的sq l语句这里我们使用lim it 0,$row这样就可以根据$row来确定查询的内容数目。

当然我们可以获取更多的属性以便我们这个标签更强大例如我们可以增加类似于a rc l ist中的相关属性并在函数中进行处理不过这个需要有一定的PHP基础。

接下来我们通过执行查询对sq l及输出变量进行处理

$d sq l->Exe cut e('me',$sq l);w h ile($rs=$d sq l->GetA rray('me'))

{

//根据属性处理查询变量

$rs['t it le'] =cn_su bst r($rs['t it le'], $t it le le n);

//获取底层模板

$ctp->LoadSource($innertext);

foreach($ctp->CTags as$tagid=>$ctag){if(!empty($rs[strtolower($ctag->Get Name())])) {

$ct p->Assig n($tag id,$rs[$ctag->Get Name()]);

}

}

//根据底层模板及查询变量得到处理结果

$revalu e .=$ct p->Get Re su lt();

}

这样我们就将查询出来的结果同底层模板中出现的相关变量进行替换然后生成输出字符串将所有的字符串信息存储到$revalue中。

最后返回这个值retu rn $revalue;

整个文件内容如下if(!defined('DEDEINC'))

{exit("Request Error!");

}fu n ct io n lib_w rite ra rc(&$ct ag,&$refO bj)

{global$dsql,$envs;

//属性处理

$att list="row|12,t it le le n|24";

Fi l lAttsDefau lt($ctag->CAtt rib ute->Ite ms,$att list);ext ract($ctag->CAtt ribute->Ite ms, EXT R_SKIP);

$revalue=' ';

$innertext=$ctag->GetInnerText();

$ctp=new DedeTag Parse();

$ct p->Set NameSpace('fie ld', '[', ']');

$sq l="SELECT* FRO M dede_arch ives W H ERE w rite r='{$refO bj->Fie lds['w rite r']}' lim it 0,$row";

$d sq l->Exe cut e('me',$sq l);w h ile($rs=$d sq l->GetA rray('me'))

{

//根据属性处理查询变量

$rs['t it le'] =cn_su bst r($rs['t it le'], $t it le le n);

//获取底层模板

$ctp->LoadSource($innertext);foreach($ctp->CTags as$tagid=>$ctag){if(!empty($rs[strtolower($ctag->Get Name())])) {

$ct p->Assig n($tag id,$rs[$ctag->Get Name()]);

}

}

//根据底层模板及查询变量得到处理结果

$revalu e .=$ct p->Get Re su lt();

}retu rn $revalue;

}

?>

接下来我们来测试我们这个标签我们修改a rt ic le_a rt ic le.ht m模板在里面加入以下的标签代码

{d ed e:w rite ra rc row='10' t it le le n='6'}

[fie ld:t it le/]

{/de de:w rit e ra rc}

通过动态浏览页面进行查看调试http://www.dedecms.com/plus/view.ph p?aid=3我们会发现标签起作用了输出了我们的内容。

至此我们完成了标签的编写这里面主要涉及到PHP、 MySQL的很多知识需要有一定相关方面的基础才能够编写标签了 当然这里只是一个简单的标签开发例子还有许多的东西可以去开发。

提速啦:美国多IP站群云服务器 8核8G 10M带宽 7IP 88元/月

提速啦(www.tisula.com)是赣州王成璟网络科技有限公司旗下云服务器品牌,目前拥有在籍员工40人左右,社保在籍员工30人+,是正规的国内拥有IDC ICP ISP CDN 云牌照资质商家,2018-2021年连续4年获得CTG机房顶级金牌代理商荣誉 2021年赣州市于都县创业大赛三等奖,2020年于都电子商务示范企业,2021年于都县电子商务融合推广大使。资源优势介绍:Ceranetwo...

VPS云服务器GT线路,KVM虚vps消息CloudCone美国洛杉矶便宜年付VPS云服务器补货14美元/年

近日CloudCone发布了最新的补货消息,针对此前新年闪购年付便宜VPS云服务器计划方案进行了少量补货,KVM虚拟架构,美国洛杉矶CN2 GT线路,1Gbps带宽,最低3TB流量,仅需14美元/年,有需要国外便宜美国洛杉矶VPS云服务器的朋友可以尝试一下。CloudCone怎么样?CloudCone服务器好不好?CloudCone值不值得购买?CloudCone是一家成立于2017年的美国服务器...

极光KVM美国美国洛杉矶元/极光kvmCN7月促销,美国CN2 GIA大带宽vps,洛杉矶联通CUVIP,14元/月起

极光KVM怎么样?极光KVM本月主打产品:美西CN2双向,1H1G100M,189/年!在美西CN2资源“一兆难求”的大环境下,CN2+大带宽 是很多用户的福音,也是商家实力的象征。目前,极光KVM在7月份的促销,7月促销,美国CN2 GIA大带宽vps,洛杉矶联通cuvip,14元/月起;香港CN2+BGP仅19元/月起,这次补货,机会,不要错过了。点击进入:极光KVM官方网站地址极光KVM七月...

dedecms教程为你推荐
巡查在线代理开启javascript怎么在浏览器中启用JavaScript?的是cuteftp三友网网测是什么意思?本帖隐藏的内容怎么设置本帖隐藏的内容需要回复才可以浏览discuz 代码谁能帮我把本地设置好的DISCUZ x2.5论坛放上服务器?或者怎么弄?能详细说下嘛?shopex分销王商派的分销王怎么样?听说ShopEx还是大牌子?上传软件怎样蓝牙面对面传软件如何显示隐藏文件怎么把隐藏的文件显示出来lockdown安装LockDown Pro所有程序不能打开,在线求助
com域名 私服服务器租用 景安vps 域名备案只选云聚达 谷歌域名邮箱 鲜果阅读 evssl dropbox网盘 牛人与腾讯客服对话 灵动鬼影 怎样建立邮箱 服务器合租 1美金 服务器监测 万网空间购买 服务器硬件防火墙 双线asp空间 阿里云官方网站 宿迁服务器 杭州电信宽带 更多