总目录

时隔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. 溢出问题:overflow后最后一排文字显示不全

    溢出字体会显示在padding区域(http://www.divcss5.com/css-hack/c680.shtml) section#xinwen li a h3{ border-bottom: ...

  2. 2018-01-28-TF源码做版本兼容的一个粗暴方法

    layout: post title: 2018-01-28-TF源码做版本兼容的一个粗暴方法 key: 20180128 tags: IT AI TF modify_date: 2018-01-28 ...

  3. Spring事务不回滚原因分析

    Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离. 在我完成一个项目的时候,遇到了一个Spring事务不回滚的问题,通过aspectJ和@Transacti ...

  4. samephore()信号量跨线程通信

    samephore1: #include <stdio.h> #include <stdlib.h> #include <Windows.h> ] = " ...

  5. Python selenium 一个节点两个关联input

    HTML代码: 一个节点两个关联input  多出现于密码框 先需要模拟点击进入第一个input,才能激活第二个input. 代码: driver.find_element_by_name('Text ...

  6. 为PHP设置服务器(Apache/Nginx)环境变量

    为PHP设置服务器(Apache/Nginx)环境变量 设置环境变量常见的地方为区分开发环境/生产环境,或者定义一些数据库的帐号密码 设置Apache环境变量 指令 设置当前环境变量为DEV SetE ...

  7. easyUI前后台分页代码实现

    一.后台分页 (1)客户端代码: var dg = $('#table'); var opts = dg.datagrid('options'); var pager = dg.datagrid('g ...

  8. 在CentOS7上实现NFS共享

    一.介绍 NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,功能是让客户端通过网络访问不同主机上磁盘里的数据,主要用在类Unix系统上实现文件共享 ...

  9. ABP官方文档翻译 4.1 应用服务

    应用服务 IApplicationService接口 ApplicationService类 CrudService和AsyncCrudAppService类 简单的CRUD应用服务示例 自定义CRU ...

  10. oracle表中字段的添加、删除

    在oracle数据库中为一张表添加一个字段: alter table tableName add ClIENT_OS varchar2(20) default '0' not null ; 在orac ...