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