Discuz!添加新的DIY页面,并且实现帖子模块分页 (翻页) 功能-Discuz教程下载

Discuz!添加新的DIY页面,并且实现帖子模块分页 (翻页) 功能

来自版块: Discuz教程发表于: 2024-9-9 13:38:32
422
0
如本资源下载地址失效,请点击此处进行反馈
开通本站Svip会员,全站资源免费下
一、前言:
这是真实有效的Discuz!帖子分页功能,网上也有其他的文章模块分页方法,但没有帖子的。我自己的资源网站需要做分页,无奈discuz官方一直都不搞分页的,唯有自己DIY一波了。这几天我也百度了很多资料,才最终研究出来,现在把经验分享给大家!
1.png
下面大家按我的节奏来,我会先添加一个新的独立页面 ,如果你不需要就可以省略!
二、分页方法:
1、在网站根目录新建一个名为code.php的入口文件 ,代码如下:
  1. <?php

  2. /**
  3. * 新增加的code.php入口文件
  4. */

  5. define('APPTYPEID', 2);
  6. define('CURSCRIPT', 'code');

  7. require './source/class/class_core.php';
  8. require DISCUZ_ROOT.'./source/function/function_code.php';

  9. /*创建及初始化对象*/
  10. $discuz = C::app();
  11. $discuz->reject_robot();
  12. $discuz->init();
  13. /*分类数组*/
  14. $modarray = array('1', '2','3','4','5','6','7','8','9','10');
  15. if(empty($_GET['mod']) || !in_array($_GET['mod'],$modarray)){
  16.         $_GET['mod'] = 'index';
  17. }

  18. /*------------------------设置常量-------------------------*/
  19. /*DIY模块标识*/
  20. define('DIY_MOD', $_GET['mod']);
  21. /*DIY模块id(注明:下面的495是我帖子DIY模块的id,查看方法:在DIY模式下,把鼠标放到模块上,右上角会显示这个id值出来)*/
  22. define('DIY_BID', isset($_GET['bid'])?$_GET['bid']:495);
  23. /*每页显示多少条数据*/
  24. define('DIY_SIZE', isset($_GET['size'])?$_GET['size']:10);
  25. /*---------------------------------------------------------*/

  26. /*执行钩子*/
  27. runhooks();

  28. /*论坛说明*/
  29. $navtitle = str_replace('{bbname}', $_G['setting']['bbname'], $_G['setting']['SEOtitle']['code']);
  30. $_G['disabledwidthauto'] = 1;

  31. /*转向控制器*/
  32. require_once libfile('code/index', 'module');
  33. ?>
复制代码
2、source\function\下新建 function_code.php (感觉这文件可有可无,还是按要求写一下吧),代码如下:
  1. <?php
  2. /**
  3. * 定义不同的mod方法
  4. */
  5. if(!defined('IN_DISCUZ')) {
  6.         exit('Access Denied');
  7. }

  8. ?>
复制代码
3、source\module\下创建code文件夹,code文件夹里新建code_index.php,(这个是后端控制器)代码如下:
  1. <?php
  2. /**
  3. * 后端控制器
  4. */
  5. if(!defined('IN_DISCUZ')) {
  6.         exit('Access Denied');
  7. }

  8. list($navtitle, $metadescription, $metakeywords) = get_seosetting('portal');
  9. if(!$navtitle) {
  10.         $navtitle = $_G['setting']['navs'][1]['navname'];
  11.         $nobbname = false;
  12. } else {
  13.         $nobbname = true;
  14. }
  15. if(!$metakeywords) {
  16.         $metakeywords = $_G['setting']['navs'][1]['navname'];
  17. }
  18. if(!$metadescription) {
  19.         $metadescription = $_G['setting']['navs'][1]['navname'];
  20. }

  21. //============================分页 start ============================//
  22. require_once libfile('function/discuzcode');
  23. require_once libfile('function/home');
  24. //DIY模块标识
  25. $mod=DIY_MOD;
  26. //DIY模块id
  27. $bid=DIY_BID;
  28. //每页显示条数
  29. $perpage = DIY_SIZE;
  30. //允许显示的最大页数
  31. $maxpages  = 0;
  32. //最多显示多少页码(超过就用...隐藏)
  33. $page  = 10;

  34. //所有记录数量
  35. $count = C::t('code')->fetch_count_sql($bid);
  36. if($count>0){
  37.         // 计算总页数
  38.         $totalPage =  (int)(($count + $perpage -1) / $perpage);

  39.         //页码控制   
  40.         $curpage = isset($_GET['page'])?$_GET['page']:1;
  41.         if($curpage<1) $curpage = 1;
  42.         if($totalPage<(int)$curpage) $curpage = $totalPage;

  43.         //开始记录  
  44.         $start = ($curpage-1)*$perpage;
  45.         //分页判断
  46.         ckstart($start, $perpage);  

  47.         //此数组用于显示具体页数
  48.         $pageArray=array();
  49.         for ($i=1; $i<=$totalPage; $i++)
  50.         {
  51.                 array_push($pageArray,$i);
  52.         }
  53. }
  54. //跳转的路径
  55. $mpurl = 'code.php?mod='.$mod.'&bid='.$bid;
  56. //最后一页,自动跳转
  57. $autogoto = FALSE;
  58. //是否简洁模式(简洁模式不显示上一页、下一页和页码跳转)  
  59. $simple = FALSE;
  60. //分页  
  61. $multipage = multi($count, $perpage, $curpage, $mpurl, $maxpages , $page, $autogoto, $simple);
  62. /**
  63. * 分页函数multi()说明
  64. * @param $count         - 总数
  65. * @param $perpage         - 每页数
  66. * @param $curpage         - 当前页
  67. * @param $mpurl                - 跳转的路径
  68. * @param $maxpages         - 允许显示的最大页数
  69. * @param $page             - 最多显示多少页码(超过就用...隐藏)
  70. * @param $autogoto         - 最后一页,自动跳转
  71. * @param $simple         - 是否简洁模式(简洁模式不显示上一页、下一页和页码跳转)
  72. * @return                         - 返回分页代码
  73. */
  74. //============================分页 end ============================//
  75. //跳转到前端视图
  76. include_once template('diy:code/'.$mod);
  77. ?>
复制代码
4、\source\class\table\下新建table_code.php,(这个是数据访问层)代码如下:
  1. <?php
  2. require_once libfile('function/home');
  3. /**
  4. *      code.php页面的分页查询
  5. */

  6. if(!defined('IN_DISCUZ')) {
  7.         exit('Access Denied');
  8. }

  9. class table_code extends discuz_table
  10. {
  11.         public function __construct() {

  12.                 $this->_table = 'common_block_item';//表名
  13.                 $this->_pk    = 'itemid';                    //表的主键

  14.                 parent::__construct();
  15.         }
  16.         //查询记录总条数
  17.         public function fetch_count_sql($bid) {
  18.                 $where="where bid=".$bid." ORDER BY itemid DESC";
  19.                 return DB::result_first('SELECT COUNT(*) FROM %t %i ', array($this->_table, $where));
  20.         }
  21.         //查询数据
  22.         public function fetch_all_by_sql($start, $limit,$bid) {
  23.                 return DB::fetch_all('SELECT * FROM %t where bid='.$bid.' ORDER BY itemid DESC'.DB::limit($start, $limit), array($this->_table));
  24.         }
  25. }

  26. ?>
复制代码
5、打开\source\class\table\下的table_common_block_item.php,这个文件是查询DIY帖子模块的,找到function fetch_all_by_bid($bids, $sort = false)方法,修改成下面的代码:
  1.         public function fetch_all_by_bid($bids, $sort = false) {
  2.                 $sql='SELECT * FROM '.DB::table($this->_table).' WHERE '.DB::field('bid', $bids).($sort ? ' ORDER BY displayorder, itemtype DESC' : ' ORDER BY itemid DESC');
  3.                 /*===========================帖子模块增加分页功能 start =========================*/
  4.                 if(in_array(DIY_BID,$bids)){       
  5.                         /*获取当前页*/
  6.                         $page = isset($_GET['page'])?$_GET['page']:0;
  7.                         if($page<1){
  8.                                 $page=1;
  9.                         }
  10.                         /*每页显示多少条*/
  11.                         $limit=DIY_SIZE;
  12.                         /*开始记录*/  
  13.                         $start = ($page-1)*$limit;
  14.                         $sql.=DB::limit($start, $limit);
  15.                         /* runlog("sql","sql语句:".$sql); */
  16.                 }       
  17.                 /*=================================== end ======================================*/       
  18.                 $result=DB::fetch_all($sql, null, $this->_pk);
  19.                 return $result;
  20.         }
复制代码
6、模板目录 template\default\下创建code文件夹,code文件夹里新建index.htm,(这个是前端视图)代码如下:
  1. <!--{template common/header}-->
  2. <style id="diy_style" type="text/CSS"></style>
  3. <style type="text/css">
  4. body{ background:#F6F7F9!important;}
  5. .wp, #wp{ width:100%;}
  6. .nexwp{ width:1180px; margin:20px auto 0 auto; }
  7. .nex_portbox{ margin-top:20px;}
  8. .nex_portbox ul{ width:1205px;}
  9. .nex_portbox ul li{ float:left; width:223.2px; margin:0 16px 16px 0; background:#fff; box-shadow: 0 2px 3px rgba(0,0,0,0.06);-webkit-transition:all 0.3s linear;-moz-transition:all 0.3s linear;-o-transition:all 0.3s linear;-ms-transition:all 0.3s linear;transition:all 0.3s linear;border-radius:0 0 4px 4px;}
  10. .nex_LG_piv a{ display:block; width:223.2px; height:167px; position:relative;}
  11. .nex_LG_piv a img{width:223px; height:167px; border-radius:4px 4px 0 0;}
  12. .nex_portbox ul li:hover .nex_LG_piv a img{ opacity:0.8;}
  13. .nex_LG_info{ border-bottom: 1px solid #ededed; padding: 11px 16px 13px; height: 75px; position: relative;}
  14. .nex_LG_info h5{ height:22px; line-height:22px; overflow:hidden; }
  15. .nex_LG_info h5 a{ font-size: 14px;color: #333; font-weight:400;}
  16. .nex_LG_info h5 a:hover{ color:#0EC5A1;}
  17. .nex_LG_type{ font-size: 12px; color: #bbb; margin-bottom: 17px; height: 18px;}
  18. .nex_LG_item span{font-size: 12px; color: #bbb;margin-right: 10px; padding-left:25px;}
  19. .nex_LG_item span.nex_statistics_view{ background:url(./template/wfdsoft_freegift_171220/neoconex/portal_list_view/viewx.png) left center no-repeat;}
  20. .nex_LG_item span.nex_statistics_comment{ background:url(./template/wfdsoft_freegift_171220/neoconex/portal_list_view/reply.png) left center no-repeat;}
  21. .nex_LG_btms{height: 24px; line-height: 24px; padding: 14px 16px; font-size: 12px; border-radius:0 0 4px 4px; position: relative;}
  22. .nex_LG_btms a{ display:block; float:left;}
  23. .nex_LG_btms a img{ width:24px; height:24px; border-radius:100%; display:block; float:left;}
  24. .nex_LG_btms a em{ display:block; float:left; margin-left:10px; height:24px; line-height:24px; font-size:12px; color:#333;}
  25. .nex_LG_btms a:hover em{ color:#0EC5A1;}
  26. .nex_LG_btms span{ display:block; width:70px; overflow:hidden; text-align:right; float: right; font-size:12px; color:#bbb; height:24px; line-height:24px;}
  27. .nex_LG_txts{ height:30px; line-height:30px; margin-bottom:20px; font-size:16px; color:#666; font-weight:400;}
  28. .nex_LG_Links ul{ width:1205px;}
  29. .nex_LG_Links ul li{ float:left; width:223.2px; margin:0 16px 16px 0; background:#fff; box-shadow: 0 2px 3px rgba(0,0,0,0.06);-webkit-transition:all 0.3s linear;-moz-transition:all 0.3s linear;-o-transition:all 0.3s linear;-ms-transition:all 0.3s linear;transition:all 0.3s linear;border-radius:0 0 4px 4px;}
  30. .nex_LG_Links ul li:hover .nex_LG_piv a img{ opacity:0.8;}

  31. .nexads{ width:1180px; margin:10px 0;}
  32. .nexads img{ width:1180px;}

  33. .nexpubtop {
  34.     height: 38px;
  35.     margin-bottom: 20px;
  36. }
  37. .nexpubtop span {
  38.     display: block;
  39.     float: left;
  40.     padding-left: 45px;
  41.     height: 38px;
  42.     line-height: 38px;
  43. }
  44. .nexpubtop ul {
  45.     float: right;
  46.     margin-top: 6px;
  47. }
  48. .nexpubtop ul li.cur {
  49.     background: #0EC5A1;
  50.     color: #fff;
  51.     border: 1px solid #0EC5A1;
  52. }
  53. .nexpubtop ul li {
  54.     float: left;
  55.     padding: 0 18px;
  56.     margin-left: 10px;
  57.     border: 1px solid #ededed;
  58.     height: 25px;
  59.     line-height: 25px;
  60.     border-radius: 2px;
  61.     font-size: 14px;
  62.     color: #666;
  63.     cursor: pointer;
  64. }
  65. .nexsucaibox ul{display:none;}
  66. </style>
  67. <div class="nexwp">
  68.         <div id="pt" class="bm cl">
  69.         <div class="z">
  70.             <a href="./" class="nvhm" title="{lang homepage}">$_G[setting][bbname]</a> <em>&rsaquo;</em>
  71.                         全部分类
  72.         </div>
  73.     </div>
  74.                 <div class="nexpubtop">
  75.                 <ul>
  76.                                     <li class="cur"><a href="code.php?bid=495">全部分类</a></li>
  77.                         <li><a href="code.php?mod=1&bid=496">分类一</a></li>
  78.                     <li><a href="code.php?mod=2&bid=497">分类二</a></li>
  79.                     <li><a href="code.php?mod=3&bid=498">分类三</a></li>
  80.                     <li><a href="code.php?mod=4&bid=499">分类四</a></li>
  81.                     <li><a href="code.php?mod=5&bid=500">分类五</a></li>
  82.                     <div class="clear"></div>
  83.                 </ul>
  84.                 <div class="clear"></div>
  85.             </div>
  86.                         <div class="nexsucaibox nex_LG_Links">
  87.                                 <ul style="display:block;">
  88.                                 <!--[diy=nex_code_list1]--><div id="nex_code_list1" class="area"></div><!--[/diy]-->
  89.                                 <div class="clear"></div>
  90.                                 </ul>
  91.             </div>
  92.                         <script type="text/javascript">
  93.                                 //切换导航
  94.                                 jq(".nexpubtop ul li").each(function(s){
  95.                                         jq(this).click(function(){
  96.                                                 jq(this).addClass("cur").siblings().removeClass("cur");
  97.                                                 })
  98.                                 });
  99.                         </script>       
  100.     <div class="clear"></div>
  101.         <!--分页-->
  102.         <div class="pgs cl">
  103.         <!--{if $multipage}-->$multipage<!--{/if}-->
  104.         </div>
  105. </div>
  106.        
  107. <div class="nexwp">  
  108.     <div class="nex_LG_txts">猜你喜欢</div>
  109.     <div class="nex_LG_Links">
  110.             <ul>
  111.                 <!--[diy=nex_LG_Links]--><div id="nex_LG_Links" class="area"></div><!--[/diy]-->
  112.                
  113.             <div class="clear"></div>
  114.         </ul>
  115.     </div>
  116.     <!--ads-->
  117.     <div class="nexads">
  118.             <div class="w1180">
  119.                 <!--[diy=nexads]--><div id="nexads" class="area"></div><!--[/diy]-->
  120.                
  121.         </div>
  122.     </div>
  123. </div>

  124. <!--{template common/footer}-->
复制代码
7. 重要的一点,需要关掉redis缓存才能使用分页,修改config/config_global.php里$_config['memory']['redis']的配置,如下:
  1. // --------------------------  CONFIG MEMORY  --------------------------- //
  2. /*--- 这里不建议开启redis缓存,因为开了之后,就不能实现分页实时显示了。---*/
  3. $_config['memory']['prefix'] = 'uXJfik_';
  4. //$_config['memory']['redis']['server'] = '127.0.0.1';
  5. $_config['memory']['redis']['server'] = '';
  6. $_config['memory']['redis']['port'] = 6379;
  7. $_config['memory']['redis']['pconnect'] = 1;
  8. $_config['memory']['redis']['timeout'] = '0';
  9. $_config['memory']['redis']['requirepass'] = '';
  10. $_config['memory']['redis']['serializer'] = 1;
  11. $_config['memory']['memcache']['server'] = '';
  12. $_config['memory']['memcache']['port'] = 11211;
  13. $_config['memory']['memcache']['pconnect'] = 1;
  14. $_config['memory']['memcache']['timeout'] = 1;
  15. $_config['memory']['apc'] = '0';
  16. //$_config['memory']['apcu'] = '1';
  17. $_config['memory']['apcu'] = '0';
  18. $_config['memory']['xcache'] = '0';
  19. $_config['memory']['eaccelerator'] = '0';
  20. $_config['memory']['wincache'] = '0';
  21. $_config['memory']['yac'] = '0';
  22. //$_config['memory']['file']['server'] = 'data/cache/filecache';
  23. $_config['memory']['file']['server'] = '';

  24. // --------------------------  CONFIG SERVER  --------------------------- //
复制代码

全部评论 0

您需要登录后才可以回帖 立即登录
登录
0
0
0
返回顶部