Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

请问dz7.2怎么做home页????

[复制链接]
zxcva 发表于 2010-10-31 18:47:41 | 显示全部楼层 |阅读模式
是不是复制include下的index_classics.inc.php引入新的模板就可以了,我用这个方法游客不能浏览,要登陆了才看到到,请问要怎么弄才行啊》》》???
shangbin2 发表于 2010-10-31 19:30:15 | 显示全部楼层
本帖最后由 shangbin2 于 2010-10-31 19:33 编辑

思路正确.可以这样做 ,也外载页面 加载数据库内容.

Discuz!7.2 制作MySQL查询并缓存文件的Home页教程

思路简介:
1、利用inblude\cache.func.php生成缓存文件forumdata\cache\cache_hslqhom.php
2、在Home页index_home.php中指定缓存文件为forumdata\cache\cache_hslqhom.php
3、在Home页的风格文件hslqhome.htm中调用forumdata\cache\cache_hslqhom.php内的缓存内容
4、当缓存文件内相关动作项(如新发表、新回复、精华等)有改变时更新缓存文件forumdata\cache\cache_hslqhom.php  

结构说明:
Home 页:index_home.php
对应风格:hslqhome.htm
缓存生成:cache_hslqhome.php
需修改页:include\common.inc.php
     include\cache.func.php
     newthread.inc.php、newreply.inc.php等相关动作项关联文件

过程简介:
1、制作home页并声明缓存文件及模版文件
2、修改include\common.inc.php让缓存声明生效
3、在缓存控制文件include\cache.func.php中添加缓存生成内容
4、在风格模版中的调用
5、让cache_hslqhome.php能够及时自动更新






LOGO 设计,AD广告,图片设计,仿制
Discuz X 模板 设计,仿制,均可联系我
QQ :948018666   

价格不够惊喜,但绝对够实惠.




PS:DedeCMS等各种程序模板,网页也均接,
Discuz X优先最高, dedecms其次.






回复

使用道具 举报

shangbin2 发表于 2010-10-31 19:30:55 | 显示全部楼层
本帖最后由 shangbin2 于 2010-10-31 19:32 编辑

1、制作home页并声明缓存文件及模版文件

Discuz!7.2的真正首页是include\index_classics.inc.php 复制index_classics.inc.php命名为自己想要的文件名,比如:index_home.php

打开index_home.php,找到:
  • if(!defined('IN_DISCUZ')) {
  • exit('Access Denied');
  • }


改为:
  • define('CURSCRIPT', 'hslqhome');


并在其后添加:
  • require_once './include/common.inc.php';


然后找到:
  • if($cacheindexlife && !$discuz_uid && $showoldetails != 'yes' && (!$_DCACHE['settings']['frameon'] || $_DCACHE['settings']['frameon'] && $_GET['frameon'] != 'yes') && empty($gid)) {
  • $indexcache = getcacheinfo(0);
  • if($timestamp - $indexcache['filemtime'] > $cacheindexlife) {
  • @unlink($indexcache['filename']);
  • define('CACHE_FILE', $indexcache['filename']);
  • $styleid = $_DCACHE['settings']['styleid'];
  • } elseif($indexcache['filename']) {
  • @readfile($indexcache['filename']);
  • $debug && debuginfo();
  • $debug ? die('
  • document.getElementById("debuginfo").innerHTML = " '.($debug ? 'Updated at '.gmdate("H:i:s", $indexcache['filemtime'] + 3600 * 8).', Processed in '.$debuginfo['time'].' second(s), '.$debuginfo['queries'].' Queries'.($gzipcompress ? ', Gzip enabled' : '') : '').'";
  • ') : die();
  • }
  • }


把其中index修改成你要生成的缓存文件,如本例hslqhome:
  • if($cachehslqhomelife && !$discuz_uid && $showoldetails != 'yes' && (!$_DCACHE['settings']['frameon'] || $_DCACHE['settings']['frameon'] && $_GET['frameon'] != 'yes') && empty($gid)) {
  • $hslqhomecache = getcacheinfo(0);
  • if($timestamp - $hslqhomecache['filemtime'] > $cachehslqhomelife) {
  • @unlink($hslqhomecache['filename']);
  • define('CACHE_FILE', $hslqhomecache['filename']);
  • $styleid = $_DCACHE['settings']['styleid'];
  • } elseif($hslqhomecache['filename']) {
  • @readfile($hslqhomecache['filename']);
  • $debug && debuginfo();
  • $debug ? die('
  • document.getElementById("debuginfo").innerHTML = " '.($debug ? 'Updated at '.gmdate("H:i:s", $hslqhomecache['filemtime'] + 3600 * 8).', Processed in '.$debuginfo['time'].' second(s), '.$debuginfo['queries'].' Queries'.($gzipcompress ? ', Gzip enabled' : '') : '').'";
  • ') : die();
  • }
  • }


此时,即修改为index_home.php文件调用的是forumdata\cache\cache_hslqhom.php的缓存文件内容。

然后修改最底部:
  • include template('discuz');


为:
  • include template('hslqhome');


这是指定index_home.php调用hslqhome.htm风格文件。

2、修改include\common.inc.php让缓存声明生效

common.inc.php是DZ系统中的一个极其重要的文件,我们不去研究它如何编写,看看在本例中它如何使用吧。

修改目的:让“define('CURSCRIPT', 'hslqhome');”这个缓存文件声明有效

大概在152行。
查找:
  • if(in_array(CURSCRIPT, array('index', 'forumdisplay', 'viewthread', 'post', 'topicadmin', 'register', 'archiver')))


在其中加入我们的缓存声明“hslqhome”,即:
  • if(in_array(CURSCRIPT, array('index', 'forumdisplay', 'viewthread', 'post', 'topicadmin', 'register', 'archiver', 'hslqhome')))


此时,index_home.php的缓存文件声明才算完成,才能够在Home页模版hslqhome.htm中用类似于:
  • < !--{loop $_DCACHE[hslqzctt] $topthread}-->
  • ...
  • < !--{/loop}-->


的语句直接调用。

3、在缓存控制文件include\cache.func.php中添加缓存生成内容

A、声明变量:找到
  • 'index'                => array('announcements', 'onlinelist', 'forumlinks', 'advs_index', 'heats'),


在下面新增一行:
  • 'hslqhome' => array('hslqzctt', 'hslqttxb', 'hslqjhtj1', 'hslqjhtj2', 'hslqjhtj3', 'hslqhdtt', 'hslqhdttx'),


当然,未来的缓存文件cache_hslqhome.php中有多少项生成,全靠你的需要,可按照格式增减。

B、声明MySQL查询语句:
  • //左侧头条
  •         case 'hslqzctt':
  •             $table = 'threads t';
  •             $cols = 't.tid, t.fid, t.author, t.authorid, t.subject, t.dateline, t.lastpost, t.lastposter, t.views, t.replies, t.highlight, f.name';
  •             $conditions = "LEFT JOIN {$tablepre}forums f ON f.fid=t.fid WHERE f.fid in (6) AND t.displayorder not in (-1,-2) ORDER BY t.dateline DESC LIMIT 0, 2";
  • break;
  • //完毕//


要想加入精华和置顶帖的限制,可以用如下方法:
  • $conditions = "LEFT JOIN {$tablepre}forums f ON f.fid=t.fid WHERE f.fid in (6) AND t.displayorder in (1,2,3) ORDER BY t.dateline DESC LIMIT 0, 2";
  • //t.displayorder in (1,2,3) 置顶帖
  • //t.digest in (1,2,3) 精华帖
  • //t.typeid in (68) 分类为68的帖子


当然,也可以增加更多查询表和条件。这个需要对MySQL数据库查询方法有所了解。我是菜鸟,这里就不多罗嗦了。

C、格式化调用内容变量声明:
  • //左侧头条
  •         case 'hslqzctt':
  •             $colorarray = array('', 'red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'purple', 'gray');
  •                         while($topthread = $db->fetch_array($query)) {
  •             $threadcolor = sprintf('%02d', $topthread['highlight']);
  •             $topthread['author'] = $topthread['author'] ? $topthread['author'] : '游客';
  •             $topthread['authorid'] = $topthread['authorid'];
  •             $topthread['subjectc'] = cutstr($topthread['subject'], 42);
  •             $topthread['threadcolor'] = $threadcolor[1] ? " style=\"color: ".$colorarray[$threadcolor[1]]."\"" : NULL;
  •             $topthread['dateline'] = gmdate("Y-m-d H:i", $topthread['dateline'] + $GLOBALS['timeoffset'] * 3600 );
  •             $topthread['lastpost'] = gmdate("Y-m-d H:i", $topthread['lastpost'] + $GLOBALS['timeoffset'] * 3600 );
  •             $topthread['name'] =  AddSlashes(strip_tags(trim($topthread['name'])));
  •             $data[] = $topthread;
  •                                                                 }
  •             break;
  • //完毕//


这样就会在cache_hslqhome.php中生成需要的hslqzctt项内容。

如需其他调用,请按照格式自行添加。

4、在风格模版中的调用

生成了cache_hslqhome.php缓存文件后,就需要在风格模版中调用它了。
  • <!--左侧头条-->
  • <!--{loop $_DCACHE[hslqzctt] $topthread}-->
  • <A href="viewthread.php?tid=$topthread[tid]" $topthread['threadcolor'] title='今日头条 {LF}所在论坛: $topthread[name]{LF}主题标题: $topthread[subject] {LF}主题作者: $topthread[author]{LF}发表时间: $topthread[dateline]{LF}浏览次数: $topthread[views] 次 {LF}回复次数: $topthread[replies] 次{LF}最后回复: $topthread[lastposter]' target="_blank" ><h2>$topthread[subjectc]</h2></A>
  • <p class="twtcDGray">{message} ...</p>
  • <!--{/loop}-->


其中要注意的是:topthread这个数据缓冲名一定要与cache_func.php文件中声明的保持一致,各个变量名也要保持一致。

还可以这样调用:
  • <!--精华推荐1-->
  • <table width="100%" border="0" align="left" cellpadding="0" cellspacing="0">
  • <!--{loop $_DCACHE[hslqjhtj1] $topthread}-->
  •   <tr>
  •     <td align="left"><span class="cBlueBBS mR5 left">[<a href="forumdisplay.php?fid=$topthread[fid]" target="_blank">$topthread[name]</a>]</span></td>
  •     <td align="left"><span style="font-size:14px;line-height:23px;"><A href="viewthread.php?tid=$topthread[tid]" title='今日最热 {LF}所在论坛: $topthread[name]{LF}主题标题: $topthread[subject] {LF}主题作者: $topthread[author]{LF}发表时间: $topthread[dateline]{LF}浏览次数: $topthread[views] 次 {LF}回复次数: $topthread[replies] 次{LF}最后回复: $topthread[lastposter]' target="_blank">$topthread[subjectc]</A></span></td>
  •     <td align="right"><a href="http://www.redts.cn/$topthread[authorid]" target="_blank"><span class="f12px cGreenBBS">$topthread[author]</span></a></td>
  •   </tr>
  • <!--{/loop}-->
  • </table>


如何发挥,就看大家了。

5、让cache_hslqhome.php能够及时更新

假设hslqzxtz是论坛最新帖调用,当新发帖时更新:打开文件include/newthread.inc.php
查找:
  •                 $subject = str_replace("\t", ' ', $subject);
  •                 $lastpost = "$tid\t$subject\t$timestamp\t$author";


在上面添加:
  •                 require_once DISCUZ_ROOT.'./include/cache.func.php';
  •                 updatecache('hslqzxtz');


其他的方法,请按照上面的,并结合下面的例子进行设置。

管理操作短消息通知时更新缓存:
打开文件topicadmin.php
查找:
  • showmessage((isset($resultarray['message']) ? $resultarray['message'] : 'admin_succeed'), $resultarray['redirect']);


在上面加入:
  • require_once DISCUZ_ROOT.'./include/cache.func.php';
  • updatecache('hslqzxtz');


编辑帖子时更新缓存:
打开文件include/editpost.inc.php
查找:
  •                 if($thread['special'] == 3 && $isfirstpost) {
  •                         $db->query("UPDATE {$tablepre}members SET extcredits$creditstrans=extcredits$creditstrans+$thread[price] WHERE uid='$orig[authorid]'", 'UNBUFFERED');
  •                         $db->query("DELETE FROM {$tablepre}rewardlog WHERE tid='$tid'", 'UNBUFFERED');
  •                 }


在上面添加:
  •                 require_once DISCUZ_ROOT.'./include/cache.func.php';
  •                 updatecache('hslqzxtz');


回复帖子时更新缓存:
打开文件include/newreply.inc.php
查找:
  •                 $lastpost = "$thread[tid]\t".addslashes($thread['subject'])."\t$timestamp\t$author";
  •                 $db->query("UPDATE {$tablepre}forums SET lastpost='$lastpost', posts=posts+1, todayposts=todayposts+1 WHERE fid='$fid'", 'UNBUFFERED');


在上面添加:
  •                 require_once DISCUZ_ROOT.'./include/cache.func.php';
  •                 updatecache('hslqzxtz');


有问题可以联系我 QQ 948018666
回复

使用道具 举报

 楼主| zxcva 发表于 2010-10-31 21:02:19 | 显示全部楼层
回复 shangbin2 的帖子

不需要生成缓存,需要怎么弄呢,我复制了include下的index_classics.inc.php引入新的模板后,游客状态下看到的home页和论坛首页是同一个页面,要登陆之后才正常,请问是不是还有哪里没改?
回复

使用道具 举报

shangbin2 发表于 2010-10-31 21:51:34 | 显示全部楼层
回复 zxcva 的帖子

登陆判断那未删除
回复

使用道具 举报

 楼主| zxcva 发表于 2010-10-31 23:54:28 | 显示全部楼层
回复 shangbin2 的帖子

是模板里吗?
回复

使用道具 举报

shangbin2 发表于 2010-11-1 00:33:23 | 显示全部楼层
回复 zxcva 的帖子

是模板





LOGO 设计,AD广告,图片设计,仿制
Discuz X 模板 设计,仿制,均可联系我
QQ :948018666   

价格不够惊喜,但绝对够实惠.




PS:DedeCMS等各种程序模板,网页也均接,
Discuz X优先最高, dedecms其次.






回复

使用道具 举报

桥下街 发表于 2010-11-1 00:38:20 | 显示全部楼层
顶一下啦。
回复

使用道具 举报

桥下街 发表于 2010-11-1 00:40:12 | 显示全部楼层
万事大吉
回复

使用道具 举报

zerodown 发表于 2010-11-1 03:06:41 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-19 02:24 , Processed in 0.031409 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表