DTCMS插件的制作实例电子资源管理(四)URL重写

时间:2022-11-15 16:56:11

总目录

时隔2年,再次收到本文的回复,实在惭愧,本系列竟然终止于第二章节。不从外部找原因,自从自身找缺点,一定是我写的不够好,一定是太功利了,所以决定重新回到当时的教程,完成这个时隔2年的系列。

本章目录

  • 从分页开始
  • URL重写

一、从分页开始

我们完成了列表页的制作,接下来要做的就是分页,分页要参数,分页的html是怎么出来的呢,可能大家看到之前的一篇里写的是,分页都是现成的。没错分页是现成的,但是里面的参数是要自己写的。DTCMS中分页的参数是如何设置的呢?除了page以外,我还有其他的筛选参数怎么办呢?

我们从模板页开始找起,分页是来自于一个叫做pagelist的变量,这个变量似乎在哪里看到过,没错就是在我们获取列表页数据的时候,用out输出的一个变量。

DTCMS插件的制作实例电子资源管理(四)URL重写

------------------------------------------------------

我们直接找到这个方法,这里面的OutPageList是做什么用的呢,经过查看源码,是输出分页部分的html的,也就是输出<a>1</a>,<a>2</a> 这样的一些列标签的。这里面似乎还有一个方法挺奇怪的,就是我们要找的核心,linkurl()方法。这个方法的第一个参数是不是和我们配置文件里写的url重写的那个Name一模一样啊,没错就是他了,接下来传递的是2个参数一个是我们要用到的分类id,一个是id也就是pageIndex拉。

DTCMS插件的制作实例电子资源管理(四)URL重写

----------------------------------------------------

进到方法里面去看个究竟,结果注释啥都没写,就写了一句返回URL重写统一链接地址。不过我们看到他的参数是_key,跟我们之前猜想的一样一定是name相关的东西,后面是参数,有点类似string.Format那种样子嘛,所以我们无所谓有多少个参数都可以一股脑的写进去咯。这个方法到底做了些什么呢,了解了这个方法,就了解了DTCMS内部的URL重写的机制。

DTCMS插件的制作实例电子资源管理(四)URL重写

-------------------------------------------------------------

这里就不详细展开了,简单描述一下这个方法做了些什么,首先要知道在后台控制面板—系统管理—URL配置里面,我们每一条URL配置都是可以有多条URL表达式的,每条表达式还要写正则表达式,传输参数,如下图所示。

DTCMS插件的制作实例电子资源管理(四)URL重写

那么linkurl方法到底在干了些什么呢?首先linkurl确实如我们所想的一样,通过key找到了对应的URL重写的配置信息,然后判断传递进来的params数量是否大于0,如果不大于0就压根不需要再做参数的重写了,直接看看系统是否要重写成html就直接返回了。

如果params参数大于0,则开始循环URL表达式的列表,先根据参数数量来判断要选那一条重写表达式,你传了2个参数,恰巧这条配置也是2个参数,那么就选这条配置了。接着根据正则表达式把参数依次填写到对应的位置。完成url和参数的拼接。最后得到我们想要的url譬如databaselist/1/2.aspx 表示我的分类id是1,page是2。

这里需要具备正则表达式的基本知识,可以去搜索和了解一下正则相关的基础。

接着一个url输入进来,DTCMS会根据正则表达式解析出对应的两个参数,并命名成propertyID和page,然后给后面的cs页面showPage的时候取用,如下图所示。这样形成一个闭环。

DTCMS插件的制作实例电子资源管理(四)URL重写

二、URL重写

所以看了上面一片混乱的说明还是不得要领的话,建议你可以去调试一下,再回来看我写的乱七八糟的说明的话可能你就看懂了,毕竟你是真的要做DTCMS插件的话,调试是少不了的,况且我是在没有说明的情况下,自己调试摸索找到的这条路。何况这都过去两年了。

那么讲讲我们的URL重写到底要怎么配置呢?

  1. 列表页有根据分类id进行筛选的,所以我需要一个propertyID
  2. 列表页需要分页,所以我需要一个page表示第几页了
  3. 我可能只分页,并没有做分类的筛选啊,所以propertyID如果为空或者为0就表示我没有做分类的筛选。
  4. 分类筛选可以多选啊,所以properttyID需要用下划线进行分割,把它当成一个字符串作为整体。

有了以上的分析,我们最后得出的URL重写表达式就如上面那张图所示了,一共3条。第一条是一个参数都不带的。第二条是带一个参数的,就是分类id。第三条是又有分类id,又有page的。

好了,有人问了,如果我只带一个参数,譬如page呢?我说那就会被系统当成分类id=2去进行检索。你说和我想要的不一样啊? 那么我告诉你,不会这样子,除非用户是在地址栏里手动输入的,否则正常点系统连接,系统已经帮你生成了两个参数的url,分类id=0,page=2的这种链接,如下图所示。如果你有强迫症,非要做2个一个参数的url配置的话,根据DTCMS中linkurl方法里的逻辑,他会在循环的时候匹配第一次参数数量当等的那一条配置,可能后一条配置一直都不会被用上。所以要么就遵守规则,要么就自己去改源代码,反正源码在你手里想怎么改怎么改咯。

DTCMS插件的制作实例电子资源管理(四)URL重写

至此,整个系列结束,整个系列从15年开始写起,中间断了两年,原因不多说,还是从自身找原因。今天突然的收到博友发来的回复和点赞,然后再搜索了一下DTCMS插件,网上确实没有DTCMS的插件如何制作的文章,自己挖的坑还是要自己填,哪怕隔了两年,知识还是要传递下去的。这也是我写博客的原因,我希望知识能够传递下去,而不是单纯的传播,希望博客园能有更多的原创的东西,而不是拼拼凑凑一篇又一篇的文章占据首页。