模板风格-变量
敲重点:变量语法等没写正确,或者语法未正确结束会出现页面访问空白的问题!!
DiscuzX中有两种变量
一种我们称为G变量:$_G[xxx] G变量是程序的全局变量,为了让程序更加高效,减少不必要的数据获取,所以程序特将经常需要用到的变量统一到G变量下,如用户登录信息、后台设置信息、服务器环境信息、客户端CooKies、数据缓存等都存放在G变量里面,在制作模板的时候作者只需要将G变量打印出来即可获得需要的信息是否在G变量里面。
另一种自定义变量:$xxx 自定义变量是以$开头首位为字母或下划线的自定义代码,如:$data、$thread、$post、$forumlist、$threadlist等等! 自定义变量是作者可以自己在程序里面自定义的,或程序自身已经定义了的。
变量数据在模板中的输出方式: 程序从数据库或缓存文件中将数据进行读取,转换成数组数据并载入模板进行输出!所以我们在模板中调用并输出列表数据时必须写循环代码,将数组数据逐条循环显示出来!
自定义变量数据的循环代码书写格式: <!--{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['gpcheckrush'] &;&; $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]变量放到其他模板文件中去用,结果刷新出来的结果什么都没有!
原因是: 每个模板文件都有一个对应的程序文件,所以自定义变量不能在不同的页面中使用,只限于定义了变量的模板文件中使用。 例如帖子列表页的帖子数据是不能在论坛首页或其他页面输出的!
更多建议: