当前位置:首页 > 代码 > 正文

php实现discuz模版引擎封装代码(discuz模板开发)

admin 发布:2022-12-19 15:11 136


本篇文章给大家谈谈php实现discuz模版引擎封装代码,以及discuz模板开发对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Discuz! 站内信功能的代码分析是在 pm.php 中实现的么?接口函数都有哪些?

这是个功能,不是一个函数能解决的,PHP也不存在这样的功能,需要程序员编写代码开发。

首先要你需要建立一个数据库表,用来存放站内信的相关信息,然后用户使用站内信功能的时候去数据库查询和自己有关的站内信(比如说自己发送的,别人发给你的等等),这属于比较简单的功能开发。

discuz模板制作问题

Discuz!X3是Discuz!建站程序系列的最新版本,提供了易于DIY的环境,很多新人喜欢问:我看见了那么多好看的模版,但是不符合我当前网站的需求,如何自己去DIY?

当然他们肯定去过官方论坛找教程,去看了那么多文字以后依旧不知道如何去编辑。其实最快开始DIY模版的道路是下载一个符合你心目中要求的框架的模版。例如我喜欢PHPWIND那种导航条置顶的风格,我就去下载了一个导航条置顶的模版,在这基础之上去DIY会相对容易一点。

首先我们需要了解的不是怎样开始DIY,而是需要知道,这页面是属于HTML代码制作的,HTML是一种标记语言,这就意味着你想加入什么功能的时候就要去搜索相关的功能标记。要了解HTML是如何运作的,是如何展现样式的,我们这里可以提供一个最基本的DIV代码。

div id="headerp" class="cssheader" style="background:#ccc"headerpic/div

这个div会显示headerpic这几个字,这个div的标识符是headerp,其他代码和程序可以通过这个表示符来访问这个div;这个div引用了cssheader这个css样式,并且除非cssheader里面相关样式(当前相关样式:background)后面加上了!important重要标记,headerp这个div都会显示background(背景)为色板十六进制代码ccc的颜色(灰色)。

这里强调一下!important重要标记,在Discuz!里面,有很多运用到!important标记的地方。其中最常用的地方就是DIY模块,在DIY模块里面设定的边距等等数据会被加上!important标记,出现这样标记的时候除非有比这个!important更高级的!important声明,否则你设定的其他同样的样式都会被这!important前面的语句盖住。例:

div id="headerp" class="cssheader" style="background:#ccc"headerpic/div

.cssheader{ background:#aaa !important;}

#headerp{ background:#bbb;}

在这个案例中,由于css样式.cssheader被添加了!important标记,所以即使element.style(background:#ccc)比.cssheader在样式优先顺序里面更高级,background属性也会使用.cssheader里面加了!important的数据。

记住了这些以后让我们来真正去DIY属于自己的模版吧。

Discuz!X的模版位于 根目录/template 文件夹里面,在这里面每一个文件夹都会被识别成一个新模版。如果你有想要安装的模版,只需要把模版的整个文件夹复制到这个目录然后进入后台-界面-风格设置里面找到对应的模版然后安装。安装好以后勾选为默认模版以后提交即可。创建模版的时候我们需要把default(默认模版)文件夹里面的discuz_style_default.xml复制到你的模版目录/discuz_style_你的模版名.xml。然后安装官方的模版xml去修改里面的内容。

?xml version="1.0" encoding="ISO-8859-1"?

root

 item id="Title"![CDATA[Discuz! Style]]/item

 item id="Data"

  item id="name"![CDATA[默认风格]]/item

  item id="templateid"![CDATA[1]]/item

  item id="tplname"![CDATA[默认模板套系]]/item

  item id="directory"![CDATA[./template/default]]/item

  item id="copyright"![CDATA[康盛创想(北京)科技有限公司]]/item

  item id="style"

   item id="smfont"![CDATA[Arial]]/item

   item id="threadtitlefontsize"![CDATA[14px]]/item

   item id="threadtitlefont"![CDATA[Tahoma,'Microsoft Yahei','Simsun']]/item

   item id="smfontsize"![CDATA[0.83em]]/item

   item id="tabletext"![CDATA[#444]]/item

   item id="midtext"![CDATA[#666]]/item

   item id="lighttext"![CDATA[#999]]/item

   item id="link"![CDATA[#333]]/item

   item id="highlightlink"![CDATA[#369]]/item

   item id="noticetext"![CDATA[#F26C4F]]/item

   item id="bgcolor"![CDATA[#FFF background.png repeat-x 0 0]]/item

   item id="msgfontsize"![CDATA[14px]]/item

   item id="sidebgcolor"![CDATA[ vlineb.png repeat-y 0 0]]/item

   item id="headerborder"![CDATA[0]]/item

   item id="headerbgcolor"![CDATA[]]/item

   item id="inputborderdarkcolor"![CDATA[#848484]]/item

   item id="stypeid"![CDATA[1]]/item

   item id="inputbg"![CDATA[#FFF]]/item

   item id="commonborder"![CDATA[#CDCDCD]]/item

   item id="commonbg"![CDATA[#F2F2F2]]/item

   item id="specialborder"![CDATA[#C2D5E3]]/item

   item id="specialbg"![CDATA[#E5EDF2]]/item

   item id="dropmenuborder"![CDATA[#DDD]]/item

   item id="floatmaskbgcolor"![CDATA[#000]]/item

   item id="dropmenubgcolor"![CDATA[#FEFEFE]]/item

   item id="floatbgcolor"![CDATA[#FFF]]/item

   item id="lightlink"![CDATA[#FFF]]/item

   item id="menuhoverbgcolor"![CDATA[#005AB4 nv_a.png no-repeat 50% -33px]]/item

   item id="titlebgcolor"![CDATA[#E5EDF2 titlebg.png repeat-x 0 0]]/item

   item id="fontsize"![CDATA[12px/1.5]]/item

   item id="font"![CDATA[Tahoma,'Microsoft Yahei','Simsun']]/item

   item id="styleimgdir"![CDATA[]]/item

   item id="imgdir"![CDATA[]]/item

   item id="boardimg"![CDATA[logo.png]]/item

   item id="available"![CDATA[]]/item

   item id="headertext"![CDATA[#444]]/item

   item id="footertext"![CDATA[#666]]/item

   item id="menubgcolor"![CDATA[#2B7ACD nv.png no-repeat 0 0]]/item

   item id="menutext"![CDATA[#FFF]]/item

   item id="menuhovertext"![CDATA[#FFF]]/item

   item id="wrapbg"![CDATA[#FFF]]/item

   item id="wrapbordercolor"![CDATA[#CCC]]/item

   item id="contentwidth"![CDATA[630px]]/item

   item id="contentseparate"![CDATA[#C2D5E3]]/item

   item id="inputborder"![CDATA[#E0E0E0]]/item

  /item

  item id="version"![CDATA[X3.1]]/item

 /item

/root

需要注意的是这里的Title值不能改,必须保持原样才能够被安装和运行。version代表你这个模版能适用的Discuz!版本。可以用逗号分隔,例:

item id="version"![CDATA[X2.5,X3.0,X3.1,X3.5]]/item

templateid是模版的标识符,这个如果是本地模版的话直接删掉这行即可。不然会识别错误。如果想自定义参数必须在style下面添加行。例如:

item id="diyxml"![CDATA[diydiydiytext]]/item

Discuz!的这个自定义的参数非常好用,在之后的内容里面会被提及。

需要导入自定义模版的时候只需要在后台的界面-风格选项里面上面有个导入标签,点入以后会提示你一步一步导入你已经上传的模版。你也可以直接在对应的模版设置里面修改好参数然后到模版列表页导出你自定义好的模版XML文件。

所谓制作模版就是复制官方文件到自己的模版文件夹里面然后加以修改。

Discuz!额外提供了一些便利设置方便我们设置CSS样式,那就是extend_。我们可以用添加这个

前缀的CSS来达到不替换原有CSS文件的情况下追加或者覆盖原CSS内容。添加的位置就是根目录/template/你的模版文件夹/common/extend_common.css。

要注意的是module.css里面的注释能起到划分区域的效果,优先级比extend_common.css还要高,但是common.css里面的!important依旧优先级比没有!important的module.css的对应内容要高。例:

/** forum::viewthread,group::viewthread,forum::trade,forum::misc **/

.pls {background:rgba(0,0,0,0.03);border-right:none;width:200px;}

.ad .pls {background: #ffffff;}

.ad .plc {background: #ffffff;}

.pls .avatar img {width: 145px;padding:8px;background: #FFF;box-shadow:0px 0px 10px rgba(0,0,0,0.2);}

.pls .avatar {text-align:center;}

.pls p, .pls .pil, .pls .o {margin: 10px 20px;text-align: center;}

.dvbg {background: #fff;}

/** end **/

这些代码只在区域是forum::viewthread,group::viewthread,forum::trade和forum::misc生效。

!--{template common/header}--

你在模版文件会看见这样的注释代码,这代码实际上能调用模版文件夹里面的网页文件,要求后缀是.htm,例如我在forum文件夹里面添加了一个timeline.htm,那么就可以添加如下代码在响应位置调用timeline这个页面

!--{template forum/timeline}--

我们现在掌握了这些知识以后可以考虑开始初步为网站添加点料了。

我们都很喜欢在网站上面添加一个大大的图片横幅,当然不一定是广告,也会喜欢添加一些美图。这个时候我们需要自己定义一个div,而不是用导航条上面那片区域的背景图片来解决。因为那会导致一些背景和插件色块重叠,看起来不美观。而且本例还要达成让用户来自定义这个背景图片的效果。

这里我们就得说一下Discuz!一个很有意思的地方。在模版里面,注释的内容并不是没用的,相反,注释的内容是可以被当作是PHP代码运行的。让用户自定义图片,我们就需要调用cookie.在Discuz!里面提供了一个调用COOKIE的一个标准方法:$_G['cookie']['cookiename'],这样我们就能调用名为cookiename的cookie了。具体实现代码如下(需要你有基本编程基础):

在discuz.htm中第一段注释下面添加:

!--{if isset($_G['cookie']['sttbg'])}--

div id="headerpic" class="headerpic" style="background:url($_G['cookie']['sttbg'])"/div

!--{else}--

div id="headerpic" class="headerpic"/div

!--{/if}--

然后去DIY添加静态模块,选择自定义HTML模版。添加如下代码:

ul

li

span style="float:left"顶部图片链接/span

form name="setdiyoptbg" onsubmit="setcookie('sttbg',setdiyoptbg.sttbg.value,60*60*24*30*12);"

 input type="text" name="sttbg" /

 input type="submit" value="设置" /

/form

/li

/ul

然后在common文件夹内新建extend_common.css,添加如下代码:

.headerpic {background:url({STYLEIMGDIR}/{HEADERBG}) no-repeat right 0 transparent;background-size:cover;background-position:0% 10%;height:220px;box-shadow:0 0 15px #8f8f8f;}

最后在模版设置里面的最下方添加自定义参数HEADERBG,内容指向想添加为默认头部图片的图片文件地址。图片文件前面添加了STYLEIMGDIR,这样就可以直接把图片放在模版文件夹里面的扩展图片文件夹里,不会搞乱格式。

至此,添加自定义内容的教程结束。

这个教学旨在去学会如何学习制作,而并不是学习制作方法,就是授人以鱼不如授人以渔的意思。概念会比较泛,必须要自己去动手做才能理解。

我们很多时候不止要添加元素,还需要修改已有的元素。这个时候我们就需要开发者模式了,不然很多时候你会一头雾水。这里推荐chrome和ie10以上的开发者模式,都支持页面编辑,即时让代码生效。满意了以后直接去修改对应文件即可,不过你要熟悉那部分的代码,就如同上一步添加模块一样你需要知道所有代码的意思,不然很可能导致失败效果。

这里特殊说一下plugin接口,当你在修改元素的时候,可能会导致一些插件无法被正常使用,这个时候你就需要尝试修改一下插件接口的位置。例如我把viewthread_node.htm里面的用户名移动到了头像下方,这个时候某插件的橙名功能失效了,联系插件作者无果以后决定自己亲手来修改模版以达到适应插件的效果。

网页跟我们平时所知道的顺序阅读载入方式有点不一样,网页的代码只会读取已经载入好的地方,所以接口不能放在程序代码前面,经过分析插件源文件 ,我把那个接口放在了修改了以后的用户名那段代码的后面,成功修复了橙名不显示的问题。代码如下

    !--{if $_G['setting']['authoronleft']}--

     div class="anc"

      div class="authi"a href="home.php?mod=spaceuid=$post['authorid']" target="_blank" class="xw1"{if $post[groupcolor]} style="color: $post[groupcolor]"{/if}$post[author]/a$authorverifys/div

     /div

    !--{/if}--

    !--{hook/viewthread_profileside $postcount}--

注意这里面最后的hook注释句,这就是Discuz插件的入口。通过移动它来调整插件载入的位置。

至此,我独家的Discuz自定义模版教程编写完毕。以上内容均为原创,曾经在类似的问题里面发过,但是作者迟迟没能回来采纳,深感遗憾。

回第二个问题:在界面导航里面去掉论坛的顶部导航,就是设置成不可用。然后在界面里面把门户选作主页即可。虽然用户仍旧能通过forum.php访问论坛,但是这也是最简单最可行的办法

Discuz是怎么封装数据库的

可以直接用php的方法也可以用discuz封装的一些方法的,建议去站帮网看下,有discuz开发的视频教程的

怎么进行discuz的二次开发

必须至少具备如下技能:

1) 能够理很好理解MVC构架的原理(虽然DZ不是MVC架构的)

2) 扎实的PHP基础,熟悉结构化程序,OOP程序的写法及应用

3)熟悉MYSQL就用,掌握SQL语言,懂SQL优化者更佳

4) 熟悉使用Discuz!的各项功能

一) Discuz!的文件系统目录

注:想搞DZ开发,就得弄懂DZ中每个文件的功能。

a) Admin:后台管理功能模块

b) Api:DZ系统与其它系统之间接口程序

c) Archiver:DZ中,用以搜索引擎优化的无图版

d) Attachments:DZ中 ,用户上传附件的存放目录

e) Customavatars:DZ中,用户自定义头像的目录

f) Forumdata:DZ缓存数据的存放目录

g) Images:DZ模板中的图片存放目录

h) Include:DZ常用函数库,基本功能模块目录

i) Ipdata:DZ统计IP来路用的数据

j) Plugins:DZ插件信息的存放目录

k) Templates:DZ模板文件的存放目录

l) Wap:DZ无线,Wap程序处理目录

二) 必须记熟Discuz!数据库设计的每个表的功能,每个表中每个字段的功能。

关于DZ数据库设计文档,请参阅DZ相关的项目

三) Discuz!的流程控制

a)

后台流程控:DZ后台所有的功能,均需要注册到admincp.php文件,每个功能都至少有一个或一个以上的Action(动作),在

admincp.php中,可以定义Action的执行权限,分别为:“admin==1”管理员,或“admin==2

admin==3”超级版主和版主,每个Action对应一个脚本文件,脚本文件的命名为action.inc.php(*.inc.php),并存放在

admin目录下,如执行:admincp.php?action=dodo,相当于执行admin目录下的dodo.inc.php文件

b) 前台流程控制:前台的流程控制比较简单:流程是自由的,如:

首页:index.php

会员注册:register.php;

会员登录:logging.php

发贴程序:post.php

会员信息:member.php

论坛内容:forumdisplay.php

查看贴子:viewthread.php

…大部分功能,此处不一一列出…

c) DZ根目下的config.inc.php属于整个DZ系统的配置文件

四) Discuz!的数据处理过程

a) DZ对mysql的数据库操作处理全部封装在dbstuff(db_mysql.class.php)类中

b) 所在的外部数据均通过“daddslashes()”初步过滤,然后再过滤,再根据需要处理

五) Discuz!的显示控制(网站多样式风格输出)

a) 显示层就是大家通常所看到的网站风格了。DZ中每套风络分别在templates及images下对应一个风格文件的存放目录。网站风格的制作,请参阅详细的DZ风格制作文档

b) DZ网站风格文件处理的原理:其实很简单,DZ使用template.func.php中的parse_template()以PHP正则运算把htm模

文件中的模板标签,转换成了PHP代码,并根据styleid保存在forumdata/templates下,这个有点像Smarty中的技术。

六) DZ中的语言处理

a) 前台及后台中、英语言的实现,均是把语句定义成了语变量,然后在模板输入,语句变量的赋值,均放在模板目录中的*.lang.php文件中,DZ在生成网站风格时就加载了这相应的语言包。

七) DZ如何处理用户信息(存取、计算、更新过程)

新手要做二次开发,都必须掌握这数组中,每个数组元素的意义。

a) DZ的基本信息,如用户信息,Session信息存在如下变量中:

a). $_DCACHE

b). $_COOKIE

c). $_DCOOKIE

d). $_DSESSION

e). $_DPLUGIN

b) 可以通过print_r($GLOBALS),打印全部变量

八) DZ中缓存处理机制

a) DZ中缓存处理过程都放在“cache.func.php”中,DZ的缓存处理比较简单,其原理是把一个数组转换成了PHP代码,并保存在缓存目录下,大家可打开缓存文件查看便知。

b)使用方法:如果在新开的功能中,需要缓存某部分数据,基本上就是:

1)定义并注册缓存名字。

2)从数据读取相应的数据。

3)数据在写入缓存前作相应处理。

4)最后写入缓存。

具体操作,可以看文件中的代码,做相应的修改即可

九) DZ中模板处理机制

a) DZ独创的模板处理技术,类似于Smarty中的模板处理,只是具体算法,过程不同,Smarty是一种重型模板引擎方案。其原理都是把模板中的变量转换成相应的PHP代码,这个过程实际是模访JAVA中的一次编译,多处运行。

十) DZ中权限处理机制

a) 对于DZ中前台的每相action都有$discuz_action定义,DZ根据用户所在的用户组来判定用户是否具有相应操作$discuz_action的权限。至于后台的权限权验证,则更简单了,依据“admin==1”来确定的

十一) DZ中如何实现URL静态化

a) DZ中的静态有两法,只要懂ReWrite规划的朋友,一看就知。

十二) DZ独创的HTML编辑器,如何截取并使用,如果进行Discuz!代和Html代码的转换

a) 这也算是DZ比较牛的一项技术了,在早期版中,因DZ编辑器的不足,使得很多用户放弃了DZ。

实现原理:通过JS把用的一些操作转换成了DZ的bbcode代码。这样子提交了安全性,将带有bbcode代码的内容存入数据,在用户打开页页时,又把bbcode代码转换成html代码

关于php实现discuz模版引擎封装代码和discuz模板开发的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/9929.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载