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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[修改] 修复静态时,内容页分页链接为动态地址的错误

[复制链接]
51kuku 发表于 2016-8-16 22:44:38 | 显示全部楼层 |阅读模式
本帖最后由 51kuku 于 2016-8-17 12:20 编辑

BUG呈现:当门户启用静态后,添加内容时加分页,提交后,内容分页的第一页的分页链接是动态的,必须要再次编辑才可以。

首先想到是找分页函数,在protal_view.php找到分页函数

  1. if(!empty($_G['setting']['makehtml']['flag']) && $article['htmlmade']) {
  2.         $_caturl = $_G['cache']['portalcategory'][$cat['topid']]['domain'] ? $_G['cache']['portalcategory'][$cat['topid']]['caturl'] : '';
  3.         $viewurl = $_caturl.$article['htmldir'].$article['htmlname'].'{page}.'.$_G['setting']['makehtml']['extendname'];
  4.         unset($_caturl);
  5. } else {
  6.         $viewurl = "portal.php?mod=view&aid=$aid";
  7. }

  8. $multi = multi($article['contents'], 1, $page, $viewurl);
复制代码

$viewurl 来自 $article数组的拼装,这里数据为空有可能会显示动态。

再发一篇文章,再开始静态时截断,查看portal_article_title表里htmlmade,htmlname,htmldir这三个果然没有数据.....
要先找到这三个字段在哪更新的,因为编辑后正常,首先怀疑是编辑那步,很遗憾那步只删除了些文件,直接全目录搜索...

原来在helper_makehtml::portal_article里偷偷的更新了


  1. if(self::$callbackdata['data']){
  2.         self::$callback = array(self, 'portal_article_success');
  3.         self::$callbackdata['id'] = $article['aid'];
  4. }
复制代码

再回到protal_view.php看文件就释然了,因为helper_makehtml::portal_article();在$multi = multi($article['contents'], 1, $page, $viewurl);之后,所以首次提交数据为空,为什么编辑时又有了的原因,下面就开刀吧。。。

先把代码块1里的代码移到helper_makehtml::portal_article();之后,再把helper_makehtml类里的数据取出来就行了,静态的类好评...,不过里面数据好像不能用直接到分页函数里,打开helper_makehtml.php

在public static $viewurl;之后加2个参数
  1. public static $htmlname;
  2. public static $htmldir;
复制代码

然后给他们赋值,找到function portal_article函数,在这个函数里找到


  1. if(!$article['htmlname']) {
  2.     self::$callbackdata['data']['htmlname'] = $article['htmlname'] = str_pad($article['aid'], 8, '0', STR_PAD_LEFT);
  3. }
复制代码

替换为


  1. if(!$article['htmlname']) {
  2.     self::$callbackdata['data']['htmlname'] = $article['htmlname'] = self::$htmlname = str_pad($article['aid'], 8, '0', STR_PAD_LEFT);
  3. }
复制代码

找到


  1. if($article['htmldir'] != $htmldir) {
  2.     self::$callbackdata['data']['htmldir'] = $htmldir;
  3. }
复制代码

替换为

  1. if($article['htmldir']!=$htmldir) {
  2.      self::$callbackdata['data']['htmldir'] = $article['htmldir'] = self::$htmldir = $htmldir;
  3. }
复制代码

说明:补上$article['htmldir'] 后,内容页不分页时生成静态的链接就正确了.....
现在回到protal_view.php文件 找到helper_makehtml::portal_article($cat, $article, $page);直接贴修改后的代码了,方法前面已经说明了


  1. if(isset($_G['makehtml'])){
  2.         helper_makehtml::portal_article($cat, $article, $page);
  3.         
  4.         if($page===1){
  5.                 if(empty($article['htmlmade'])) $article['htmlmade'] = 1;
  6.                
  7.                 if(empty($article['htmldir'])) $article['htmldir'] = helper_makehtml::$htmldir;
  8.                
  9.                 if(empty($article['htmlname'])) $article['htmlname'] = helper_makehtml::$htmlname;
  10.         }        
  11. }
  12.         
  13. if(!empty($_G['setting']['makehtml']['flag']) && $article['htmlmade']){
  14.         $_caturl = $_G['cache']['portalcategory'][$cat['topid']]['domain'] ? $_G['cache']['portalcategory'][$cat['topid']]['caturl'] : '';
  15.         $viewurl = $_caturl.$article['htmldir'].$article['htmlname'].'{page}.'.$_G['setting']['makehtml']['extendname'];
  16.         
  17.         unset($_caturl);
  18. }else{
  19.         $viewurl = "portal.php?mod=view&aid=$aid";
  20. }

  21. $multi = multi($article['contents'], 1, $page, $viewurl);

复制代码

意思就是首次提交数据3个参数为空,更新后把数据拿出来,然后再组装分页,这样就可以了。。。
挺无聊的一个帖子写完睡觉。。。 需要二次开发的@我哈哈





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

本版积分规则

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

GMT+8, 2024-11-15 01:36 , Processed in 0.020645 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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