杰奇cms章节分页实现原理,附代码

本文阅读 7 分钟
广告

看这个教程之前请注意哦,相关的代码调用了不少杰奇内置的方法,所以只适合杰奇的官网版本,外面其它的手机端插件之类的,倒是也可以根据我的思路自行二次开发。另外就是,原本是可以完美实现的,但是碰到了一个巨大的问题,就是杰奇是加密的,我解密之后没有完全无错,导致windows下一切正常,linux下500,这个问题因为我的php不是很吊没能解决。
所以这篇文章的主要目的有两个,一是我已经快两个星期没有更新博客了,总想写点什么,二是这个问题一直没有解决,我在等一个路过的大佬可以指点一二
我采用的版本为杰奇1.8,如果可以建立在packeage.php可以成功无错解密的前提下,几乎1.7到2.3都可以使用,无非就是改一下方法的名称。注意,严格来说只是一个半成品,可能存在安全问题之类的,算是提供一个参考。话说其实网上有解密版,或者至少是packeage.php这个文件解密的版本,比如17mb论坛的,和我之前分享过的杰奇2.3,那没准还可以帮助到一些人的样子。
另外就是,这个思路也可以实现那种弹出菜单的那种分页,总是非常全了,可是过程也不难。

2019/10/28更新:已经修复了截取后导致的文字乱码问题。

写在开头:

说实话我是允许转载文章的,只需要注明源链接,原作者就好了,哪怕没有跟我说明也行。最近总是有家伙喜欢复制我的内容,改几个字,就名正言顺的成为他的。那么问题就来了,你又没有写的能力,还没有最基本的尊敬,那你比路边的乞丐还没有道义,目前我除了谴责还是谴责咯,没卵用的,无非就是打击自己的原创热情而已,混互联网就应该做好这种准备,没办法。
timg.jpg

那我就不废话了,先说我已经实现的功能。

1.控制每个章节分页的字数
2.输出当前页和总页面的比(如1/4)
3.自动判断是否存上下页,如果无则按照杰奇默认上下章节链接。

步骤如下:

第一步:解密杰奇的packeage.php,在最顶部,也是就<?php的下面,写上全局方法。

function str_split_unicode($str, $l = 3000) {
    if ($l > 0) {
        $ret = array();
        $len = mb_strlen($str, "utf-8");
        for ($i = 0; $i < $len; $i += $l) {
            if (ord($str_cut[$i]) > 128) $i++;
            $ret[] = mb_substr($str, $i, $l, "utf-8");
        }
        return $ret;
    }
    return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
}

这里就是分页实现的核心,$l定义了每页的字数,我设置为了1000字,大概的原理就是,将章节的文字分割成1000字为间隔的数组。这样,就可以把杰奇的章节内容字段成为参数进入这个方法,然后被分割成数组,根据浏览器头部传入的也参数进行调用。但是这里有个问题,数组是从0开始的,如果在网页前台从0开始调用参数,似乎显得不太合适,然后我们也不知道怎么去控制页面走完之后怎么办。

第二步:分隔章节,引入两个参数,章节id,和当前页id(新定义),通过配合杰奇内置的方法组成链接。

if (isset($_REQUEST["cid"])) {     //重新获取一遍章节id,赋予新字段t_cid
    $_REQUEST["cid"] = intval($_REQUEST["cid"]);
    $t_cid = $_REQUEST["cid"];
}
$t_url = jieqi_geturl("article", "chapter", $t_cid, $this->id, $tmpisvip, $this->metas["articlecode"]);    //以杰奇自身的方法,生成当前页面的路径。
$jieqiTpl->setCaching(0);
if (isset($_REQUEST["cpage"])) {    //以cpage为参数,从前台闯入,表示当前页的页码
    $_REQUEST["cpage"] = intval($_REQUEST["cpage"]);
    $t_page = $_REQUEST["cpage"];
    if($_REQUEST["cpage"] > 0){    //根据页码开始调用章节数组中的数据,并且和前面定义的当前页面链接,组合成上一页链接,并且页面走完的时候设置为空值,方便前台判断。
        $cpage = $_REQUEST["cpage"] - 1;
        $t_preview = $t_url."&cpage=".$cpage;
    }else{
        $cpage = 0;
        $t_preview = "";
    }
}else{
    $cpage = 0;
    $t_page = "";
}
$tmpvar = str_split_unicode($tmpvar);
$t_num = sizeof($tmpvar);   //判断章节被分成了几页,用来生成比例。
if($t_num >= $cpage + 2){   //组合成下一页链接
    $npage = $cpage + 2;
    $t_next = $t_url."&cpage=".$npage;
}else{
    $t_next = "";
}
$tmpvar = $tmpvar[$cpage];   根据传入的参数,设置新的章节内容调用。

注意,这些代码推荐要写在定义上一页,下一页的代码后面,这样有些字段方法就可以方便去拿,不需要自己再定义,我是写在了大概835行的位置。很全面,还可以继续自己扩展,那个让我做的朋友也想得比较周到。现在,所有的数据都定义,并且能获取到了,怎么在前台输出呢?

第三步:通过杰奇模板引擎,生成数据调用标签,注意把原本的jieqi_content定义去掉,如果不去的话就把这里的改成其它东西。

$jieqiTpl->assign("jieqi_content", $tmpvar);   //章节内容
$jieqiTpl->assign("t_next", $t_next);    //下一页链接
$jieqiTpl->assign("t_preview", $t_preview);    //上一页链接
$jieqiTpl->assign("t_page", $t_page);   页面比例

杰奇是不能在模板直接写php代码的,所以只能用这种方式引入,这样就可以和杰奇原本的标签一个调用格式。于是就得到了以下的调用标签。

{?$jieqi_content?}
{?$t_page?}
{?if $t_preview != ""?}<a href="{?$t_preview?}" id="t_preview">上一页</a>{?else?}<a href="{?$preview_page?}">上一章</a>{?/if?}
{?if $t_next != ""?}<a href="{?$t_next?}" id="t_next">下一页</a>{?else?}<a href="{?$next_page?}">下一章</a>{?/if?}

教程到这里就结束了!

总之,上面的代码还有很强的扩展余地,比如我开头说的设置页面弹出菜单,还可以调用当前是第几页显示一些额外的内容,至于伪静态,很简单,自己想办法改吧,不会可找我。问题只剩下packeage.php的解密问题,所以我就在此地,等一个大佬。

【规则之树版权所有,转载请注明来源。包括作者,源网站名称,源链接。】

文件下载地址:

部分截图:
1.png
2.png
3.png

本文来自投稿,不代表本站立场,如若转载,请注明出处:https://www.ruletree.club/archives/1150/
typecho全站图片样式文件转腾讯cos,详细方案
« 上一篇 04-02
网站利用cookies实现切换语言,案例整理
下一篇 » 04-27
广告

发表评论

V注册会员 L评论等级
R53 条回复
  1. 老八零Lv.1 说道:
    2021-08-18     Win 10 /    Chrome

  2. 烦烦烦Lv.1 说道:
    2021-02-25     Win 7 /    Chrome

    下载文件

  3. 隔壁家老王Lv.1 说道:
    2021-02-02     Win 7 /    Chrome

    1.7版本的应该是修改那个PHP文件呢,伪静态修改那些文件

    1. 不暇VLv.6 说道:
      2021-02-02     Win 7 /    Chrome

      @隔壁家老王

      一样的文件,就是可能参数不一样

  4. 引风行Lv.3 说道:
    2020-12-24     Win 7 /    Chrome

    谢谢大哥分页添加好了很好用,只是章节分割后会分割换行和空格符,有办法解决么,而且有时换行符分割到下一页开头文章会空出一到两格,有点影响美观,和文章的紧凑感

    1. 不暇VLv.6 说道:
      2020-12-24     Win 7 /    Chrome

      @引风行

      这个我也暂时没有很好的解决办法,不过我听说了一种按行分页的操作,就是把小说章节段落拆分成数组再重组起来,那样获取可以解决现在这个问题,不过我也没时间去研究了

  5. 引风行Lv.3 说道:
    2020-12-09     Win 7 /    Chrome

    分页都弄好了就是伪静态不行,现在动态已经可以调用分页了,

    1. 不暇VLv.6 说道:
      2020-12-09     Win 7 /    Chrome

      @引风行

      这里只能根据实际参数自己来写了

      1. 引风行Lv.3 说道:
        2020-12-09     Win 7 /    Chrome

        @不暇

        谢谢,大哥,我是把上一页和下一页的连接改了, 改为在HTML模版按照伪静态输出的,已经解决了

  6. 引风行Lv.3 说道:
    2020-12-09     Win 7 /    Chrome

    博主求杰奇2.4的章节分页伪静态,不会写,后台怎么该

  7. 引风行Lv.3 说道:
    2020-12-08     Win 7 /    Chrome

    大哥为什么分割断开的地方,有的会有几个乱码

    1. 引风行Lv.3 说道:
      2020-12-08     Win 7 /    Chrome

      @引风行

      搞定了原来是我代码加错了,谢谢大哥分享

      1. 不暇VLv.6 说道:
        2020-12-09     Win 7 /    Chrome

        @引风行

        搞定了就好

  8. 引风行Lv.3 说道:
    2020-12-08     Win 7 /    Chrome

    杰奇2.4怎么整章节分页,求教程

  9. 求毛的故事Lv.1 说道:
    2020-11-19     Win 10 /    Chrome

    我来试一下 看看能不能实现

  10. 来看看Lv.1 说道:
    2020-10-31     Win 7 /    Chrome

    下载一个看看能不能实现2.4的

  11. 劳苦大众Lv.1 说道:
    2020-08-04     Win 7 /    Chrome

    有些地方不太明白,可以请教下么

    1. 不暇VLv.6 说道:
      2020-08-04     Win 10 /    Chrome

      @劳苦大众

      当然可以,你可以直接在评论留言

      1. 劳苦大众Lv.1 说道:
        2020-08-04     Android /    Chrome

        @不暇

        请问2.4版本应该怎么操作实现呢

        1. 不暇VLv.6 说道:
          2020-08-05     Win 7 /    Chrome

          @劳苦大众

          解密package.php,然后在标签区域找到代码,按照本文的原理逻辑去替换,再配置下伪静态。就行了

  12. Lv.1 说道:
    2020-06-21     Win 10 /    Chrome

  13. 辖区明知Lv.1 说道:
    2020-04-05     Win 10 /    Chrome

    章节字数是哪个变量?章节字数是哪个变量?

    1. 不暇VLv.6 说道:
      2020-04-05     Android /    Chrome

      @辖区明知

      章节字数变量杰奇默认模板里面不就有参考。

  14. 辖区明知Lv.1 说道:
    2020-04-05     Win 10 /    Chrome

    章节字数是哪个变量

  15. 66690Lv.1 说道:
    2020-04-05     iPhone /    Safari

    设置分页字数那里有点看不懂。好像复杂化了。我之前是获取总字数/1000 向上取整数,就是分页数。一句话就完了

    1. 不暇VLv.6 说道:
      2020-04-05     Android /    Chrome

      @66690

      我php水平不是太好,可能是往复杂方向去了。

没有更多评论了

作者信息

热门文章

标签TAG

热评文章