功能思路来源于插件 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页内容 👾
大佬牛皮
体力活
大佬tql,不过我分页之后会加载错误
我试了,和伪静态没有关系 -_-!
啊,那怎么办才好(ノ°ο°)ノ
你试试在如下一行的 index.php之前加一个 斜杠/,看可以不. 之前位置说错了
isRewrite ? rtrim(siteUrl."index.php") . $pageTemplate;
嗯嗯,谢谢大佬(ó﹏ò。)
搞不懂你的网站咋回事,你试试在如下一行的 index.php后加一个 斜杠,看可以不
$pageTemplate = ($isRewrite ? rtrim($siteUrl, '/') : $siteUrl."index.php") . $pageTemplate;
刚刚加了斜杠,网站都打不开了OωO能看看是怎么了吗
我还是重新弄一遍那个php吧
啥错误至少说以下把, 你的网站无法访问o(*////▽////*)q
我的网站设置了伪静态,可能和这个有关,晚点我看看
检查下代码,咋会生成类似这样的url:http://hillle.topindex.php/75.html?page=1
在Content.php里面找不到有?page=1的字符串
发现了一个问题,加了之后会导致阅读模式输出有问题。你可以看下。
暂时不打算修复,handsome的阅读模式的js代码只有一个对应的内容块,如果实现阅读模式下翻页需要单独写postContent, 太费神了。
如果只是让内容显示出来, 修改下面两个函数:
```php
public static function postContentHtml($obj, $status)
{
$way = self::getPostParseWay();
$content = Content::postContent($obj, $status, $way);
$content_original = $content;
if ($way == "vditor") {
echo
'
Loading...
';
echo '
';
echo '
' . htmlspecialchars($content) . '';
' . $content . '} else {
echo '
';
}
$obj->content=$content_original;
}
```
和
```php
public static function postContent($obj, $status, $way = "origin")
{
if ($way == "origin") {
$content = $obj->content;
} else {
$content = $obj->content;
// $content = Handsome_Parsedown::instance()
// ->setBreaksEnabled(false)
// ->text($obj->content);
}
$content_original = $content;
---- 省略的代码
// 分页
$content = Content::parseContentPublic($content,True);
$obj->content = $content_original;
return trim($content);
}
```
感谢,大佬666
ヾ(≧∇≦*)ゝ
日夜模式切换没发现啥问题啊,具体点呢?
是文章的阅读模式哦(´-ω-`)
确实存在问题,抽时间我看看能否修复(╯‵□′)╯︵┴─┴
3-1 那条有点迷糊 修改parseContentPublic函数的函数名,添加一个参数并提供替换值:
描述有问题,我晚点改下。实际只是给这个函数加了一个参数content_type,如果没传递参数值,这个参数就取默认值
全部的parseContentPublic函数都添加么
不是,只有函数定义的地方改,其他调用的地方不需要分页就不改。
晚点我改下代码,换成布尔变量(╯‵□′)╯︵┴─┴
“ , ” 然怪我改了各种问题
找到问题了3-3的($content,'post') 里面的, 用错了=-=
嗯,等你更新吧,我改了各种问题
已改╮(╯▽╰)╭
测试一下分页符是否在评论中失效了: =page=
感谢分享,
完善下https://cdn.muyu.mobi/2020/11/18/1605672152.png
截图位置添加显示页数,总页我就折腾本来了,不然在弄个总页就好了。
话说你可以给做成文章没添加 =page =不输出以下代码不,我是无力了折腾一早上!
第 页
截图位置添加显示页数,总页我就折腾本来了,不然在弄个总页就好了。 ====》 重新写了一下, 可以显示第一页和最后一页了
话说你可以给做成文章没添加 =page=不输出以下代码不,我是无力了折腾一早上! ====》 没看懂,没加 =page =不会对文章分页啊
没事了,哈哈直接用你的咯,我实在不怎么懂代码 (๑•̀ㅁ•́ฅ)
我也不懂php,现学现卖٩(ˊᗜˋ*)و
至少比我好多了.... 我折腾一天都没弄好
折腾能学东西,一样收货满满୧(๑•̀⌄•́๑)૭
```
第 页
```