dedecms 自定义标签
来源:互联网 发布:提取微信网页数据库 编辑:程序博客网 时间:2024/05/01 16:32
原文地址:自定义标签">dedecms 自定义标签 作者:落花有意
Dedecms之自定义标签
看了PHP和Dedecms有三天了,记录一下自定义标签的笔记。
我拿一个简单的标签flink来解释一下:
<?php<BR>
//检查是否定义include文件夹的路径DEDEINC<BR> if(!defined('DEDEINC'))
{
exit
(
"RequestError!"
);
}
//写标签时,默认调用的方法
function
lib_flink(&
$ctag
,&
$refObj
)
{<BR>
//声明全局的数据库连接<BR> global$dsql;<BR> //标签拥有的属性和默认值<BR> $attlist="type|textall,row|24,titlelen|24,linktype|1,typeid|0";
FillAttsDefault(
$ctag
->CAttribute->Items,
$attlist
);<BR>
//将标签中的值导入到当前符号表中<BR> extract($ctag->CAttribute->Items,EXTR_SKIP);
$totalrow
=
$row
;
$revalue
=
''
;
//以下为拼装SQL查询语句
$wsql
=
" whereischeck >= '$linktype' "
;
if
(
$typeid
== 0)
{
$wsql
.=
''
;
}
else
{
$wsql
.=
"Andtypeid = '$typeid'"
;
}
if
(
$type
==
'image'
)
{
$wsql
.=
" Andlogo<>'' "
;
}
else
if
(
$type
==
'text'
)
{
$wsql
.=
" Andlogo='' "
;
}
$equery
=
"Select *from #@__flink $wsql order by sortrank asc limit0,$totalrow"
;
//检查标记中是否已经包含innertext底层模板
if
(trim(
$ctag
->GetInnerText())==
''
)
$innertext
=
"<li>[field:link/]</li>"
;
else
$innertext
=
$ctag
->GetInnerText();
//设置查询条件并执行查询
$dsql
->SetQuery(
$equery
);
$dsql
->Execute();<BR>
//通过循环获取查询的对象<BR> while($dbrow=$dsql->GetObject())
{<BR>
if
(
$type
==
'text'
||
$type
==
'textall'
)
{
$link
=
"<a href='"
.
$dbrow
->url.
"'target='_blank'>"
.cn_substr(
$dbrow
->webname,
$titlelen
).
"</a>"
;
}
else
if
(
$type
==
'image'
)
{
$link
=
"<a href='"
.
$dbrow
->url.
"'target='_blank'><imgsrc='"
.
$dbrow
->logo.
"' width='88' height='31'border='0'></a>"
;
}
else
{
if
(
$dbrow
->logo==
''
)
{
$link
=
"<a href='"
.
$dbrow
->url.
"'target='_blank'>"
.cn_substr(
$dbrow
->webname,
$titlelen
).
"</a>"
;
}
else
{
$link
=
"<a href='"
.
$dbrow
->url.
"'target='_blank'><imgsrc='"
.
$dbrow
->logo.
"' width='88' height='31'border='0'></a>"
;
}
}<BR>
//对innertext中的字符串进行值替换(暂时不清楚为什么标签里面的row只是一个数值,但是却在这里能成为一个数组,求解答)<BR> $rbtext= preg_replace("/[field:url([/s]{0,})]/isU", $row['url'],$innertext);
$rbtext
= preg_replace(
"/[field:webname([/s]{0,})]/isU"
,
$row
[
'webname'
],
$rbtext
);
$rbtext
= preg_replace(
"/[field:logo([/s]{0,})]/isU"
,
$row
[
'logo'
],
$rbtext
);
$rbtext
= preg_replace(
"/[field:link([/s]{0,})]/isU"
,
$link
,
$rbtext
);
$revalue
.=
$rbtext
;
}<BR>
//返回替换处理好的字符串<BR> return$revalue;
}
?>
如果有读者对方法的参数&$ctag,&$refObj不是很清楚,请从index.php中的处理开始查看,具体的应该是在include目录下的Dedetag.class.php中。
下面,我们仿照上面的例子自己去写一个标签
<?php
if
(! defined (
'DEDEINC'
)){
exit
(
"RequestError!"
);
}
function
lib_aaa(&
$ctag
,&
$refObj
)
{
global
$dsql
;
$attlist
=
"topid|0,row|10"
;
FillAttsDefault(
$ctag
->CAttribute->Items,
$attlist
);
extract(
$ctag
->CAttribute->Items,EXTR_SKIP );
$condtion
=
""
;
$revalue
=
''
;
if
(
$topid
==0)
{
$condtion
.=
"where topid=0"
;
}
elseif
(
$topid
!=0)
{
$condtion
.=
"where topid <> 0"
;
}
$equery
=
"select* from `#@__arctype` $condtion"
;
if
(trim(
$ctag
->GetInnerText())==
''
)
$innertext
=
"<li>[field:typename/]</li>"
;
else
$innertext
=
$ctag
->GetInnerText();
$dsql
->SetQuery(
$equery
);
$dsql
->Execute();
while
(
$dbrows
=
$dsql
->GetObject())
{
$rbtext
= preg_replace(
"/[field:typename([/s]{0,})]/isU"
,
$dbrows
->typename,
$innertext
);
$revalue
.=
$rbtext
;
}
return
$revalue
;
}
?>
上面的代码比较简单,在这里就不做解释了,直接看测试结果:
//这个测试不包含innertext,默认输出应该是<li><BR>{dede:aaatopid='0'row=10}
{/dede:aaa}
输出结果:
//自带的innertext,应该输出是按照加粗+分割线格式
{dede:aaa topid=
'0'
row=10}
<b>[field:typename/]</b><hr/>
{/dede:aaa}
输出结果:
0 0
- dedecms 自定义标签
- Dedecms 自定义标签开发
- dedecms 自定义标签/自定义函数
- 菜鸟学习Dedecms自定义标签
- dedecms模板定制之如何自定义标签
- JSP 自定义标签库
- dedecms自定义标签调用自定义模型中非空字段文章
- dedecms标签
- dedecms标签
- dedeCMS标签
- dedeCMS标签
- dedecms标签
- dedecms标签
- dedecms 标签
- dedecms 标签
- dedecms的arclist标签下调用自定义字段
- dedecms添加自定义标签显示非dede表数据
- dedecms添加自定义标签显示非dede表数据
- PHP中daddslashes函数
- sublime text 3+minGW 无法读取cin,使用命令行cmd成功运行。
- addslashes与mysql_real_escape_st…
- [插件制作] Discuz插件…
- 浅谈Discuz的缓存机制
- dedecms 自定义标签
- jquery邮箱验证
- DISCUZ X1.5 notification_a…
- Discuz! X2.5安装插件出现:…
- 动态创建二维数组
- 从DB::到C::看dz2.5的变革--Discuz…
- 我已率先抢占昵称,我的昵称独一无…
- 使用Highcharts结合PHP与Mysql生成…
- ecshop商品详细页显示已售商…