设为首页收藏本站

 找回密码
 注册

QQ登录

只需一步,快速开始

BCM 门户 IT世界 资料备录 查看内容

Discuz!系列教程:模板制作中道的变量、循环、判断、文件嵌套 ...

2013-10-15 12:50| 发布者: John| 查看: 204| 评论: 0|来自: 站科论坛

摘要: 模板的基础概念 模板是对程序原有的界面、框架中止各种改进,作者依据自己的创作与功用搜集,让程序前台以一种全新的形态中止展示!模板的制造触及程序功用的二次增强与用户体验 制造模板时需求有一定的HTML基础、cs ...
模板的基础概念

模板是对程序原有的界面、框架中止各种改进,作者依据自己的创作与功用搜集,让程序前台以一种全新的形态中止展示!模板的制造触及程序功用的二次增强与用户体验
制造模板时需求有一定的HTML基础、css样式基础、简单的模板语法基础。这些都能够经过修正默许模板过程中学会
当学会风格制造后,就能够试着制造一款自己需求的模板了。

特性:具有独立的一套模板目录、触及大量模板文件的自定义修正,有一些模板会有繁琐的装置过程。
一套优秀的模板需求站点管理人员依据自己运用的模板特性中止特地的数据推送与数据展示方式。
无论模板制造多么优秀,管理人员推送到模板中的数据假如缺乏以吸收眼球,那也是失败的!

本文中针对模板制造中重要的环节中止解说,以下内容同样适用与其他开源程序如PHPwind、php168、Ecshop等等,大家在看以下内容时要学会触类旁通,多实验、多入手、多备份!


DiscuzX2.5新增php格式模板文件载入支持

从 Discuz! X2.5 开端,模板文件支持 PHP 扩展名的格式,主要功用是避免模板被别的论坛盗取!
例如:template/default/common/header.htm
可创建为:template/default/common/header.php,模板文件为php后,代码书写方式不改动依然和以前一样采用HTML

php后缀的模板文件需在模板文件开头添加一行代码:


如:

  • <?php exit;?>


或者:

  • <?php echo '你不能看此模板的内容';exit;?>



PHP 的模板文件的模板数据内容将从文件的第二行开端解析。PHP 和 HTM 模板文件同时存在时,会优先解析 PHP 模板文件(该方式只能用与X2.5及以上版本!)


模板的变量名:

DiscuzX中有两种变量
一种我们称为G变量:$_G[xxx]
G变量是程序的全局变量,为了让程序愈加高效,减少不用要的数据获取,所以程序特将经常需求用到的变量统一到G变量下,如用户登录信息、后台设置信息、效 劳器环境信息、客户端CooKies、数据缓存等都寄存在G变量里面,在制造模板的时分作者只需求将G变量打印出来即可取得需求的信息能否在G变量里面。

另一种自定义变量:$xxx
自定义变量是以$开头首位为字母或下划线的自定义代码,如:$data、$thread、$post、$forumlist、$threadlist等等!
自定义变量是作者能够自己在程序里面自定义的,或程序自身曾经定义了的。

PS:我们在制造模板的时分是将程序已有的数据中止另外一种展示方式,所以不用去自定义变量。


变量数据在模板中的输出方式:
程序从数据库或缓存文件中将数据中止读取,转换成数组数据并载入模板中止输出!所以我们在模板中调用并输出列表数据时必需写循环代码,将数组数据逐条循环显现出来!

自定义变量数据的循环代码书写格式:

  • <!--{loop $data $key $value}-->
  •      <li>$key $value</li>
  • <!--{/loop}-->


这 段代码就是一段典型的循环代码,意义是将自定义变量$data中止循环,并将每次循环的数据传送给$value,$key是数组键值(序 号),<!--{loop $data $key $value}--><!--{/loop}-->之间书写html代码。我们只需求记住这个简单却重要的意义!


翻开template/default/forum/viewthread.htm

查找以下代码:

  • <!--{eval $postcount = 0;}-->
  •     <!--{loop $postlist $post}-->
  •         <!--{if $post['invisible'] != -5}-->
  •             <!--{if $rushreply && $_G['gp_checkrush'] && $post['rewardfloor'] != 1}-->
  •                 <!--{eval continue;}-->
  •             <!--{/if}-->
  •             <div id="post_$post[pid]">
  •                 <!--{subtemplate forum/viewthread_node}-->
  •             </div>
  •             <!--{eval $postcount++;}-->
  •         <!--{/if}-->
  •     <!--{/loop}-->



这段代码就是帖子页的循环代码,经过上面的【自定义变量数据的循环代码书写格式】我们应该能够大致了解到这个循环代码的意义!$postlist变量中寄存了当前访问帖子的主题信息、回复楼层信息,经过循环,将每个楼层的数据传送给$post变量。
循环的HTML代码寄存在template/default/forumviewthread_node.htm
翻开这个文件后能够看见里面的很多变量名都是$post,例如:$post['authorid'] = 作者UID、$post['username']=作者用户名等等,经过$post[xxx]不同的字段信息输出相应的数据,这些字段信息都在数据库-数 据表pre_forum_post寄存着。


经常发现很多童鞋将$post[xxx]变量放到其他模板文件中去用,结果刷新出来的结果什么都没有!
缘由是:每个模板文件都有一个对应的程序文件,所以自定义变量不能在不同的页面中运用,只限于定义了变量的模板文件中运用。例如帖子列表页的帖子数据是不能在论坛首页或其他页面输出的!



模板制造中最重要的条件判别(if else):



在循环语句中,我们经常要对不同的数据中止其他的展示方式,这时就需求用到条件判别!条件判别语法有很多中方式,如:大于、等于、小于、不等于、变量能否 存在等!if else速记办法:if=假如 else=那么,条件判别触及逻辑问题,所以需求很强的逻辑思想。下面的例子你第一次看的时分可能会觉得很好笑,请静下心认真看!

从简单到复杂解说例子:
$xxx变量能否存在:

  • <!--{if $xxx}-->.....<!--{/if}-->
  • PS:假如$xxx变量存在,则执行中间的代码



$xxx变量能否大于1:

  • <!--{if $xxx >1}-->.....<!--{/if}-->
  • PS:假如$xxx变量大于1,则执行中间的代码


$xxx变量能否小于1:

  • <!--{if $xxx <1}-->.....<!--{/if}-->
  • PS:假如$xxx变量小于1,则执行中间的代码



$xxx变量能否不等于1:

  • <!--{if $xxx !=1}-->.....<!--{/if}-->
  • PS:假如$xxx变量不等于1,则执行中间的代码


复杂一点(假如那么):

  • <!--{if $xxx ==1}-->a<!--{else}-->b<!--{/if}-->
  • PS:假如$xxx变量等于1,则执行a代码,那么假如$xxx不等于1则执行b代码



再复杂点(假如那么假如)

  • <!--{if $xxx ==1}-->a<!--{elseif $xxx ==2}-->b<!--{elseif $xxx ==3}-->c<!--{/if}-->
  • PS:假如$xxx变量等于1,则执行a代码,
  • 那么假如$xxx不等于1等于2则执行b代码,
  • 那么假如$xxx不等于1也不等于2是等于3,则执行c代码。有点晕了吗?



再再复杂一点(ifelse两个条件判别)

  • <!--{if $xxx ==1 || $xxx ==3}-->a<!--{elseif $xxx ==2}-->b<!--{/if}-->
  • PS:假如$xxx变量等于1或者$xxx等于3,则执行a代码,
  • 那么假如$xxx不等于1也不等于3,等于2则执行b代码,



两个变量判别

  • <!--{if $xxx ==1 || $ooo ==1}-->a<!--{elseif $xxx && !$ooo}-->b<!--{/if}-->
  • PS:假如$xxx变量等于1或者$ooo等于1,则执行a代码,
  • 那么假如$xxx不等于1,$ooo也不等于1,$xxx变量存在并且$ooo变量不存在则执行b代码




读懂了ifelse例子后,上面viewthread.htm那段代码中 的<!--{if $post['invisible'] != -5}-->.....<!--{/if}-->我们依据刚才的ifelse注解,往常能够了解他的意义:判别循环输出时,假 如$post['invisible'] 不等于-5则执行载入的HTML代码


模板文件中的插件钩子(插件嵌入点):


插件钩子代码例子:

  • <!--{hook/xxx_xxx}-->


查看模板插件钩子注解图示例
插件钩子的作用在于能让插件在指定的一些位置输出有关代码!
在DZ7.x-DX1.5中插件钩子并不显得很重要,但是随着插件应用的不时提高,插件创作者的不时参与,插件钩子在模板中的位置特别显得格外重要,假如短少了程序必需的插件钩子,可能会构成自带系统插件功用遭到影响!

所以我们在制造模板的时分一定要参考默许模板中的插件钩子位置中止合理的布置!
除非你觉得某个插件钩子在自己的模板中并不需求,否则请保管插件钩子代码!



DiscuzX的模板文件N次嵌套:


我们在模板文件template/default/forum/viewthread.htm中能够找到:<!--{subtemplate forum/viewthread_node}-->,
这个代码的意义是在这个代码的位置载入另外一个模板文件:template/default/forum/viewthread_node.htm,
当我们翻开这个文件后发现还有一段载入代码:<!--{subtemplate forum/viewthread_node_body}-->
这就是DiscuzX的模板文件N次嵌套!

我们首先要分明的了解各个模板文件是做什么用的,就知道这些嵌套的意义:
template/default/forum/viewthread.htm 帖子内容页主模板,这个模板文件是帖子内容页处置程序加载的
template/default/forum/viewthread_node.htm 帖子内容页楼层模板文件,这个模板文件循环一次就是一个楼层
template/default/forum/viewthread_node_body.htm 帖子内容页,帖子内容模板,这个模板文件是特地用于处置帖子内容的

这种嵌套方式是便于以后的代码修正,比如我只想修正帖子内容的代码,就只需求编辑viewthread_node_body.htm,而不用把另外两个文件都编辑。


经过以上的解说,大家也就能够对变量、循环、判别、文件嵌套有了一个初步的认识,事 在人为,凡事多入手多备份少依赖,就能很快的进入模板制造行列,明明只需求改下代码刷新一下的简单问题,却要花一天的时间等他人帮你处置,如何才干高效? 只需经过不时实验,不时累计错误,这样才干得到提升!

路过

雷人

握手

鲜花

鸡蛋

相关阅读

手机版|小黑屋|BC Morning Website ( Best Deal Inc. 001 )  

GMT-8, 2025-8-26 07:12 , Processed in 0.016862 second(s), 18 queries .

Supported by Best Deal Online X3.5

© 2001-2025 Discuz! Team.

返回顶部