本帖最后由 51kuku 于 2016-8-17 12:20 编辑
BUG呈现:当门户启用静态后,添加内容时加分页,提交后,内容分页的第一页的分页链接是动态的,必须要再次编辑才可以。
首先想到是找分页函数,在protal_view.php找到分页函数
- if(!empty($_G['setting']['makehtml']['flag']) && $article['htmlmade']) {
- $_caturl = $_G['cache']['portalcategory'][$cat['topid']]['domain'] ? $_G['cache']['portalcategory'][$cat['topid']]['caturl'] : '';
- $viewurl = $_caturl.$article['htmldir'].$article['htmlname'].'{page}.'.$_G['setting']['makehtml']['extendname'];
- unset($_caturl);
- } else {
- $viewurl = "portal.php?mod=view&aid=$aid";
- }
- $multi = multi($article['contents'], 1, $page, $viewurl);
复制代码
$viewurl 来自 $article数组的拼装,这里数据为空有可能会显示动态。
再发一篇文章,再开始静态时截断,查看portal_article_title表里htmlmade,htmlname,htmldir这三个果然没有数据.....
要先找到这三个字段在哪更新的,因为编辑后正常,首先怀疑是编辑那步,很遗憾那步只删除了些文件,直接全目录搜索...
原来在helper_makehtml::portal_article里偷偷的更新了
- if(self::$callbackdata['data']){
- self::$callback = array(self, 'portal_article_success');
- self::$callbackdata['id'] = $article['aid'];
- }
复制代码
再回到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个参数
- public static $htmlname;
- public static $htmldir;
复制代码
然后给他们赋值,找到function portal_article函数,在这个函数里找到
- if(!$article['htmlname']) {
- self::$callbackdata['data']['htmlname'] = $article['htmlname'] = str_pad($article['aid'], 8, '0', STR_PAD_LEFT);
- }
复制代码
替换为
- if(!$article['htmlname']) {
- self::$callbackdata['data']['htmlname'] = $article['htmlname'] = self::$htmlname = str_pad($article['aid'], 8, '0', STR_PAD_LEFT);
- }
复制代码
找到
- if($article['htmldir'] != $htmldir) {
- self::$callbackdata['data']['htmldir'] = $htmldir;
- }
复制代码
替换为
- if($article['htmldir']!=$htmldir) {
- self::$callbackdata['data']['htmldir'] = $article['htmldir'] = self::$htmldir = $htmldir;
- }
复制代码
说明:补上$article['htmldir'] 后,内容页不分页时生成静态的链接就正确了.....
现在回到protal_view.php文件 找到helper_makehtml::portal_article($cat, $article, $page);直接贴修改后的代码了,方法前面已经说明了
- if(isset($_G['makehtml'])){
- helper_makehtml::portal_article($cat, $article, $page);
-
- if($page===1){
- if(empty($article['htmlmade'])) $article['htmlmade'] = 1;
-
- if(empty($article['htmldir'])) $article['htmldir'] = helper_makehtml::$htmldir;
-
- if(empty($article['htmlname'])) $article['htmlname'] = helper_makehtml::$htmlname;
- }
- }
-
- if(!empty($_G['setting']['makehtml']['flag']) && $article['htmlmade']){
- $_caturl = $_G['cache']['portalcategory'][$cat['topid']]['domain'] ? $_G['cache']['portalcategory'][$cat['topid']]['caturl'] : '';
- $viewurl = $_caturl.$article['htmldir'].$article['htmlname'].'{page}.'.$_G['setting']['makehtml']['extendname'];
-
- unset($_caturl);
- }else{
- $viewurl = "portal.php?mod=view&aid=$aid";
- }
- $multi = multi($article['contents'], 1, $page, $viewurl);
复制代码
意思就是首次提交数据3个参数为空,更新后把数据拿出来,然后再组装分页,这样就可以了。。。
挺无聊的一个帖子写完睡觉。。。 需要二次开发的@我哈哈
|