DEDECMS模板制作一
1.模板后缀应为“htm”
2.系统的模板目录在系统根目录下的templets内,下面是模板目录的文件目录结构。
/templets·········································································
├─default······································································默认模板目录
│├─images································································ 模板图片目录
││├─mood····························································
││└─photo····························································
│├─js······································································ 模板JS脚本目录
│└─style···································································模板CSS样式目录
├─lurd········································································· LURD系统模板
├─plus·········································································插件模板目录
├─system······································································系统底层模板目录
└─wap·········································································WAP模块模板目录
3.,默认风格是default,它表示系统默认使用
{cmspath}/templets/default 这个文件夹的模板,如果你下载了一套新的模板,你可以不必要删除default 原
有的文件,把下载的模板文件夹命名你想要的风格名称,如style2 等,然后在后台修改默认的模板风格
名称为style2,那系统将使用{cmspath}/templets/style2 这文件当作默认模板,但是若你手工指定了栏目模
板的位置,则后台参数风格的定义无效。
4.板块(封面)模板
指网站主页或比较重要的栏目封面频道使用的模板,一般用“index_识别ID.htm”命名,此外,用户单
独定义的单个页面或自定义标记,也可选是否支持板块模板标记,如果支持,系统会用板块模板标记引擎
去解析后才输出内容或生成特定的文件。
列表模板
指网站某个栏目的所有文章列表的模板,一般用“list_识别ID.htm” 命名。
档案模板:
表示文档查看页的模板,如文章模板,一般用“article_识别ID.htm” 命名。
其它模板:
一般系统常规包含的模板有:主页模板、搜索模板、RSS、JS编译功能模板等,此外用户也可以自定
义一个模板创建为任意文件。
5.模板文件命名规范
1 index_识别ID.htm:表示板块(栏目封面)模板;
2 list_识别ID.htm:表示栏目列表模板;
3 article_识别ID.htm:表示内容查看页(文档模板,包括专题查看页);
4 search.htm:搜索结果列表模板;
5 index.htm:主页模板;
6.织梦模板引擎的代码样式
{dede:标记名称属性='值'/}
{dede:标记名称属性='值'}{/dede:标记名称}
{dede:标记名称属性='值'}自定义样式模板(InnerText){/dede:标记名称}
7.注:如果使用带底层模板的标记,必须严格用{dede:标记名称属性='值'}{/dede:标记名称} 这种格式,否
则会报错。内置系统标记
①global 标记,表示获取一个外部变量,除了数据库密码之外,能调用系统的任何配置参数,形式为:
{dede:globalname='变量名称'}{/dede:global}或{dede:globalname='变量名称'/}
其中变量名称不能加$符号,如变量$cfg_cmspath,应该写成{dede:globalname='cfg_cmspath'/}。
②foreach 用来输出一个数组,形式为:
{dede:foreacharray='数组名称'}[field:key/] [field:value/]{/dede:foreach}
③include 引入一个文件,形式为:
{dede:includefile='文件名称' ismake='是否为dede板块模板(yes/no)'/}
对文件的搜索路径为顺序为:绝对路径、include 文件夹,CMS安装目录,CMS主模板目录
自定义函数使用{dede:标记名称属性='值' function='youfunction("参数一","参数二","@me")'/}
其中@me用于表示当前标记的值,其它参数由你的函数决定是否存在,例如:
{dede:fieldname='pubdate'function='strftime("%Y-%m-%d%H:%M:%S","@me")'/}
织梦标记允许有限的编程扩展
格式为:
{dede:tagnamerunphp='yes'}
$aaa=@me;
@me="123456";
{/dede:tagname}
@me表示这个标记本身的值,因此标记内编程是不能使用echo之类的语句的,只能把所有返回值传递给
@me。
此外由于程序代码占用了底层模板InnerText的内容,因此需编程的标记只能使用默认的InnerText
8.动态模板引擎
用于非核心模块的动态页面或列表页的模板解析,如:member/content_list.php,通常是
在datalistcp.class.php中使用,这个类在动态运行的情况下,由于本身是把模板编译成PHP的,因此性能上
会优级于旧的解析类,这个方法将在未来版本中作为通用的方式。
标记通用特性
①短标记
{dede:tagname.name/}
等同于
{dede:tagnamename=''/}
②块标记
{dede:tagname}
循环代码
{/dede:tagname}
标记的具体语法及对应的PHP代码
①配置变量
{dede:configname=''value=''/}
配置变量可以在载入模板后通过$tpl->GetConfig($name) 获得,仅作为配置,不在模板中显示。
②短标记
{dede:global.name/} 外部变量 等同于<?phpecho$name;?>
{dede:var.name/} var数组 等同于<?phpecho$_vars['name'];?>
{dede:field.name/} field数组 等同于<?phpecho$fields['name'];?>
{dede:cfg.name/} 系统配置变量等同于<?phpecho$cfg_name;?>
考虑到大多数情况下都会在函数或类中调用模板,因此$_vars、$fields 数组必须声明为global 数组,否
则模板引擎无法获得它的值从而导致产生错误。
③自由调用块标记
{tag:blocknamebind='GetArcList'bindtype='class'}
循环代码
{/tag:blockname}
必要属性:
bind 数据源来源函数
bindtype 函数类型,默认是class 可选为sub
rstype 返回结果类型,默认是array ,可选项为string
自定义函数格式必须为function(array$atts,object$refObj,array$fields);
在没有指定bind绑定的函数的情况下,默认指向MakePublicTag($atts,$tpl->refObj,$fields)统一管理。
④固定块标记
1.datalist
从绑定类成员函数GetArcList中获取数组并输出
{dede:datalist}
循环代码
{/dede:datalist}
遍历一个二给维数组,数据源是固定的,只适用用类调用。
等同于
{tag:blocknamebind='GetArcList'bindtype='class'rstype='arrayu'}
循环代码
{/tag:blockname}
2.label
从绑定函数中获取字符串值并输出
等同于{tag:blocknamebind='func'bindtype='sub'rstype='string'/}
3.pagelist
从绑定类成员函数GetPageList中获取字符串值并输出
等同于{tag:blocknamebind='GetPageList'bindtype='class'rstype='string'/}
4.include
{dede:includefile=''/}
{dede:includefilename=''/}
5.php
{dede:php
php代码
/}
或
{dede:php}
php代码
{/dede:php}
6.If
仅支持if ,else ,else 直接用{else}表示,但不支持{elseif}这样的语法,一般建议模板中不要使用太复杂
的条件语法,如果确实有需要,可以直接使用php语法。
{dede:if 条件}a-block {else}b-block{/dede:if}
条件中允许使用var.name、global.name 、field.name、cfg.name表示相应的变量。
如:
{dede:iffield.id>10}
{/dede:if}
7.遍历一个array 数组
{dede:array.name}
{dede:key/}={dede:value/}
{/dede:array}
各种语法的具体编译后的代码,可查看dedetemplate.class.php的functionCompilerOneTag(&$cTag)。
9.标签的分类
每个标签都会有他的作用域,上文中我们可以了解系统文档页面可以分为:封面、列表、内容几个部
分,每个页面的模板则会涉及到不同的标签,所以标签也有了他的作用域,我们在模板制作过程中主要根
据模板的作用域来对模板进行如下划分:
全局标签
可以在前台文档任意页面使用的模板标记,例如:arclist、channel、sql、loop 等。
列表标签
仅在模板*_list.htm中可以使用的标签,例如:list、pagelist。
内容标签
仅在模板*_.article.htm中可以使用的模板标记,例如:likearticle、pagebreak等。
模块标签
仅在特定的模块、插件中使用的模板标记
博主说:本博客文章来源包括转载,翻译,原创,且在文章内均有标明。鼓励原创,支持创作共享,请勿用于商业用途,转载请注明文章链接。本文链接:keinwang
博客地址:vikibeta.com