discuz模版的学习

  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

  

  

  · [$value[typename]]

  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)

  | {lang pm}

   --- 结束了这个判断(判断2)

  | {lang memcp}

   --- 如果$adminid在1,2,3这三个范围内,即显示下面资料,否则不显示(判断3)

  | {lang admincp}

   --- 结束了这个判断(判断3)

   --- 如果获取不了 $discuz_uid ,则显示下面资料

  {lang guest}: {lang register}

  | {lang login}

   --- 结束这个判断(判断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

  

  

  · [$value[typename]]

  class=”listA” href=”$value[url]” title=”$value[subjectall]” target=”_blank”>$value[subject]

  

  

  

   ”;}–>

  <!–{eval}}–>

原文地址:https://www.cnblogs.com/zhuangjinhui/p/2677460.html