功能思路来源于插件 SplitArchivePage,只需要修改handsome主题的文件 typecho/usr/themes/handsome/libs/Content.php

1. 在文件最后一个 } 前添加如下两个私有函数

请注意:添加代码前删掉如下代码中第4行 splitword变量的值中 page 前后的两个空格。

    // 文章分页
    private static function parse($text)
    {
        $pagebar = '';
        $content = $text;
        $splitword = '= page =';
        if( strpos( $text , $splitword) !== false){
            $contents = explode($splitword , $text );
            $page = isset($_GET['page'])?intval($_GET['page']):1;
            $content = $contents[$page-1];
            $request = Typecho_Request::getInstance();
            $_GET['page'] = '{page}';
            $pagebar = self::setPageBar(count($contents),$page,$request->getPathinfo()."?".  http_build_query($_GET));  
        }

        $text = $content.$pagebar;
        return $text;
    }

    private static function setPageBar($pageTotals,$page,$pageTemplate)
    {
        $isRewrite = Typecho_Widget::widget('Widget_Options')->rewrite;
        $siteUrl = Typecho_Widget::widget('Widget_Options')->siteUrl;
        $pageTemplate = ($isRewrite ? rtrim($siteUrl, '/') : $siteUrl."index.php") . $pageTemplate;
        $splitPage = 3;
        $pageHolder = array('{page}', '%7Bpage%7D');
        if ($pageTotals < 1) { return; }

        $pageBar .= '<nav class="text-center m-t-lg m-b-lg" role="navigation"><ol class="page-navigator">';

        if ($page > 1) {
            $pageBar .= '<li class="prev"><a href="' . str_replace($pageHolder, $page - 1, $pageTemplate) . '">' . '<i class="fontello fontello-chevron-left"></i></a></li>';
        }

        for ($i = 1; $i <= $pageTotals; $i ++) {
            if($page==$i){
                $pageBar .= '<li class="current"><a href="' . str_replace($pageHolder, $i, $pageTemplate) . '" ' . ($i != $page ? '' : '') . '>' . $i . '</a></li>';
            }else
            {if((($i==$page-3) and ($i!=1)) or (($i==$page+3) and ($i!=$pageTotals)))
                {
                    $pageBar .= '<li><span>...</span></li>';
                }else{
                    if((($i<$page-3) and ($i!=1)) or (($i>$page+3) and ($i!=$pageTotals)))
                    {}else{
                        $pageBar .= '<li><a href="' . str_replace($pageHolder, $i, $pageTemplate) . '" ' . ($i != $page ? '' : '') . '>' . $i . '</a></li>';
                    }
                }
            }
        }
        if ($page < $pageTotals) {
            $pageBar .= '<li class="next"><a href="' . str_replace($pageHolder, $page + 1, $pageTemplate) . '">' . '<i class="fontello fontello-chevron-right"></i></a></li>';
        }
        $pageBar .='</ol></nav><style>.page-navigator>li>a, .page-navigator>li>span{ background: #EFEFEF; line-height: 1.42857143; padding: 6px 12px; border-bottom-style:none !important; }</style>';

        return $pageBar;
    }

2.修改 parseContentPublic函数的定义,添加一个参数 $need2pagination 并提供默认值

在文件 Content.php 的1987行前后。

默认值为 False , 所以默认情况下不会调用内容分页函数避免对handsome原来的处理逻辑造成影响,比如评论者在评论内容中插入分页符就比较尴尬了 😈

   public static function parseContentPublic($content,$need2pagination=False)

3. 在 parseContentPublic 函数中调用分页函数

在文件 Content.php 的2092行前后,语句 return $content; 之前增加一行代码,代码片段:

        //文章分页
        if ($need2pagination==True) { $content=self::parse($content);}

        return $content;
    }

4. 对于需要分页的内容,修改调用parseContentPublic 函数,添加 need2pagination参数

比如需要提供 post 的分页功能,仅需要修改如下函数 public static function postContent($obj, $status, $way = "origin"), 搜索文本 该部分仅登录用户可见 , 在文件 Content.php 的2092行前后:

            // $content = Content::parseContentPublic($content); //该行修改前语句,下一行为修改后语句
            $content = Content::parseContentPublic($content,True);
        }
        return trim($content);
    }

目前只测过对 post 分页,page等其他内容的分页没测试过。其他内容如果需要分页,同样可以用 ($content,True) 参数试试,风险自担。

5.在文章中分页

文章需要分页处添加行 = page = (注意去掉page前后的空格)。 当然也可以修改代码换成其他标识。

效果:

👾 这里是第1页内容 👾

最后修改:2020 年 11 月 17 日 01 : 10 PM
如果觉得我的文章对你有用,请随意赞赏