总目录

时隔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. CentOS 通过yum来升级php到php5.6

    在文章中,我们将展示在centOS系统下如果将php升级到5.6,之前通过yum来安装lamp环境,直接升级的话,提示没有更新包,也就是说默认情况下php5.3.3是最新 1.查看已经安装的php版本 ...

  2. 【转】shell学习笔记(七)——流程控制之while

    while do done, until do done (不定回圈) 当 condition 条件成立时,就进行回圈,直到 condition 的条件不成立才停止 while [condition] ...

  3. Win7-64位+Oracle11.2g+使用PLSQL_Developer 的解决办法

    1)安装Oracle 11g 64位 2)安装32位的Oracle客户端( instantclient-basic-win32-11.2.0.1.0)下载instantclient-basic-win ...

  4. 一个简单的node.js服务

    var http = require('http'); var qs = require('querystring'); var server = http.createServer(function ...

  5. virtualbox创建虚拟机及增加硬盘记录

    创建虚拟机 jken01VBoxManage createvm --name "jken01" --basefolder /data/virtualDir/jken01 --reg ...

  6. ABP官方文档翻译 6.2.1 ASP.NET Core集成

    ASP.NET Core 介绍 迁移到ASP.NET Core? 启动模板 配置 启动类 模块配置 控制器 应用服务作为控制器 过滤器 授权过滤器 审计Action过滤器 校验过滤器 工作单元Acti ...

  7. Spring MVC Mock demo

    package com.niwodai.mem.web.controller; import com.alibaba.fastjson.JSON; import org.junit.Before; i ...

  8. LANMP系列教程之MySQL编译安装CentOS7环境

      以MySQL5.5.33版本为例 1.准备工作: 1.首先准备好源代码包 2.并且确保已安装好 "开发工具" 包组和cmake编译工具 3.确保安装好ncurses-devel ...

  9. BZOJ 1022: [SHOI2008]小约翰的游戏John [SJ定理]

    传送门 $anti-nim$游戏,$SJ$定理裸题 规定所有单一游戏$sg=0$结束 先手必胜: $1.\ sg \neq 0,\ 某个单一游戏sg >1$ $2.\ sg = 0,\ 没有单一 ...

  10. 基于Appium1.6.X的WebDriverAgent编译、安装

    转自:http://www.cnblogs.com/baconLiu/p/6861431.html tips:WebDriverAgent是Appium1.6.3以后版本新添加的模块,为了让appiu ...