DTCMS插件的制作实例电子资源管理(四)URL重写
总目录
- 插件目录结构(一)
- Admin后台页面编写(二)
- 前台模板页编写(三)
-
本实例旨在以一个实际的项目中的例子来介绍如何在dtcms中制作插件,本系列文章非入门教程,部分逻辑实现一带而过,敬请谅解。
时隔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重写到底要怎么配置呢?
- 列表页有根据分类id进行筛选的,所以我需要一个propertyID
- 列表页需要分页,所以我需要一个page表示第几页了
- 我可能只分页,并没有做分类的筛选啊,所以propertyID如果为空或者为0就表示我没有做分类的筛选。
- 分类筛选可以多选啊,所以properttyID需要用下划线进行分割,把它当成一个字符串作为整体。
有了以上的分析,我们最后得出的URL重写表达式就如上面那张图所示了,一共3条。第一条是一个参数都不带的。第二条是带一个参数的,就是分类id。第三条是又有分类id,又有page的。
好了,有人问了,如果我只带一个参数,譬如page呢?我说那就会被系统当成分类id=2去进行检索。你说和我想要的不一样啊? 那么我告诉你,不会这样子,除非用户是在地址栏里手动输入的,否则正常点系统连接,系统已经帮你生成了两个参数的url,分类id=0,page=2的这种链接,如下图所示。如果你有强迫症,非要做2个一个参数的url配置的话,根据DTCMS中linkurl方法里的逻辑,他会在循环的时候匹配第一次参数数量当等的那一条配置,可能后一条配置一直都不会被用上。所以要么就遵守规则,要么就自己去改源代码,反正源码在你手里想怎么改怎么改咯。
至此,整个系列结束,整个系列从15年开始写起,中间断了两年,原因不多说,还是从自身找原因。今天突然的收到博友发来的回复和点赞,然后再搜索了一下DTCMS插件,网上确实没有DTCMS的插件如何制作的文章,自己挖的坑还是要自己填,哪怕隔了两年,知识还是要传递下去的。这也是我写博客的原因,我希望知识能够传递下去,而不是单纯的传播,希望博客园能有更多的原创的东西,而不是拼拼凑凑一篇又一篇的文章占据首页。
DTCMS插件的制作实例电子资源管理(四)URL重写的更多相关文章
- DTCMS插件的制作实例电子资源管理(二)Admin后台页面编写
总目录 插件目录结构(一) Admin后台页面编写(二) 前台模板页编写(三) URL重写(四) 本实例旨在以一个实际的项目中的例子来介绍如何在dtcms中制作插件,本系列文章非入门教程,部分逻辑实现 ...
- DTCMS插件的制作实例电子资源管理(一)插件目录结构
总目录 插件目录结构(一) Admin后台页面编写(二) 前台模板页编写(三) URL重写(四) 本实例旨在以一个实际的项目中的例子来介绍如何在dtcms中制作插件,本系列文章非入门教程,部分 ...
- DTCMS插件的制作实例电子资源管理(三)前台模板页编写
总目录 插件目录结构(一) Admin后台页面编写(二) 前台模板页编写(三) URL重写(四) 本实例旨在以一个实际的项目中的例子来介绍如何在dtcms中制作插件,本系列文章非入门教程,部分逻辑实现 ...
- ASP.NET Core 2.2 基础知识(四) URL重写中间件
说到URL重写就不得不提URL重定向. URL重定向 URL重定向是客户端操作,指示客户端访问另一个地址的资源.这需要往返服务器,并且当客户端对资源发出请求时,返回客户端的重定向URL会出现在浏览器的 ...
- Android移动APP开发笔记——Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例
引言 Cordova(PhoneGap)采用的是HTML5+JavaScript混合模式来开发移动手机APP,因此当页面需要获取手机内部某些信息时(例如:联系人信息,坐标定位,短信等),程序就需要调用 ...
- Maven-002-eclipse 插件安装及实例
因为平常编码的时候,习惯了使用 eclipse 进行编码,因而需要将 eclipse 安装 maven 的插件,安装步骤如下所示: 一.安装 选择菜单: help -> Install New ...
- JQuery实用技巧--学会你也是大神(1)——插件的制作技巧
前 言 JRedu 学习之前,首先我们需要知道什么是JQuery? JQuery是一个优秀的javascript框架. JQuery是继Prototype之后又一个优秀的Javascript框架 ...
- 40款非常棒的 jQuery 插件和制作教程(系列一)
jQuery 在现在的 Web 开发项目中扮演着重要角色,jQuery 让网站有更好的可用性和用户体验,让访问者对网站留下非常好的印象.jQuery以其插件众多.独特.轻量以及支持大规模的网站开发闻名 ...
- 使用jquery插件validate制作的表单验证案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- json_encode详解
<?php $json = Array ( "a" => "php" , "b" => "mysql" ...
- php中HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR的使用
1.REMOTE_ADDR:浏览当前页面的用户计算机的ip地址2.HTTP_X_FORWARDED_FOR: 浏览当前页面的用户计算机的网关3.HTTP_CLIENT_IP:客户端的ip 在PHP 中 ...
- SQL查询语句优化的实用方法
查询语句的优化是SQL效率优化的一个方式,可以通过优化sql语句来尽量使用已有的索引,避免全表扫描,从而提高查询效率.最近在对项目中的一些sql进行优化,总结整理了一些方法. 1.在表中建立索引,优先 ...
- getResource()和getSystemResource()分析
1. getClass().getResource() 第一步,getClass().getResource(path)是有一个路径参数的,这个路径会先被转换成"类所在的包名称+path&q ...
- 01-Go命令与基础
什么是Go? Go是一门并发支持.垃圾回收的编译型系统编程语言,旨在创造一门具有在静态编译语言的高性能和动态的高效开之间拥有良好平衡点的一门编程语言. Go的主要特点有哪些? 类型安全和内存安全 以非 ...
- 10个实用的 Linux 网络和监控命令[转]
本文列出了10个基础的每个Linux用户都应该知道的网络和监控命令.网络和监控命令类似于这些: hostname, ping, ifconfig, iwconfig, netstat, nslooku ...
- TCP/IP网络协议基础知识集锦[转]
引言 本篇属于TCP/IP协议的基础知识,重点介绍了TCP/IP协议簇的内容.作用以及TCP.UDP.IP三种常见网络协议相关的基础知识. 内容 TCP/IP协议簇是由OSI七层模型发展而来的,之所以 ...
- iOS-CoreText的那些事【电子书的那些事】
这段时间在搞电子书,把这些天出现的问题归总下,我还是希望电子书的格式包括返回的数据,可直观的反应出客户端想表达的内容:原生的体验还是比较好的,希望对coretext再深入. 1.判断点击的位置是否在某 ...
- SpringMVC源码情操陶冶-ResourcesBeanDefinitionParser静态资源解析器
解析mvc:resources节点,控制对静态资源的映射访问 查看官方注释 /** * {@link org.springframework.beans.factory.xml.BeanDefinit ...
- JDK,JRE,JVM的区别与联系
JDK : Java Development ToolKit(Java开发工具包).JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工 ...