机器学习 numpy winforms date primefaces datatables vue使用教程 svn默认安装路径 edate函数的使用方法 css选择器有几种 plsql连接mysql python中的def python写脚本 python编程教程 python指令 java包 java的接口 java手册 java结束线程 java调用接口 java循环list linux启动 ie模拟器 脚本之家 战地2单机地图 java语言程序设计 苹果手机添加邮箱 火萤壁纸下载 备份数据的软件 ps高手教程 文字图片制作 梦想世界答题器 调试js opengl版本过低 音乐迷 昌江县干部在线学习 eclipse汉化版 徐静蕾字体 正则表达式java 天龙八部脚本免费版
当前位置: 首页 > 学习教程  > 编程语言

杰奇cms章节分页怎么实现(主要针对2.4版本)

2021/1/28 23:58:51 文章标签:

看这个教程之前请注意哦,相关的代码调用了不少杰奇内置的方法,所以只适合杰奇的官网版本,外面其它的手机端插件之类的,倒是也可以根据我的思路自行二次开发。另外就是,原本是可以完美实现的,但是碰到了一个…

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

写在开头:

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

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

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行的位置。这里我们找到一个网站,我扒了一下代码,按照他的逻辑来寻找,当然也仅供大家参考(读爱小说网https://www.duaixs.com/)很全面,还可以继续自己扩展,那个让我做的朋友也想得比较周到。现在,所有的数据都定义,并且能获取到了,怎么在前台输出呢?

第三步:通过杰奇模板引擎,生成数据调用标签,注意把原本的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?}

 


本文链接: http://www.dtmao.cc/news_show_650354.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?