`
xrzhang
  • 浏览: 6205 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

dedecms中的底层模版

PHP 
阅读更多
底层模板(Innertext),底层模板实际上就是对于有多条记录的模板输出,用户手工去指定单个记录的

样式。
  因为这个概念很虚线,那么这个地方还是通过实践去说明吧。
  大家在标签测试的地方输入:
  这是使用默认底层模板的标签:
  {dede:arclist row=10}{/dede:arclist} <hr>
  这是手工指定底层模板的标签:
  {dede:arclist row=5}
  ◆ <a href=’[field:arcurl/]’>[field:title /]</a> 点击:[field:click/] <br />
  {/dede:arclist}
  有一点需注意的是,在没有指定底层模板(Innettext)的时候,系统一般调用 templets/system 里的

相应该文件作为底层模板。例如: {dede:arclist row=10}{/dede:arclist} 它实际由系统默认调用了

templets/system/part_arclist.htm 这文件的东西作为底层模板。这文件的内容是  ·<a

href="[field:filename /]">[field:title /]</a><br/>那么 {dede:arclist row=10}{/dede:arclist}
  就等同于{dede:arclist row=10}·<a href="[field:filename /]">[field:title /]</a><br/>

{/dede:arclist}既能用短标记,也能直接定义样式,又不依赖数据库,这是dedecms模板和其它模板的

最大区别。
  在标记之间 [field:…/] 这些就是底层模板变量,这些标记一般也是属于 Dedecms 标签的模式,只

是 { … } 符号改为了 [ … ],因此底层模板中的标签也是具有DedeCms标签的特性的,例如,在底层

模板中使用 [field:global name=’cfg_webname’/] 同样可以表示全局变量 $cfg_webname。
  具体哪些标记可以用Innertext,那些不可以用,可以在

http://www.dedecms.com/archives/templethelp/help/index.htm这页面参考。
  在此我简单介绍一下常用的 arclist 标记的底层模板字段及意义:
  arclist的底层模板字段实际上是对应相应该的主索引表的,在文档模板中则对应该主表和附加表,主

表字段是一样的,我等会介绍一下,附加表的可以在模型里找。
  arclist常用的字段有:
  ID(同 id),title(标题),color,typeid(栏目ID),description(摘要,同 info),writer(作

者),shorttitle(短标题),memberid(会员ID),pubdate(发布时间),click,litpic(缩图图,同

picname),typename(栏目名称),arcurl(网址,同 filename),typeurl(栏目网址)stime(pubdate

的"0000-00-00"格式,等同于[field:pubdate function="strftime('%y-%m-%d',@me)"/]),textlink(等

同<a href='[field:arcurl /]'>[field:title/]</a>),typelink(等同<a href='[field:arcurl /]'>

[field:title/]</a>),,imglink(等同<a href='[field:arcurl /]'><img src='[field:picname/]'

border='0'></a>),image(等同<img src='[field:picname/]'>),大家需注意的一个问题是:[field:标

记名称/]这种写法是仅在底层模板中才用的。在文档模板中,字段是用 {dede:field name='title'/}这

样形式表示的。不过在一种特殊的情况下,Innertext是无效的,就是指定了 runphp=’yes’ 属性,:

A、function 扩展;B、在Innertext中直接编程。
  一、那么首先说 A、function 扩展:
  在标记中,可以使用 {dede:标记名称 function=”函数名(@me,其它参数)” /}这样模式对标记的值

进行处理,其中 @me 就是表示标记当前的值,最终获得的结果是这个函数返回的值。
  大家不妨测试一下下面这个标签:{dede:global function="file_get_contents

('http://www.baidu.com')" /}
  下面再举个实用的例子(测试一下):
  {dede:arclist row=5}
  ◆ <a href='[field:arcurl/]'>[field:title /]</a>
  [field:pubdate function="strftime('%y-%m-%d %H:%M',@me);"/]<br />
  {/dede:arclist}
  从实例中大家可以注意到,{dede:xx/}和[field:xxx/}都支持function扩展。实际上 [field:xxx/]

这种模式也是dede标签解析器解析的,所以作用一样,它只是把 dede 换成 field { 换成 [在这里,

function 属性的 function 不仅是用PHP自带的,用自己定义的也行。不过要注意function的格式,自

定义的function不能用echo这样的输出,而是返回一个字符串,这样就行了。
  写好的函数放入 include/inc_channel_unit_functions.php 文件,因为dede核心都会调用这个文件


  这里举个简单的函数:
  function testMyFunc($str){return $str." 增加了我的东西哦!";}
  在标签中使用:
  {dede:global name='cfg_webname' function='testMyFunc(@me)'/}
  用function扩展的好处是既可以增强系统的功能,又保持标记的简洁。
  二、下面介绍的是另一种扩展 B、在Innertext中直接编程这种方式和function编程的不同之处是,你

可以把PHP代码直接写入到标签的底层模板代码的地方,不过需要注意的是,在这里的PHP代码并非完全

意义上的PHP代码,它必须符合Dede限定的格式,即是最终返回值返回到 @me 变量中,同样的是用 @me

表示标记的最初的值。
  使用格式: {dede:标记名称 runphp=yes} PHP代码{/dede:标记名称}
  大家测试一下这个代码:
  {dede:global name='cfg_webname' runphp='yes'}
  $baidu = file_get_contents("http://www.baidu.com");preg_match_all("/<title>(.*)

<\/title>/isU",$baidu,$baidus);@me = $baidus[1][0];{/dede:global}
  这里的 cfg_webname 不再显示当前站点名了,因为 @me = $baidus[1][0]; 改变了它的值。
  在使用标记内编程或function扩展时,很多情况都可能会调用数据库。在V5版本中,DedeCms的数据库

进行了改进,无论你新建多少个类的对像,最终打开的链接是只有一个的,并且会生成一个 $dsql 的全

局数据库类的变量。
  以往有些懂dedecms数据库类的人在调用function扩展的时候,一般的做法是用 $dsql = new

DedeSql(false); 这样新建一个类。实际上在V5中是不需要这样的。直接用 global $dsql;声明一下就

能使用,并且在函数体中不要自行关闭(即执行 $dsql->Close())否则可能出错。
  那么在这里举个简单的例子(测试代码):
  {dede:global runphp='yes'}
  global $dsql;$restr = '';$dsql->SetQuery("Select * From dede_feedback where  ischeck=1

order by ID desc  limit 5");$dsql->Execute('feedback');while($row = $dsql->GetArray

('feedback')){$restr .= "<a target='_blank' href='/plus/feedback.php?arcID={$row['aid']}

&urlindex={$row['urlindex']}'>{$row['arctitle']}</a> -- ".cn_substr($row['msg'],200)."<hr

/>";}
  @me = $restr;{/dede:global}
  这代码是调用最新评论的。dede本身没有提供直接调用评论的标签,一般懂的人用loop标签调用,不

过在本版中,新增的SQL标签会更简单。
  在 DedeCms V5 中有一个标签{dede:sql sql="SQL语句 limit 记录"}底层模板{/dede:sql}
  我现在改一下刚才调用评论的地方(测试代码):
  {dede:sql sql="Select * From dede_feedback where  ischeck=1 order by ID desc  limit 5"}
  <a target='_blank' href='/plus/feedback.php?arcID=[field:aid/]&urlindex=

[field:urlindex/]'>[field:arctitle/]</a> -- [field:msg/]<hr />
  {/dede:sql}
  这结果应该和上面的代码是一样的。
  为了补允调用全站数据的不足,V5中新增了 arcfulllist 标记,它的作用与 arclist 标记有点类同

,不示不同的是 arcfulllist 里的文件名有时候可能是动态的,这因为它是使用搜索时用的那个简单索

引表。在专题文章、相关文章中默认都是使用 arcfulllist 调用指定的 id 的文档的。
  由于这标记可能造成文件名不同步,我们系统后面增加了文档名批量修正功能,但为了防止忘记操作

,建议建立栏目就设定好文档命名规则,以后不要经常更改。
  一就是常用的模型,二是新出的模块,三是插件。
  大家进到Dede管理后台“频道管理->内容模型管理”的地方可以看到:
  分类信息专题普通文章图片集软件Flash产品这些都是内置的模型。大家也可以自己新建一个模型,有

不少人问:Dedecms的文存储在哪里呀?下面我一步一步的教大家建立一个用文本存储的文章模型。
  首先“增加一个新模型”,建立好后“添加字段”,然后转向栏目管理的地方。建立好后转到栏目管

理的地方新建一个顶级栏目,内容模型选刚才建好的那个。建立好栏目后,随意在那个栏目增加一篇文

章。预览文章,会发生新增的模型显示的文档。现在再回到频道模型管理的地方,在新建的频道点击“

模板”。
  对于类同的模型,最好是把类同的模板作为当前模型的模板。如刚才建立的模型,实际上模板和普通

文章模板是一样的。
  关于字段的问题,在文档模板中字段是用{dede:field name='字段名'/}表示。例如在软件模型中文件

类型  filetype  单行文本(varchar)  固化表单  [修改]
  语言  language  单行文本(varchar)  固化表单  [修改]
  软件类型  softtype  单行文本(varchar)  固化表单  [修改]
  授权方式  accredit  单行文本(varchar)  固化表单  [修改]
  操作系统  os  单行文本(varchar)  固化表单  [修改]
  软件等级  softrank  整数类型  固化表单  [修改]
  官方网址  officialurl  单行文本(varchar)  固化表单  [修改]
  语言这字段就可以用 {dede:field name='language'/} 表示,此外,title , keywords,description

这些实际上主索引表的东西,刚才说模板时已经介绍过它的含义了。
  有用户提过一个问题,就是关于自定义模型如何在表布表单中调整字段的顺序。Dedecms目前没有这选

项,需要改的必须用 phpmyadmin 进入 it_channeltype  这个表。编辑 fieldset 这里的XML,调一下

位置就行了。
  此外大家要区别一下自动模型和系统模型的区别,系统模型是固化了的,要调整必须自己修改程序,

对于普通人是无法改的。不过这版本允许自行增加一些字段在里面。
  因为这次讲座是个中级讲座,模型这块我就不太深入的讲解了,最后介绍一下插件和模块。
  插件和模块DEDE增加新模型,必须一步到位,如果不用phpmyadmin,输入错误什么的,在后台修改不了。
  插件在Dedecms中是就是一些小的实际的程序的集合,它可以简单的安装和删除,不过安装和删除仅去

去掉数据库的索引记录,并非进行真正的安装。
  官方网前自带的插件有:
  文件管理器站内新闻发布友情链接模块留言簿模块投票模块论坛扩展广告管理正则规则测试器随机模

板防采集木马扫描检测数据转换与导入实际上很多情况下单用插件是满足不了系统的需求的,实际上很

多情况下单用插件是满足不了系统的需求的。因此Dedecms V5提出了模块的概念。
  模块是对系统模型的一个补充,因为Dedecms的模板解析机制相对复杂,如果所有东西都依赖模型,就

结果只有一个:速度越来越慢。而使用模块就补充了这方面的不足。在 Dedecms V5 的菜单中“扩展模

块”里放的就是Dedecms的模块。
  模块文件是一个标准化的xml文件,它即包含了模块安装删除的数据,也偶包含了图片等二进制文件。

有些人问我,为什么在DedeCms V5的安装包里没发现ask、group等目录?因为这些东西都封装起来了,

如果你不安装它,是不会看到这些文件的,这样就能尽大限度满足一些站长想要功能多,一些想要功能

实用的需求。

分享到:
评论

相关推荐

    dedecms标签语法.docx

    底层模板可以访问到如`ID`、`title`、`iscommend`、`color`、`typeid`等一系列字段,用于构建具体的文档列表展示。 - `ID`(同`id`):文档ID。 - `title`:文档标题。 - `iscommend`:是否为推荐。 - `color`...

    CMS程序DedeCms v4.0 RC1 Build20071112-dedecms4.0rc1.zip

    对于想要深入研究或者从事PHP CMS开发的人来说,DedeCms v4.0 RC1及其相关的学习资料是一个很好的起点,尤其是结合标签中的"源代码"和"C语言",可以理解系统的底层实现,为今后的编程和定制开发打下基础。...

    [CMS程序]DedeCms 5.3 UTF-8英文版_dedecmsv51sp1-utf8-92rmb.zip

    【标签】中的“数据集”、“源代码”、“计算机资料”、“学习资料”等标签暗示了这个压缩包可能包含了与DedeCms相关的教程、示例代码或数据库样本,对于学习和理解DedeCms的运作原理非常有帮助。而“python”、...

    织梦标签.pdf

    - `{dede:field.pubdate function="MyDate(d日, @me)"/}`:在底层模板中调用,格式化为年月日日时分。 - `{dede:field.source/}`:输出文章的来源。 - `{dede:field.writer/}`:输出文章的作者。 3. **其他功能...

    课程dede标签手册.pdf

    Arclist标记的底层模板字段提供了丰富的信息,如文档ID、标题、是否被推荐、所属栏目ID、是否已生成静态页、描述、作者、短标题、发布日期、发布时间、阅读量、缩略图信息以及各种链接等。这些字段可以通过模板标签...

    开心客栈笑话网站源码(dede内核)

    在这个特定的案例中,"开心客栈笑话网站"是一个专门发布幽默、搞笑内容的在线平台,其源码是用DEDECMS构建的,意味着你可以看到并修改该网站后台运行的全部代码,以适应个性化需求或进行二次开发。 【描述】"开心...

    dede sql使用技巧

    在Dreamweaver内容管理系统(简称DedeCMS)中,`dede:sql`标签被广泛应用于从模板中执行自定义的SQL查询,并获取其返回的结果。这一功能极大地提高了系统的灵活性与可扩展性,尤其是在需要对数据库进行更为复杂的...

    44个织梦自带类打包

    织梦内容管理系统(DedeCMS)是一款广泛应用的开源PHP网站建站系统,以其灵活的模板引擎和强大的内容管理功能受到广大开发者的喜爱。"44个织梦自带类打包"是一个包含了DEDE类库的压缩文件,这个集合是用于研究、学习...

    非常大气漂亮的作文网站源码(织梦内核).rar

    标题中的“非常大气漂亮的作文网站源码(织梦内核)”表明这是一款基于织梦内容管理系统(DedeCMS)构建的作文网站源代码。织梦内核是这款网站的核心,意味着它使用了织梦提供的PHP框架和模板系统,使得网站具有良好...

    解析二次开发

    2. 产品了解:理解开源产品的操作,如Dedecms的栏目管理、文章发布、模板标签使用等,以及其核心概念如模型和安全过滤。 3. 数据库与核心文件:熟悉数据库设计,了解核心文件的功能,如数据库操作类、安全过滤机制和...

    类优客逸家租房网PHP源码

    在这个租房网源码中,织梦可能作为后台管理系统的框架,提供模板管理、文章发布、用户管理等核心功能。织梦的易维护性意味着用户和管理员可以轻松进行内容更新、布局调整和功能扩展,而无需深入理解底层代码。 对于...

    经典建站教程网整站源码(dede 5.7内

    dede 5.7是其较为流行的一个稳定版本,以其强大的模板引擎、灵活的扩展性和易用性受到了众多网站开发者和管理员的喜爱。这个版本包含了丰富的功能模块,如文章管理、下载管理、图库管理等,能够满足多样化的需求。 ...

Global site tag (gtag.js) - Google Analytics