1、精彩观点:1:细心的同学可以看到 loop 后面跟着我们的变量 $mythread2:这样的方法的优点在于,站长对程序的修改的灵活性更大3:这个文件,打开以后。找到第 25 行:我们来操作4:有同学可能会问:回复主题在哪里呢,其实。培训主要解决问题:1:使用 Discuz!后台自带标签调用完成主题列表的调用。2:常用的 Discuz!模板二次开发的 一些语法3:熟悉一下,常用的数据库表含义,与主题表中常用字段 的含义。4:具体给大家演示一下如何在一个版块内用模板二次开发和修改程序的方法调用本版最 新的主题列表嘉宾介绍:目前任康盛创康产品技术支持部产品技术工程师,丛瑜帅也是一名个人站长,在进入康
2、盛之前曾独立开发 CtoC 系统,任职后开发过 Discuz!插件若干同时也是中国站长俱乐部开发者之一。 丛瑜帅 站长 ID:20个人主页:http:/ 培训主要内容:中国站长俱乐部: 使用 Discuz!后台自带标签调用完成主题列表的调用可以让站长自己独立完成很多 home 页面栏目的制作,现在 dz 论坛中仿 19 楼的 home 页面风格泛滥,鹏友窝的首页 X 格被无数站长效仿,其中最重要的一点就是使用 Discuz!后台自带标签调用。下面请丛瑜帅工程师为大家讲解丛老师:在学习本次 Discuz!(以下简称 dz)模板二次开发的课程之前请确认自己本地机器已经配置好 dz7.2 论坛或者你
3、在服务器上进行本次同步练习,如果是新测试论坛需要在某版块发 10 个帖子。你可以通过以下链接:http:/ 下载 ComsenzEXP 2.1.0 最新版本安装本地。ComsenzEXP 是康盛创想(北京)科技有限公司全新开发制作的一套社区产品整合体验安装包,其前身为 Discuz!EXP。ComsenzEXP 在 Discuz!EXP 的基础上囊括了 Comsenz 全部的社区产品,包括:Discuz!、SupeSite、UCenter 、UCenter Home。使用户能够完方便整的体验 Comsenz 全线社区产品所带来的魅力。同时,从 Discuz!EXP 2.0.0 开始,您已经可以
4、使用它作为服务器环境架设实际个人论坛!标签的调用方式可以通过如下的方法获得:进入 DZ 后台 - 工具 - 数据调用DZ 为我们提供了强大的数据调用。本节将着重介绍“主题列表的调用”操作方法:点击添加 - 主题列表。我们会看到主题列表页面的调用。大家看到主题列表的数据调用模板。这里根据提示的字面意思就可以大致了解每个标签的含义,如:前缀图标: prefix主题所在版块的名称: forum 主题链接: link主题 TID:tid主题名称: subject、subject_nolink、subject_full 主题简短内容: message主题作者: author、author_nolink
5、最后发表者: lastposter、lastposter_nolink主题发布时间: dateline 最后发表时间: lastpost 回复数: replies 查看数: views主题图片附件文件名: imgattach 这个标签的意思代表没有图片附件的主题将不显示单条数据行号: order 指定行显示模板包含符: show=order./show表示被包含在内的模板只在第 order 行显示单条数据模板包含符: node./node 如模板中没有此包含符表示模板本身为单条数据模板这里需要注意的是两个地方: message是主题简短内容,这个标签可以通过下面的“主题简短内容最大字节数 ”进
6、行设置。如 19 楼( )首页每日生活参考截图如下所示:只显示“快速补妆的 10 个秘诀”该主题简短的内容 35 个汉字。imgattach可以用来显示所有带图片附件的主题的列表。但是这个标签只会输出附件地址。调用者需要根据附件地址使用相应的 来显示。如图:深圳论坛(鹏友窝)( )的首页 X 格右侧的窝友远程的图片调用。这里就是只调用带有图片附件的主题。了解了这些就一起来制作一个简单的最新主题的调用标签:模块名称:主题列表_我的最新主题调用数据缓存时间:0所在版块:大家可以根据自己的需求来点选那个调用哪个版块的新主题。起始数据行数:0 (默认)显示数据条数:4标题最大字节数: 50 (默认)
7、然后向下查找“主题排序方式” - 选择“按发布时间倒序排序” (这里的发布时间倒序,就是最新主题了)最后点击“提交”。提交以后,大家会获得一个“内部调用标签”: eval request(主题列表_ 我的最新主题调用);大家就可以用这个标签,放在你需要的 DZ 模板中,用来显示:大家找到 DZ 网站所在根目录:找到 templates/default/目录,找到 discuz.htm 模板。 使用网页编辑器打开,如 dreamweaver在打开的模板中(discus.htm DZ 论坛程序默认的首页模板文件 )找到第 14 行:template index_header在下面帖入:eval r
8、equest(主题列表_ 我的最新主题调用);然后去刷新一下网站首页看一下吧。如果这里没有调用到,说明你新安装的 DZ 没有发新帖。可以在你所调用的版块内发布帖子后再试。中国站长俱乐部:了解了标签调用后,会发现标签调用还不足以完成所有的事情,比如判断某版块有新帖在版块旁边显示今日发帖数量,首页右侧显示欢迎新会员,右侧边栏循环输出发帖量最高的几位会员头像。平时大家所学的 php程序一般都是 html 和 php 语言混合的,dz 采用 MVC 体系结构,方便模板制作,在此给大家讲解一下:Discuz!模板二次开发的 一些语法。丛老师:这个首先大家需要了解一下 DZ 7.2 版本的模板特性:DZ
9、的模板引擎原理是通过特殊的 Discuz!模板标签来完成特定的循环和判断的。他不同于 PHP本身自带的脚本语言。大家可能有很多人写过 PHP 的程序,也都使用过类似 if($abc = 1) else 的判断。Discuz!模板引擎会将 Discuz!模板标签中的关键字替换成 php 自身的脚本语句,然后存入缓存目录 forumdata/templates 目录中生成一个可供 PHP 程序包含和调用的模板文件。那在 DZ 的模板引擎中我们该如何使用 Discuz!模板标签呢?下面给大家列举 DZ 模板引擎中常见、常用的模板语句:一、直接输出变量: $abc 或 echo $abc二、输出数组中
10、某个变量:$arr0三、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
11、就是语言包中任意一个数组的键值。如:templates/default/templates.lang.php(语言包) 内有下面的数组$language = array(discuz_lang = templates,click_here = 点击这里,ban_member = 禁止,input_invalid = 填写无效 ,title_none = 无标题,title = 标题,大家可以使用lang title ,这样在模板输出的时候则会显示” 标题”两个字。大家掌握了上面这六种 DZ 模板语句,就可以在自己的二次开发中运用了。中国站长俱乐部:当你了解了 Discuz!模板开发语法之后,我
12、们就一起来熟悉一下,常用的数据库表含义,与主题表中常用字段的含义,这样方便你使用 sql 语句灵活调用个性的内容,如:按会员性别调用头像,在首页右侧边栏调用女性会员头像等等这样各个性的需求,在此我们丛老师为我们讲解常用数据库表、字段及 sql 语句。丛老师:数据常用的帖子表有: cdb_threads,cdb_posts我们仅以了解数据库中该如何根据结构来获得自己需要的信息。大家对平时都有看过数据库的表么大家如果是默认安装的 comsenexp :可以如下链接查看:http:/localhost:1108/phpMyAdmin 进入 phpmyadmin(注:p hpMyAdmin 是 一 个
13、 以 PHP 为 基 础 , 以 Web-Base 方 式 架 构 在 网 站 主 机 上 的 MySQL 的 资 料 库 管 理 工 具 。 可 以 管 理 整 个 MySQL 服 务 器 (需 要 超 级 用 户 ), 也 可 以 管 理 单 个数 据 库 。 当 然 大 家 也 可 以 使 用 Navicat for mysql 等其他 mysql 管理工具)用户名和密码均为 root。也可以查看安装后的 readme.txt 说明文件接着我们还是来围绕今天的题目,来知道哪些数据表和数据字段对调用“帖子列表” 有帮助。打开 phpmyadmin,找到现在你们本机用于演示的数据库。如图:c
14、db_threads 表红色标记的,则是 discuz!中最重要的主题列表。,回复主题在哪个表呢?其实,回复帖子的库文件是:cdb_posts 。我们在这里先只使用 cdb_thread,以数据库的方式获取,最新的帖子列表数据和第一讲标签调用有区别,大家一起跟我做。cdb_threads 中有几个重要的字段:tid (大家很熟悉了), 每个主题唯一的一个帖子 IDfid (所在论坛版块的 ID 号)typeid (主题分类类型) author | authorid 为作者的用户名和作者的 uidsubject (标题) dateline (发帖时间 )lastpost (最后回复者)lastp
15、oster (回复者用户名)views (浏览数)displayorder (置顶等级)看到了上面字段我们就可以根据这些来做一个最新主题列表的数据库 sql 语句我们可以这样写点上面的 sql 按钮输入:SELECT * FROM cdb_threads ORDER BY dateline DESC LIMIT 4 提交 sql 查询,看下结果。上面的这段 sql 语句的意思是以 dateline(发帖时间)的倒序,输出 4 个结果。限制在哪个版块我们先不考虑。这里讲到一些sql 语法。如果我们只想去的帖子 id 和标题用于显示,那我们只需要这样书写:SELECT tid,subject FR
16、OM cdb_threads ORDER BY dateline DESC LIMIT 4将 select 后面的变一下,变为你想要输出的字段名就可以了。这样一来,我们就获得了与第一个大问题同样效果的一个数据库调用 新主题列表的语句了。中国站长俱乐部:上面三讲我们给大家介绍了常用标签调用、dz 模板语法、常用 sql 语法以及 dz 数据库重要表和字段的介绍,最后我们结合所学知识做一个很实用的简单案例,大家跟着丛老师的步骤一起动起来。丛老师:首先。我们打开 dz 根目录的 forumdisplay.php 文件用编辑器打开(建议使用 Dreamweaver 或者 Editplus)向下,到最下
17、方。include template($template);代码的上面。在上面写入:$query = $db-query(“SELECT tid,subject FROM $tableprethreads WHERE fid = $fid ORDER BY dateline DESC LIMIT 4“);while($result = $db-fetch_array($query) print_r($result);然后,进入自己的演示站,进入一个有主题的论坛版块,查看一下。最上面会有类似的输出。如图继续修改刚才的代码:我们把 print_r($result);换成$mythread = $result;这句:$mythread = $result;的意思就是,组成数组,准备在模版中使用。大家进入 templates/default/forumdisplay.htm这个文件,打开以后。找到第 25 行:在下面。我们写一个 loop 循环帖子 ID:$valtid 主题:$valsubject细心的同学可以看到loop 后面跟着我们的变量 $mythread然后帖子 ID:$valtid 则是刚才在程序中要获取的 id 值主题:$valsubject则为标题我们的修改结果,我给大家截图看一下。