最新活动:电脑PC端+手机端+微网站+自适应网页多模板选择-建站388元起价!!!
当前位置:主页 > 网站建设 > 怎样自定义织梦标签初探,织梦文章

怎样自定义织梦标签初探,织梦文章

时间:2023-07-20 10:07:20 阅读: 文章分类: 网站建设 作者: dede开发者

导读:织梦文章织梦文章从这个标题就能看出,这篇不是一个教程,而是本站站长初次研究织梦标签的笔记,因为,第一次学习织梦标签,所以,不作为一个教程,因为里面有一些东西,本人也不确定理解对dede模板堂手机模板dede。

dede模板堂手机模板dede  从这个标题就能看出,这篇不是一个教程,而是本站站dede58模板长初次研究织梦标签的笔记,因为,第一次学习织梦标签,所以,不作为一个教程,因为里面有一些东西,本人也不确定理解对不对。对于一个非技术员,此文可不读。   本人用了织梦几年了,因为,只是用这个程序,也没有详细研究过代码,以前一直仿站,我们知道,织梦仿站只需要会用织梦标签,懂css,html,再会点js那就没有问题。但是如果作二次开发,这远远不够的,从今天开始本人几乎不接单子,完全在做织梦研究,当然,写本篇文章,也是因为给一个老客户,开发一个在线发布系统。他的要求是像图片集一样发布图片,非注册用户也可以这样发布,当然,不是在会员而是在另外的栏目里,说简单点就是像58那样发布信息。   因为,本人以前开发过一个这样的小系统,所以,很容易的就搞定了,但是在处理图片时,遇到了一个小问题,就是如果把插入到数据库里面的字符串,显示在前台,如果只这样做,那还好,但是当用户去修改时,就出问题了,于是研究织梦图片集模型,他用的标签源码在include/channel/img.lib.php这里面,进入处理的,也就是说我们完全可以仿照他去写一个织梦标签,但是,这样麻烦,于是我就另想了一个办法,直接从数据库取出,直接不用织梦标签,这样的好处是直接了当,坏处是会不会有危险,经过本人的一再研究,没有问题。   现在的问题是我要写个跟织梦一样的标签,这样才能显示出我的能力,当然,这是织梦后台模板开玩笑的,主要是想研究一下织梦标签,是如何写的,看了一看织梦官方手册,举了一个小例子,大体看明白了,于是去挨个研究织梦的标签,发现了一个共同的特点:   1.处理标签属性,因为每个标签几乎都有属性,当然,有的也没有。用的代码是:     global $dsql;     $attlist="table|,tablename|,row|8,sort|,if|,ifcase|,orderway|desc";     FillAttsDefault($ctag->CAttribute->Items,$attlist);     extract($ctag->CAttribute->Items, EXTR_SKIP);   第一行:声明一个全局变量$dsql;   第二行:列出属性及其值,属性和值之间用竖线|分隔开来,属性可以没有值,在上面的我们就可以看到,有的属性有值,有的没有。   第三行:把这些属性通过一个函数FillAttsDefault()放到一个数组$ctag->CAttribute->Items里面,这样做的目的就是为下面的一个函数服务的。   第四行:通过extract()这个函数,把数组里面的键作为变量名,值作为变量的值,导入到当前符号表,这样说感觉太专业,很难理解,实际,上面做的目的就是把属性弄成$row=8,orderway=desc类似这样的变量和值的关系,本来属性并不是变量,而经过二个函数一处理,就变成了变量,这样做的目的,就是为了下面,对这些属性值进行判断。举个例子,例如我们调用一个标签,把这个标签的属性row=9,这时,就可以通过上面的变量进行处理了,如果一个标签有属性,那么上面几步是必不可少的。   上面也是本人研究清楚的,下面就是本人还没有确定理解的对不对。   通过上面的属性处理,接下来,就要实例化模板引擎了,如果在标签文件夹里面,直接不用引入include/dedetag.class.php,但在别的地方就要引入。   代码如下:     $innertext = trim($ctag->GetInnertext());     $ctp = new DedeTagParse();     $ctp->SetNameSpace("field","[","]");     $ctp->LoadSource($innertext);     while($row = $dsql->GetArray())     {         foreach($ctp->CTags as $tagid=>$ctag)         {                 if($ctag->GetName()=='array')                 {                         $ctp->Assign($tagid, $row);                 }                织梦cms模板 else                 {                     if( !empty($row[$ctag->GetName()])) $ctp->Assign($tagid,$row[$ctag->GetName()]);                 }         }         $revalue .= $ctp->GetResult();     }     return $revalue;   首先第一行是获取标记之间的文本,这一点没有弄明白,标签之间文本以本人的理解,例如标签{dede:arclist}[field:arcurl/][field:title][field:description/]...{/dede:arclist},就是[field:arcurl/][field:title] [field:description/]...,也叫底层模板。但是有时候可能没有底层模板,也就是$innertext为空,这时,有的标签需要通过一个函数来把模板装入,即$innertext = GetSysTemplets('part_autochannel.htm');(参考channel.lib.php标签源码)。   第二行:实例化 Dede织梦模板类,这个没有什么好说的,必须的。   第三行:设置名子空间$ctp->SetNameSpace("field","[","]");即field,中括号是开始和结束符号,这个要注意,这个是底层模板的名字空间,而织梦标记的名字空间是dede,如果经常做二次开发的话,我们经常碰到。   第四行:把$innertext载入模板字符串,这是织梦程序里面的原话,就这一句,刚开始研究的还真不好理解。   接下来看foreach遍历一个标记数组,当标记为array时,一种处理方式,当标记不为array时,另一种处理方式,但不管哪种,$ctp->Assign($tagid, $row)即Assign分配指定ID的标记的值,这句也是织梦官方的话,简单理解意思是,就是获取标记的值,也就是通过Assign()这个方法,我们获得了这个标记id为$tagid的值,例如:标记title,通过$ctp->Assign($tagid, $row['title'])(即$row['title']==$row[$ctag->GetName()])得到了标记title的值。   所以,$ctp->Assign($tagid, $xxx)是必须的。   最后,通过$ctp->GetResult()获取结果,赋给$reavle,并返回调用处,这时的$reavle的值才是真正的title值。   区别:织梦标签和织梦标记,这二个东西,见到无数次,因为是仿站,所以,对这个没有在意也用不到,但是如果你去研究织梦底层源码的话,必须知道他们之间的区别,织梦标签指的是整个{dede:arclist}[][]{/dede:arclist} 织梦标记指的是:标签里面的arclist,title等,例如,{dede:global name='变量名称'/}这就是一个标签,而里面的global就是一个系统内置标记。   本来想举一个具体的例子,但是由于篇幅太长,把例子放到下一个教程里吧,这个例子里面用的代码是在loop.lib.php万能循环标签里面的,其实,一般的标签第二大部分代码,完全没有这么复杂,如果大家要深度二次开发的话,那么,写织梦标签是必不可少的一步,这一点本人体会比较深,以前做的开发有好几个就用到自定义标签,当时,本人一点也不会,所以,都把单子给了别人,大家可以研究一下织梦那些标签源码,你会收获很多的。相关dede模板堂手机模板dede。

关键词标签: 标签 织梦 自定义

声明: 本文由我的SEOUC技术文章主页发布于:2023-07-20 ,文章怎样自定义织梦标签初探,织梦文章主要讲述标签,自定义,织梦网站建设源码以及服务器配置搭建相关技术文章。转载请保留链接: https://www.seouc.com/article/web_31519.html

我的IDC 网站建设技术SEOUC.COM
专注网站建设,SEO优化,小程序设计制作搭建开发定制网站等,数千家网站定制开发案例,网站推广技术服务。
  • 5000+合作客服
  • 8年从业经验
  • 150+覆盖行业
  • 最新热门源码技术文章