总目录

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

本章目录

  • 从分页开始
  • URL重写

一、从分页开始

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

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

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

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

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

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

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

这里就不详细展开了,简单描述一下这个方法做了些什么,首先要知道在后台控制面板—系统管理—URL配置里面,我们每一条URL配置都是可以有多条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的时候取用,如下图所示。这样形成一个闭环。

二、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方法里的逻辑,他会在循环的时候匹配第一次参数数量当等的那一条配置,可能后一条配置一直都不会被用上。所以要么就遵守规则,要么就自己去改源代码,反正源码在你手里想怎么改怎么改咯。

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

DTCMS插件的制作实例电子资源管理(四)URL重写的更多相关文章

  1. DTCMS插件的制作实例电子资源管理(二)Admin后台页面编写

    总目录 插件目录结构(一) Admin后台页面编写(二) 前台模板页编写(三) URL重写(四) 本实例旨在以一个实际的项目中的例子来介绍如何在dtcms中制作插件,本系列文章非入门教程,部分逻辑实现 ...

  2. DTCMS插件的制作实例电子资源管理(一)插件目录结构

    总目录 插件目录结构(一) Admin后台页面编写(二) 前台模板页编写(三) URL重写(四)     本实例旨在以一个实际的项目中的例子来介绍如何在dtcms中制作插件,本系列文章非入门教程,部分 ...

  3. DTCMS插件的制作实例电子资源管理(三)前台模板页编写

    总目录 插件目录结构(一) Admin后台页面编写(二) 前台模板页编写(三) URL重写(四) 本实例旨在以一个实际的项目中的例子来介绍如何在dtcms中制作插件,本系列文章非入门教程,部分逻辑实现 ...

  4. ASP.NET Core 2.2 基础知识(四) URL重写中间件

    说到URL重写就不得不提URL重定向. URL重定向 URL重定向是客户端操作,指示客户端访问另一个地址的资源.这需要往返服务器,并且当客户端对资源发出请求时,返回客户端的重定向URL会出现在浏览器的 ...

  5. Android移动APP开发笔记——Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例

    引言 Cordova(PhoneGap)采用的是HTML5+JavaScript混合模式来开发移动手机APP,因此当页面需要获取手机内部某些信息时(例如:联系人信息,坐标定位,短信等),程序就需要调用 ...

  6. Maven-002-eclipse 插件安装及实例

    因为平常编码的时候,习惯了使用 eclipse 进行编码,因而需要将 eclipse 安装 maven 的插件,安装步骤如下所示: 一.安装 选择菜单: help -> Install New  ...

  7. JQuery实用技巧--学会你也是大神(1)——插件的制作技巧

      前  言 JRedu 学习之前,首先我们需要知道什么是JQuery? JQuery是一个优秀的javascript框架. JQuery是继Prototype之后又一个优秀的Javascript框架 ...

  8. 40款非常棒的 jQuery 插件和制作教程(系列一)

    jQuery 在现在的 Web 开发项目中扮演着重要角色,jQuery 让网站有更好的可用性和用户体验,让访问者对网站留下非常好的印象.jQuery以其插件众多.独特.轻量以及支持大规模的网站开发闻名 ...

  9. 使用jquery插件validate制作的表单验证案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. webpack + vue

    开始之前 本文包含以下技术,文中尽量给与详细的描述,并且附上参考链接,读者可以深入学习: 1.webpack2.Vue.js3.npm4.ES6语法 前言 在对着产品高举中指怒发心中之愤后,真正能够解 ...

  2. MySQL5.6安装(RPM)笔记

    1. 检查MySQL是否安装,如果有安装,则移除(rpm –e 名称)[root@localhost ~]# rpm -qa | grep -i mysqlmysql-libs-xxxxxxxxxx. ...

  3. Visionpro学习笔记 :QuickBuild-Based Application Run-Once Button

    1) Creating a Run-Once Button 通过JobManager调用VisionPro文件.所有的过程放到一个Try/Catch块中. Private Sub RunOnceBut ...

  4. git 不成功

    fatal: Interactive git shell is not enabled.hint: ~/git-shell-commands should exist and have read an ...

  5. 【转】Awk 命令学习总结、AWk命令系列学习(linux shell)

    前面的话 学习linux 的同人,都知道linux shell文本处理能力非常强大.有一组强大的文本处理工具:grep,sed,awk . 其中grep 经常用作查找匹配文本.sed用作文本编辑替换. ...

  6. MVVM之旅(1)创建一个最简单的MVVM程序

    这是MVVM之旅系列文章的第一篇,许多文章和书喜欢在开篇介绍某种技术的诞生背景和意义,但是我觉得对于程序员来说,一个能直接运行起来的程序或许能够更直观的让他们了解这种技术.在这篇文章里,我将带领大家一 ...

  7. jQuery应用操作之---表格

    示例: <table> <thread> <tr><th>姓名</th><th>性别</th><th>暂 ...

  8. SpringMVC和Struts2的比较

    整体的框架机制     1.Struts2的入口是StrutsPrepareAndExecuteFilter,SpringMVC的入口是通过DispatcherServlet实现.     2.Str ...

  9. jquery 中json数组的操作 增删改

    1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...

  10. ABP官方文档翻译 3.3 仓储

     仓储 默认仓储 自定义仓储 自定义仓储接口 自定义仓储实现 基础仓储方法管理数据库连接 查询 获取单个实体 获取实体列表 关于IQueryable 自定义返回值 插入 更新 删除 其他 关于异步方法 ...