dedecms中的有些功能如何修改(DEDECMS 扩展标签和dede自定义标签实现方法)
dedecms中的有些功能如何修改
DEDECMS 扩展标签和dede自定义标签实现方法
我们需要知道下扩展标签的存放目录及文件名构成,首先,扩展的标签都是存放在/include/taglib这个目录,名称都是以“标签名.lib.php”格式,例如{dede:channel/}标签对应的是channel.lib.php文件。
我们可以看一个示例标签: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;
}
?>
我们登录系统后台的[模板]-[全局标签测试]中运行{dede:demotag/},显示如下的结果:
,我们会发现标签起作用了,输出了我们的内容。
至此我们完成了标签的编写,这里面主要涉及到PHP、MySQL的很多知识,需要有一定相关方面的基础才能够编写标签了,当然这里只是一个简单的标签开发例子,还有许多的东西可以去开发。
这里我们知道,其实标签生成的内容其实是这个函数的一个返回值,这里返回的内容都是字符串,也就是函数return $revalue;中的$revalue需要是经过处理后生成的字符串。
$attlist="row|12,titlelen|24";这个是属性列表,这个经过函数处理后会直接生成变量并复制,我们可以测试下,做如下的修改:
$revalue = 'Hello Word!';
$revalue .="
Row:".$row.";TitleLen:".$titlelen;
这样我们可以看到,这个属性已经被创建变量并且赋值了。
接下来我们可以再进一步去修改这个标签。
比如说我们需要写一个标签专门来查询文章内容页的那个相关文章,功能类似于上面sql标签中的那个sql,只是这里我们将其分装为一个标签。
我们可以新建一个标签,例如叫writerarc,那我们就需要创建一个writerarc.lib.php,然后模仿demotag编写函数,注意需要修改为
function lib_writerarc(&$ctag,&$refObj)
接下来我们就可以编写查询语句及对底层模板处理的相关函数了
$revalue = '';
$innertext = $ctag->GetInnerText();
$ctp = new DedeTagParse();
$ctp->SetNameSpace('field', '[', ']');
$sql = "SELECT * FROM dede_archives WHERE writer='{$refObj->Fields['writer']}' limit 0, $row";
$innertext这个是用来获取标签的底层模板的,$ctp创建用于处理底层模板中的变量,并处理进行替换。我们根据获取的属性编写我们的sql语句,这里我们使用limit 0, $row,这样就可以根据$row来确定查询的内容数目。
当然我们可以获取更多的属性以便我们这个标签更强大,例如我们可以增加类似于arclist中的相关属性,并在函数中进行处理,不过这个需要有一定的PHP基础。
接下来我们通过执行查询对sql及输出变量进行处理:
$dsql->Execute('me',$sql);
while($rs = $dsql->GetArray('me'))
{
//根据属性处理查询变量
$rs['title'] = cn_substr($rs['title'], $titlelen);
//获取底层模板
$ctp->LoadSource($innertext);
foreach($ctp->CTags as $tagid=>$ctag) {
if(!empty($rs[strtolower($ctag->GetName())])) {
$ctp->Assign($tagid,$rs[$ctag->GetName()]);
}
}
//根据底层模板及查询变量得到处理结果
$revalue .= $ctp->GetResult();
}
这样我们就将查询出来的结果同底层模板中出现的相关变量进行替换,然后生成输出字符串,将所有的字符串信息存储到$revalue中。
最后返回这个值return $revalue;
整个文件内容如下:
if(!defined('DEDEINC'))
{
exit("Request Error!");
}
function lib_writerarc(&$ctag,&$refObj)
{
global $dsql,$envs;
//属性处理
$attlist="row|12,titlelen|24";
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);
$revalue = '';
$innertext = $ctag->GetInnerText();
$ctp = new DedeTagParse();
$ctp->SetNameSpace('field', '[', ']');
$sql = "SELECT * FROM dede_archives WHERE writer='{$refObj->Fields['writer']}' limit 0, $row";
$dsql->Execute('me',$sql);
while($rs = $dsql->GetArray('me'))
{
//根据属性处理查询变量
$rs['title'] = cn_substr($rs['title'], $titlelen);
//获取底层模板
$ctp->LoadSource($innertext);
foreach($ctp->CTags as $tagid=>$ctag) {
if(!empty($rs[strtolower($ctag->GetName())])) {
$ctp->Assign($tagid,$rs[$ctag->GetName()]);
}
}
//根据底层模板及查询变量得到处理结果
$revalue .= $ctp->GetResult();
}
return $revalue;
}
?>
接下来我们来测试我们这个标签,我们修改article_article.htm模板,在里面加入以下的标签代码:
{dede:writerarc row='10' titlelen='6'}
[field:title/]
{/dede:writerarc}
- dedecms如何更改主页模板(织梦dedecms sitemap路径修改方法)
- dedecms中的有些功能如何修改(DedeCms参考手册、函数及文件大全)
- dedecms怎么设置下拉菜单(织梦DedeCMS实现 三级栏目_二级栏目_一级栏目_网站名称 的效果代码)
- dedecms导航条长度(去掉dedecms友情链接中的LI标签的方法)
- dedecms搜索功能怎么设置详细(织梦Dedecms软件频道下载次数真实显示的权宜修改)
- dedecms文章点击量(Dedecms文章标题及文章摘要长度修改的方法)
- dedecms更改主页模板(dedecms首页调用专题页描述和链接的实现方法)
- dedecms仿站教程(如何让dedecms变成全站动态浏览有利于企业站)
- dedecms权限调整(增加dedecms后台留言管理功能)
- dedecms关闭站点(dedecms搬家后出现/include/templets/default/index.htm Not Found!解决方案)
- 织梦模板被挂了怎么办(详解简单修改DEDECMS织梦模板防止网站挂马的教程)
- dedecms5.7能否用5.5的模板(dedecms 5.5 伪静态设置方法)
- dedecms制作的网站如何发布(DedeCms后台添加编辑文章空白的解决方法)
- dedecms技术(dedecms 初级入门使用教程)
- dedecms分页修改(Dedecms图片加上Alt和Title等属性的修改方法)
- dedecms栏目怎么调用友情链(DedeCms用SQL语句调用数据库任意内容方法)
- 得这个 难治病 的人太多了,300个人赶到杭州商量怎么办(得这个难治病的人太多了)
- 经度,世界时间腕表的灵魂(世界时间腕表的灵魂)
- 阿里最新财报公布 三季度营收增长3 ,将增加150亿美元回购额度 在美股价小涨(阿里最新财报公布)
- 赵薇时胖时瘦 最近变美少女 原因在这里 躺着就变瘦(赵薇时胖时瘦最近变美)
- 学会这26种姿势,你就可以和兵哥哥切磋了(你就可以和兵哥哥切磋了)
- 吴彦祖陈冠希 恩怨 ,失去曾让他流泪的女友,终遇走过18年真爱(吴彦祖陈冠希恩怨)
热门推荐
- tensorflow自定义初始化(Tensorflow分类器项目自定义数据读入的实现)
- dedecms怎么设置栏目(DEDECMS实现在标签中嵌套调用SQL的方法)
- dataframe数据处理教程(对dataframe数据之间求补集的实例详解)
- sql server 知识大全(sql server 交集,差集的用法详解)
- css中有几种样式表(深入浅出学习层叠样式表--css推荐)
- python 时间戳转化为格式(Python datetime和unix时间戳之间相互转换的讲解)
- 如何用jquery进行表单验证(jQuery实现发送验证码控制按钮禁用功能)
- 常用的云服务器有哪些(云服务器通常用哪个操作系统比较好?)
- 查询mysql 死锁(MySQL线上死锁分析实战)
- 阿里云ecs开放所有端口(阿里云ECS实例使用ssh命令登录时出现“No supported key exchange algorithms”报错的解决)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9