默认版块

您所在的位置:合元网络»|||默认版块222222论坛 代码学习 默认版块 discuz 怎么添加自定义模板  

discuz 怎么添加自定义模板

查看: 1370 发表于 2016-10-15 11:57:28 [复制链接]
  1. Discuz!X3是Discuz!建站程序系列的最新版本,提供了易于DIY的环境,很多新人喜欢问:我看见了那么多好看的模版,但是不符合我当前网站的需求,如何自己去DIY?
  2. 当然他们肯定去过官方论坛找教程,去看了那么多文字以后依旧不知道如何去编辑。其实最快开始DIY模版的道路是下载一个符合你心目中要求的框架的模版。例如我喜欢PHPWIND那种导航条置顶的风格,我就去下载了一个导航条置顶的模版,在这基础之上去DIY会相对容易一点。
  3. 首先我们需要了解的不是怎样开始DIY,而是需要知道,这页面是属于HTML代码制作的,HTML是一种标记语言,这就意味着你想加入什么功能的时候就要去搜索相关的功能标记。要了解HTML是如何运作的,是如何展现样式的,我们这里可以提供一个最基本的DIV代码。
  4. 1
  5. <div id="headerp" class="cssheader" style="background:#ccc">headerpic</div>
  6. 这个div会显示headerpic这几个字,这个div的标识符是headerp,其他代码和程序可以通过这个表示符来访问这个div;这个div引用了cssheader这个css样式,并且除非cssheader里面相关样式(当前相关样式:background)后面加上了!important重要标记,headerp这个div都会显示background(背景)为色板十六进制代码ccc的颜色(灰色)。

  7. 这里强调一下!important重要标记,在Discuz!里面,有很多运用到!important标记的地方。其中最常用的地方就是DIY模块,在DIY模块里面设定的边距等等数据会被加上!important标记,出现这样标记的时候除非有比这个!important更高级的!important声明,否则你设定的其他同样的样式都会被这!important前面的语句盖住。例:
  8. 1
  9. <div id="headerp" class="cssheader" style="background:#ccc">headerpic</div>
  10. 1
  11. 2
  12. .cssheader{ background:#aaa !important;}
  13. #headerp{ background:#bbb;}
  14. 在这个案例中,由于css样式.cssheader被添加了!important标记,所以即使element.style(background:#ccc)比.cssheader在样式优先顺序里面更高级,background属性也会使用.cssheader里面加了!important的数据。

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

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

  17. <?xml version="1.0" encoding="ISO-8859-1"?>
  18. <root>
  19. <item id="Title"><![CDATA[Discuz! Style]]></item>
  20. <item id="Data">
  21.   <item id="name"><![CDATA[默认风格]]></item>
  22.   <item id="templateid"><![CDATA[1]]></item>
  23.   <item id="tplname"><![CDATA[默认模板套系]]></item>
  24.   <item id="directory"><![CDATA[./template/default]]></item>
  25.   <item id="copyright"><![CDATA[康盛创想(北京)科技有限公司]]></item>
  26.   <item id="style">
  27.    <item id="smfont"><![CDATA[Arial]]></item>
  28.    <item id="threadtitlefontsize"><![CDATA[14px]]></item>
  29.    <item id="threadtitlefont"><![CDATA[Tahoma,'Microsoft Yahei','Simsun']]></item>
  30.    <item id="smfontsize"><![CDATA[0.83em]]></item>
  31.    <item id="tabletext"><![CDATA[#444]]></item>
  32.    <item id="midtext"><![CDATA[#666]]></item>
  33.    <item id="lighttext"><![CDATA[#999]]></item>
  34.    <item id="link"><![CDATA[#333]]></item>
  35.    <item id="highlightlink"><![CDATA[#369]]></item>
  36.    <item id="noticetext"><![CDATA[#F26C4F]]></item>
  37.    <item id="bgcolor"><![CDATA[#FFF background.png repeat-x 0 0]]></item>
  38.    <item id="msgfontsize"><![CDATA[14px]]></item>
  39.    <item id="sidebgcolor"><![CDATA[ vlineb.png repeat-y 0 0]]></item>
  40.    <item id="headerborder"><![CDATA[0]]></item>
  41.    <item id="headerbgcolor"><![CDATA[]]></item>
  42.    <item id="inputborderdarkcolor"><![CDATA[#848484]]></item>
  43.    <item id="stypeid"><![CDATA[1]]></item>
  44.    <item id="inputbg"><![CDATA[#FFF]]></item>
  45.    <item id="commonborder"><![CDATA[#CDCDCD]]></item>
  46.    <item id="commonbg"><![CDATA[#F2F2F2]]></item>
  47.    <item id="specialborder"><![CDATA[#C2D5E3]]></item>
  48.    <item id="specialbg"><![CDATA[#E5EDF2]]></item>
  49.    <item id="dropmenuborder"><![CDATA[#DDD]]></item>
  50.    <item id="floatmaskbgcolor"><![CDATA[#000]]></item>
  51.    <item id="dropmenubgcolor"><![CDATA[#FEFEFE]]></item>
  52.    <item id="floatbgcolor"><![CDATA[#FFF]]></item>
  53.    <item id="lightlink"><![CDATA[#FFF]]></item>
  54.    <item id="menuhoverbgcolor"><![CDATA[#005AB4 nv_a.png no-repeat 50% -33px]]></item>
  55.    <item id="titlebgcolor"><![CDATA[#E5EDF2 titlebg.png repeat-x 0 0]]></item>
  56.    <item id="fontsize"><![CDATA[12px/1.5]]></item>
  57.    <item id="font"><![CDATA[Tahoma,'Microsoft Yahei','Simsun']]></item>
  58.    <item id="styleimgdir"><![CDATA[]]></item>
  59.    <item id="imgdir"><![CDATA[]]></item>
  60.    <item id="boardimg"><![CDATA[logo.png]]></item>
  61.    <item id="available"><![CDATA[]]></item>
  62.    <item id="headertext"><![CDATA[#444]]></item>
  63.    <item id="footertext"><![CDATA[#666]]></item>
  64.    <item id="menubgcolor"><![CDATA[#2B7ACD nv.png no-repeat 0 0]]></item>
  65.    <item id="menutext"><![CDATA[#FFF]]></item>
  66.    <item id="menuhovertext"><![CDATA[#FFF]]></item>
  67.    <item id="wrapbg"><![CDATA[#FFF]]></item>
  68.    <item id="wrapbordercolor"><![CDATA[#CCC]]></item>
  69.    <item id="contentwidth"><![CDATA[630px]]></item>
  70.    <item id="contentseparate"><![CDATA[#C2D5E3]]></item>
  71.    <item id="inputborder"><![CDATA[#E0E0E0]]></item>
  72.   </item>
  73.   <item id="version"><![CDATA[X3.1]]></item>
  74. </item>
  75. </root>
  76. 需要注意的是这里的Title值不能改,必须保持原样才能够被安装和运行。version代表你这个模版能适用的Discuz!版本。可以用逗号分隔,例:
  77. 1
  78. <item id="version"><![CDATA[X2.5,X3.0,X3.1,X3.5]]></item>
  79. templateid是模版的标识符,这个如果是本地模版的话直接删掉这行即可。不然会识别错误。如果想自定义参数必须在style下面添加行。例如:
  80. 1
  81. <item id="diyxml"><![CDATA[diydiydiytext]]></item>
  82. Discuz!的这个自定义的参数非常好用,在之后的内容里面会被提及。
  83. 需要导入自定义模版的时候只需要在后台的界面-风格选项里面上面有个导入标签,点入以后会提示你一步一步导入你已经上传的模版。你也可以直接在对应的模版设置里面修改好参数然后到模版列表页导出你自定义好的模版XML文件。
  84. 所谓制作模版就是复制官方文件到自己的模版文件夹里面然后加以修改。
  85. Discuz!额外提供了一些便利设置方便我们设置CSS样式,那就是extend_。我们可以用添加这个
  86. 前缀的CSS来达到不替换原有CSS文件的情况下追加或者覆盖原CSS内容。添加的位置就是根目录/template/你的模版文件夹/common/extend_common.css。
  87. 要注意的是module.css里面的注释能起到划分区域的效果,优先级比extend_common.css还要高,但是common.css里面的!important依旧优先级比没有!important的module.css的对应内容要高。例:
  88. 1
  89. 2
  90. 3
  91. 4
  92. 5
  93. 6
  94. 7
  95. 8
  96. 9
  97. /** forum::viewthread,group::viewthread,forum::trade,forum::misc **/
  98. .pls {background:rgba(0,0,0,0.03);border-right:none;width:200px;}
  99. .ad .pls {background: #ffffff;}
  100. .ad .plc {background: #ffffff;}
  101. .pls .avatar img {width: 145px;padding:8px;background: #FFF;box-shadow:0px 0px 10px rgba(0,0,0,0.2);}
  102. .pls .avatar {text-align:center;}
  103. .pls p, .pls .pil, .pls .o {margin: 10px 20px;text-align: center;}
  104. .dvbg {background: #fff;}
  105. /** end **/
  106. 这些代码只在区域是forum::viewthread,group::viewthread,forum::trade和forum::misc生效。
  107. 1
  108. <!--{template common/header}-->
  109. 你在模版文件会看见这样的注释代码,这代码实际上能调用模版文件夹里面的网页文件,要求后缀是.htm,例如我在forum文件夹里面添加了一个timeline.htm,那么就可以添加如下代码在响应位置调用timeline这个页面
  110. 1
  111. <!--{template forum/timeline}-->

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

  113. 我们都很喜欢在网站上面添加一个大大的图片横幅,当然不一定是广告,也会喜欢添加一些美图。这个时候我们需要自己定义一个div,而不是用导航条上面那片区域的背景图片来解决。因为那会导致一些背景和插件色块重叠,看起来不美观。而且本例还要达成让用户来自定义这个背景图片的效果。
  114. 这里我们就得说一下Discuz!一个很有意思的地方。在模版里面,注释的内容并不是没用的,相反,注释的内容是可以被当作是PHP代码运行的。让用户自定义图片,我们就需要调用cookie.在Discuz!里面提供了一个调用COOKIE的一个标准方法:$_G['cookie']['cookiename'],这样我们就能调用名为cookiename的cookie了。具体实现代码如下(需要你有基本编程基础):
  115. 在discuz.htm中第一段注释下面添加:
  116. 1
  117. 2
  118. 3
  119. 4
  120. 5
  121. <!--{if isset($_G['cookie']['sttbg'])}-->
  122. <div id="headerpic" class="headerpic" style="background:url($_G['cookie']['sttbg'])"></div>
  123. <!--{else}-->
  124. <div id="headerpic" class="headerpic"></div>
  125. <!--{/if}-->
  126. 然后去DIY添加静态模块,选择自定义HTML模版。添加如下代码:
  127. 1
  128. 2
  129. 3
  130. 4
  131. 5
  132. 6
  133. 7
  134. 8
  135. 9
  136. <ul>
  137. <li>
  138. <span style="float:left">顶部图片链接</span>
  139. <form name="setdiyoptbg" onsubmit="setcookie('sttbg',setdiyoptbg.sttbg.value,60*60*24*30*12);">
  140. <input type="text" name="sttbg" />
  141. <input type="submit" value="设置" />
  142. </form>
  143. </li>
  144. </ul>
  145. 然后在common文件夹内新建extend_common.css,添加如下代码:
  146. 1
  147. .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;}
  148. 最后在模版设置里面的最下方添加自定义参数HEADERBG,内容指向想添加为默认头部图片的图片文件地址。图片文件前面添加了STYLEIMGDIR,这样就可以直接把图片放在模版文件夹里面的扩展图片文件夹里,不会搞乱格式。

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

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

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

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

  153. 网页跟我们平时所知道的顺序阅读载入方式有点不一样,网页的代码只会读取已经载入好的地方,所以接口不能放在程序代码前面,经过分析插件源文件 ,我把那个接口放在了修改了以后的用户名那段代码的后面,成功修复了橙名不显示的问题。代码如下
  154. 1
  155. 2
  156. 3
  157. 4
  158. 5
  159. 6
  160.     <!--{if $_G['setting']['authoronleft']}-->
  161.      <div class="anc">
  162.       <div class="authi"><a href="home.php?mod=space&uid=$post['authorid']" target="_blank" class="xw1"{if $post[groupcolor]} style="color: $post[groupcolor]"{/if}>$post[author]</a>$authorverifys</div>
  163.      </div>
  164.     <!--{/if}-->
  165.     <!--{hook/viewthread_profileside $postcount}-->
  166. 注意这里面最后的hook注释句,这就是Discuz插件的入口。通过移动它来调整插件载入的位置。

  167. 很多同学会问,我如果想要加入jQuery模块但是各种出错,到底应该怎么做?在header_common.htm找到common.js的载入行,在这之前载入你的jQuery文件,然后紧接着加上这段代码
  168. 1
  169. var jQ = jQuery.noConflict();
  170. 然后把jQuery模块里面的$符号替换成jQ就大功告成了。不是所有的都要替换,只有在括号前的$才要替换。直接查找和替换搜  $(  ,替换成  jQ(  即可。

  171. 至此,我独家的Discuz自定义模版教程编写完毕。
复制代码


— 产品中心

PRODUCT CENTER

— 产品中心

PRODUCT CENTER

CopyRight 2012-2017 合元网络 版权所有
公司地址:郑州市高新区升龙又一城A区2号楼2单元17楼 热线电话:15303843903 豫ICP备14027215号
快速回复 返回列表