Discuz! 的模板采用近似 PHP 表达式的语法,支持的元素如下:
<!–{ … }–>
逻辑元素包围符,该符号用于包含条件和循环元素
第一次看到<!--内容-->我还以为是注释的效果,后来才知道自己想得太天真了-_-!
条件判断
statement1 statement2 statement3
这 是一个典型的条件模板,当条件 expr1 为真时,显示模板 statement1 内容,否则当 expr2 为真时,显示模板 statement2 内容,否则显示模板 statement3 的内容。如同其他语言中的条件控制一样,其中 <!–{elseif expr}–>和 <!–{else} –>是非必须的。
不带下标变量的数组循环
statement
相当于 PHP 的数组循环语句:
foreach($array as $value) { statement }
带下标变量的数组循环
statement
相当于 PHP 的数组循环语句:
foreach($array as $key => $value) { statement }
逻 辑元素包围符在 { } 外面包含了 html 的注释符号 <!– –>,除了为了和信息元素相区别外,也方便了使用 Dreamweaver 和 Frontpage 之类工具编辑模板的用户。因逻辑元素会被识别为 html 的注释而不被显示,对于绝大多数用户,逻辑元素中的内容是完全不需要修改的,甚至修改错一个字符就可能引起错误信息和整个系统无法运行。因此通常您在修改 模板的时候,不要修改模板的逻辑信息,更不要将逻辑信息内部元素(如 <!–{else}–>等)的前后位置作以修改,否则可能会导致错误。如果您的模板被不慎修改损坏,请立即用原标准默认模板覆盖,即可恢复。
对于高手而言,实际上外部的 <!– –>是可以省略不写的,可以用于某些元素在模板中的定位,但强烈建议普通用户不要轻易尝试。
{ … }
信息元素包围符
{CONSTANT}
可以引用界面替换变量,其中必须为大写字母,该符号实际的作用是引用 PHP 常量 CONSTANT,因此也可以通过它来引用其他的常量内容。
{lang variable}
可 以在模板中引用语言变量 variable 的内容,语言变量经由 templates.php.lang 中数组 $language 定义。如 {lang post_edit} 的内容在编译模板的时候被替换为 $language['post_edit'] 的内容,简体中文版的意思是“编辑帖子”。
{template name}
模板嵌入符,为了避免模板的冗长,可以使用本符号来将 name 模板的内容嵌入本模板中(实际上为引用)。
{eval statement}
运行 PHP 语句体 statement。推荐只在特别必须的时候才使用该结构,因为它会破坏模板的结构和可读性。如 {eval echo ‘template!’;} 实现的功能为 echo ‘template’;
{LF}
换行符,因为 Discuz! 模板引擎会忽略掉多余的换行(\n),这个符号用来成生需要的 \n。
我 们所推荐的模板修改方法:通过普通编辑器手工书写 html 或通过 Dreamweaver 或 Frontpage 修改。但是修改需切记,同一逻辑元素内或嵌套中元素的位置和内容切勿修改,即通常情况下,您不能把 <!–{}–>包围的内容单独的移动,更不能删除。但是整个最外部逻辑结构是可以移动或删除的。
如果修改后模板所在页面在输出类似如下的错误信息 Parse error: parse error, unexpected ‘}’ in /home/username/forums/forumdata/templates/1_login.tpl.php on line 6,说明模板中出现了无法匹配,或格式错误的逻辑元素,请仔细检查是否有元素不对应,没有结束或嵌套损坏,格式错误的现象,必要时可以恢复原始模板来解决问题。
Discuz! 提供了方便的界面打包程序,前面已对其格式做了介绍,将导出信息的内容粘贴到 系统设置 中 风格方案 中的 导入界面方案 中,执行即可。程序会自动解析数据内容,恢复相关的界面设置,自定义替换变量和所需的模板设置。如果被导出界面使用了非默认模板,必须将 ./templates 目录属性设置为 777,以便导入程序自动建立模板记录和文件夹。
定义变量说明
123
//如果i除以2的余数等于0
class=”listA” href=”$value[url]” title=”$value[subjectall]” target=”_blank”>$value[subject]
”;}–>
<!–{eval}}–>
那在DZ的模板引擎中我们该如何使用Discuz!模板标签呢?
下面给大家列举DZ模板引擎中常见、常用的模板语句:
一、直接输出变量: {$abc} 或 {echo $abc}
二、输出数组中某个变量:{$arr[0]}
三、IF判断语句:
我abc小于1
我abc为1
我abc大于1
四、Loop循环语句:
这里是 {$val}
上面这段loop语句,DZ会将其转换成php自身的循环语句:
If(is_array($abc)) {
Foreach($abc AS $key => $val) {
}}
五、在模版文件中使用PHP语句:{eval $abc = 1;} 注意:这里必须带”;”结尾。
六、在本模板中引用其他的模板: 如我们要包含头部模板文件(header.htm)可以这样写:{subtemplate header}
在模版中使用语言包中的中文语句:{lang xxxxx} ,在这里xxxxx就是语言包中任意一个数组的键值。
如:templates/default/templates.lang.php(语言包) 内有下面的数组
$language = array
(
'discuz_lang' => 'templates',
'click_here' => '点击这里',
'ban_member' => '禁止',
'input_invalid' => '填写无效',
'title_none' => '无标题',
'title' => '标题',
}
大家可以使用{lang title} ,这样在模板输出的时候则会显示”标题”两个字。
大家掌握了上面这六种DZ模板语句,就可以在自己的二次开发中运用了。
Discuz!模板文件中不常见的语句和变量说明
刚接触Discuz!模板文件,您会发现在这些htm文件中包含着很多像:
………… {template css} …… $charset {lang memberlist} {MAINTABLECOLOR}
这样6类在一般htm文件中不常见的语句和变量,这些语句是Discuz!模版中的特有语句,具体说明如下:
………… 这类语句并非普通HTML中的注释语句,而是Discuz!特有的模板判断语法,就好比php或者其他语法中的 if,else,then等等。通过这些语法,来控制一些功能的显示控制等效果。
{template ×××} 这类语句是模板调用语句,比如在某个模板中,想调用另一个模板中的内容,可以通过上面的语句对其他模板文件进行调用,比如在header.htm模板文件中的{template css},将css.htm模板文件调入。index.htm模板文件中最顶有 {template header},最底有 {template footer},分别调入的是header.htm和footer.htm两个模板文件,这样根据页面结构和功能的细分,使Discuz!模板的设计制作更为灵活,方便。
“……” 这类语句为循环语句,循环执行内部程序,直到数据输出完毕结束。通过这些语句,能够达到把同一系列的资料进行循环显示效果,常见的如论坛列表、帖子列表等。
$××× 这样以$开头的是Discuz! 参数和变量,一般情况下不建议修改。另外还有一些是Discuz! 固定参数,如: $seohead 后台设置的头部信息 $charset —— config.inc.php中设置语言字符集,必不可少,不能删除! $extrahead —— 控制论坛自动跳转参数,必不可少,不能删除! {eval updatesession();} —— 更新论坛 session 表的参数,必不可少,不能删除! {eval output();} —— 结束论坛输出,必不可少,不能删除!
以上的参数以Discuz! 4.0为准,这些参数会因应不同版本而有所不同!还有一些 $××× 的也是一些参数如非插件作者或程序开发请勿乱修改!
{lang ×××} 这类以lang开头的是Discuz!语言包调用语句,后面的变量可以在语言包文件中找到相对应的字段,在模板中所调用的大部分都是 templates.lang.php 文件中的,如下,左侧为模版文件中调用语句,右侧为语言包中对应字段:(用户可以根据自己的需求对语言包进行修改) {lang pm} 'pm' => '短消息' {lang admincp} 'admincp' => '系统设置' {lang memberlist} 'memberlist' => '会员'
{×××} {IMGDIR}这类括弧内大写的变量是Discuz!风格配色方案中的参数,在前面的css说明中已经作过详细的介绍了,也可根据您的需要通过后台定义新的风格变量
Discuz! 模板常见语句分析及知识技巧
Feb 5
[转] Discuz! 模板常见语句分析及知识技巧 不指定
2006年2月5日 22:57 posted by LiuYu from 本站原创 大 | 中 | 小
Creative Commons License本作品按照 署名-非商业性使用-相同方式共享 2.5 中国大陆 进行授权。
请您在转载本作品时保留原作URL和作者名称,并且不得用于商业用途,在此作品之上的任何演绎都应使用本协议进行许可授权。
From: http://plugins.discuz.net/viewthread.php?tid=457
by Tea (阿茶)
以下原文:
为什么要写这个文章?
想让大家都能制作好一个属于自己的风格模板。希望能帮助大家更好的编写和利用Discuz!的风格和模板技巧。是希望有更多的人参与制作 Discuz!风格。是为了提高大家对Discuz!的了解。是为了解除大家心中对Discuz!模板的疑惑。。。。。希望大家加油!
一、模板调用
比如在某个模板中,想调用另一个模板中的内容,可以用下面的语句:
{template xxx}
假设,建立了一个新模板名字叫 \"abc.htm\" ,在后台模板编辑时只会显示为 \"acb\",需要在 index 中调用它,那么就在index 中适当位置加入 {template abc}
那么就会自动代用它。
相关实例:index 模板中,最顶有 {template header},最底有 {template footer}
相关疑问:那么在这个 abc 模板中需要有 吗?
不需要的!想要显示什么,就写什么,因为它只是整个网页的一部分! 都已经在header和footer模板中了。
二、固定参数
$seohead --- 后台设置的头部信息
$charset --- config.inc.php中设置语言字符集,必不可少,不能删除!
$extrahead --- 控制论坛自动跳转参数,必不可少,不能删除!
{eval updatesession();} --- 更新论坛 session 表的参数,必不可少,不能删除!
{eval output();} --- 结束论坛输出,必不可少,不能删除!
以上的参数以Discuz! 4.0为准,这些参数会因应不同版本而有所不同!
还有一些 $xxx 的也是一些参数如非插件作者或程序开发请勿乱修改!
三、数据判断
1、在模板中会经常见到xxxxx的语句。
这些并非普通HTML中的注释,而是Discuz!特有的模板判断语法,就好比php或者其他语法中的 if,else,then等等。
通过这些语法,能够达到不同的模板效果。
相关实例:
header 模板中
--- 如果获取了 $discuz_uid ,即显示下面资料(判断1)
$discuz_userss: {lang logout}
--- 如果有 $maxpmnum,即显示下面资料,否则不显示(判断2)
--- 结束了这个判断(判断2)
--- 如果$adminid在1,2,3这三个范围内,即显示下面资料,否则不显示(判断3)
--- 结束了这个判断(判断3)
--- 如果获取不了 $discuz_uid ,则显示下面资料
{lang guest}: {lang register}
--- 结束这个判断(判断1)
2、在模板中会经常见到xxx的语句。
这个为循环语句,直到数据输出完毕,就会自动结束。
通过这些语法,能够达到把同一系列的资料进行循环显示效果。
相关实例:
header 模板中
--- 循环1开始,判断插件
--- 循环2开始,判断插件模组
| $module[url]
--- 结束循环2
--- 结束循环1
四、语言调用
在模板中,经常会看到{lang xxx}这样的语句。它就是调用语言包中的词语用的。
而在模板中会调用的大部分都是 templates.lang.php 的。
下面看看语言包的结构:
<? -- 宣布php语言开始
$language = array
( --- 以上宣布语言包定义开始
\'title\' => \'标题\',
调用字符 显示文字
\'never\' => \'从未\',
调用字符 显示文字
....
); --- 宣告语言包定义结束
?> -- 宣布php语言结束
相关实例:
假设,我们增加一个语言调用,在
\'title\' => \'标题\',
上一行添加
\'abc\' => \'这是测试语言调用\',
最后的 , 是比不可少的,还有调用字符和显示文字,都必须使用 \'\' 引起。
增加以后,到模板中,就能调用它,模板中写{lang abc}
那么显示出来就直接显示: 这是测试语言调用
特别注意: 增加语言或修改语言包后,必须更新缓存哦!
五、风格参数调用
在模板中常见到{XXXXX}的语句。{}中的必须是大写。
这些都是调用风格配色方案中的参数。您可以可以自己添加,方法如下:
1, 进入 界面风格 -> 界面风格 -> 您要添加参数的风格 点 [详情]
2, 进入后最下面,有两栏可以填写,一个是变量,一个是替换内容
相关实例1:
变量写 COPYRIGHT (注意这里必须大写)
替换内容写 这个是自定义风格变量
提交后,修改模板,在模板文件中加上{COPYRIGHT},那么就可以显示出 这个是自定义风格变量。
相关实例2:
变量写 FOOTERCOLOR (注意必须使用大写)
替换内容写 #003399
提交后,修改模板,模板中写测试风格自定义变量
那么出来的效果,这个 测试风格自定义变量 就会按照填写的替换内容的颜色来显示了。
discuz模板语法定义
2009-11-25 15:17
Discuz! 的模板采用近似 PHP 表达式的语法,支持的元素如下:
a. <!–{ … }–>
逻辑元素包围符,该符号用于包含条件和循环元素
1. 条件判断
statement1
statement2
statement3
2. 这 是一个典型的条件模板,当条件 expr1 为真时,显示模板 statement1 内容,否则当 expr2 为真时,显示模板 statement2 内容,否则显示模板 statement3 的内容。如同其他语言中的条件控制一样,其中 <!–{elseif expr}–>和 <!–{else} –>是非必须的。
3. 不带下标变量的数组循环
statement
4. 相当于 PHP 的数组循环语句:
foreach($array as $value) {
statement
}
5. 带下标变量的数组循环
statement
6. 相当于 PHP 的数组循环语句:
foreach($array as $key => $value) {
statement
}
7. 逻 辑元素包围符在 { } 外面包含了 html 的注释符号 <!– –>,除了为了和信息元素相区别外,也方便了使用 Dreamweaver 和 Frontpage 之类工具编辑模板的用户。因逻辑元素会被识别为 html 的注释而不被显示,对于绝大多数用户,逻辑元素中的内容是完全不需要修改的,甚至修改错一个字符就可能引起错误信息和整个系统无法运行。因此通常您在修改 模板的时候,不要修改模板的逻辑信息,更不要将逻辑信息内部元素(如 <!–{else}–>等)的前后位置作以修改,否则可能会导致错误。如果您的模板被不慎修改损坏,请立即用原标准默认模板覆盖,即可恢复。
8. 对于高手而言,实际上外部的 <!– –>是可以省略不写的,可以用于某些元素在模板中的定位,但强烈建议普通用户不要轻易尝试。
b. { … }
信息元素包围符
1. {CONSTANT}
可以引用界面替换变量,其中必须为大写字母,该符号实际的作用是引用 PHP 常量 CONSTANT,因此也可以通过它来引用其他的常量内容。
2. {lang variable}
可 以在模板中引用语言变量 variable 的内容,语言变量经由 templates.php.lang 中数组 $language 定义。如 {lang post_edit} 的内容在编译模板的时候被替换为 $language['post_edit'] 的内容,简体中文版的意思是“编辑帖子”。
3. {template name}
模板嵌入符,为了避免模板的冗长,可以使用本符号来将 name 模板的内容嵌入本模板中(实际上为引用)。
4. {eval statement}
运行 PHP 语句体 statement。推荐只在特别必须的时候才使用该结构,因为它会破坏模板的结构和可读性。如 {eval echo ‘template!’;} 实现的功能为 echo ‘template’;
5. {LF}
换行符,因为 Discuz! 模板引擎会忽略掉多余的换行(\n),这个符号用来成生需要的 \n。
我 们所推荐的模板修改方法:通过普通编辑器手工书写 html 或通过 Dreamweaver 或 Frontpage 修改。但是修改需切记,同一逻辑元素内或嵌套中元素的位置和内容切勿修改,即通常情况下,您不能把 <!–{}–>包围的内容单独的移动,更不能删除。但是整个最外部逻辑结构是可以移动或删除的。
如果修改后模板所在页面在输出类似如下的错误信息 Parse error: parse error, unexpected ‘}’ in /home/username/forums/forumdata/templates/1_login.tpl.php on line 6,说明模板中出现了无法匹配,或格式错误的逻辑元素,请仔细检查是否有元素不对应,没有结束或嵌套损坏,格式错误的现象,必要时可以恢复原始模板来解决 问题。
Discuz! 提供了方便的界面打包程序,前面已对其格式做了介绍,将导出信息的内容粘贴到 系统设置 中 风格方案 中的 导入界面方案 中,执行即可。程序会自动解析数据内容,恢复相关的界面设置,自定义替换变量和所需的模板设置。如果被导出界面使用了非默认模板,必须将 ./templates 目录属性设置为 777,以便导入程序自动建立模板记录和文件夹。
定义变量说明
123
//如果i除以2的余数等于0