一种根据URL参数条件动态生成URL的方法

URLSearchParams 解析 URL 地址栏参数详解 是 ES6 中新增的一个用于处理 URL 查询参数的接口,它可以解析 URL 中的,并提供一系列方法来进行增删改查等操作。它主要用于的解析,也可以处理动态生成的 URL。是一个强大的工具,用于解析和处理 URL 查询参数。在开发中,利用可以让我们轻松完成 URL 参数的增删改查操作,简化代码逻辑。希望本教程能帮助你掌握的使用方法,提高项目开发效率! 阅读详情

最近做了一个产品列表页类似于搜索列表页, 功能比较简单,比搜索页复杂的逻辑在于,生成各个查询条件的URL。
我们的链接如下:

http://xxx.xxx.xxx/product/list.html?spm=0.0.0.0.fCULEV&noHistoryApi=1&q=洗衣机&start_price=1300&end_price=2300&ppath=6560:98950,2814486;570:24403,2085950&sort=sort-fid&fid=3486
一些特点如下:
alt

比如品牌部分:

1:三洋的链接中,要在ppath现有的基础上去掉中的6560:98950

2:海尔的链接中,要在ppath现有的基础上增加6560:105540
同理在:
alt
这部分,都有做ppath的调整。

而对价格部分

1:1300-2300的选项,点击这项是,要在现有的url中去掉start_price和end_price方法。

2: 选择其他价格时,要把start_price和end_price调整为对应的价格。
alt
再比如这部分:

1:分类筛选部分,去过去掉三洋,迷你部分的筛选,都要去掉相关的筛选项,构建url。

2:比如点击 能耗低,需要把url中的去掉sort=sort-fid&fid=3486,而点击省水时,需要把fid调整为3386,如选择人气和销量时,需要把sort修改为static-score,并把fid去掉。

以上这些组合链接,还要加上分页的s参数变化,当修改为查询条件时,分页页码s,也要删除。

总结下:生成链接中,主要工作是从现有的URL逻辑中删除掉一些参数,或加上一些参数,或者修改某些参数中的一些参数。其中最复杂的是ppath,ppath要支持5670:1234,123;5690:xxx,xxx,需要支持:和,两种形式的组合,而这些组合要支持加减操作。

根据这些规则,我们封装了一个方法build_url_param,需要修改url部分,调用这个方法即可。

 <li class="item">
 <a href="<?php echo THING_COMMENT_LIST.'&'.build_url_param(array('ppath'=>$inValue['pid'].':'.$inValue['vid']),'+');?>">
 <?php }else{?>
 <li class="item-hidden">
 <a href="<?php echo THING_COMMENT_LIST.'&'.build_url_param(array('ppath'=>$inValue['pid'].':'.$inValue['vid']),'+');?>">
 <?php
     }}else{
 ?>
 <li class="item-checked">
 <a href="<?php echo THING_COMMENT_LIST.'&'.build_url_param(array('ppath'=>$inValue['pid'].':'.$inValue['vid'],'s'=>''),'-');?>">
 <?php } // end if?>

代码如上,build_url_param 构建查询url的参数部分,build_url_param第一个参数,传递一个数组,数组中传递相关参数,第二个参数"+"或者"-",“+”表示在现有URL中,加上第一个参数array中的key和对应的value;“-”表示从现有的URL中,减去第一个参数array中对应的key和value,使用以上方法后,所有生成url的部分,就变得非常简单了,只有知道当前连接,需要调整那些参数,是新增参数还是去掉参数即可。

build_url_param函数的实现如下:

/**
 * 根据QUERY构建url
 * $array: 传递参数,
 */

function build_url_param($array,$type){
    global $QUERY;

    $paramArray = array('q','start_price','end_price','cat','vid','ppath','sort','s','n','fid');

    $myArray = array();
    // 去掉不必要的参数
    foreach($paramArray as $key=>$value){
        // 放到myArray数组
        if(isset($QUERY[$value]) && !empty($QUERY[$value])){
            // n 不能小于10
            if($value == 'n'){
                if($QUERY[$value] < 10){
                    $myArray[$value] = '10';
                }
            }else{
                $myArray[$value] = $QUERY[$value];
            }
        }
    }
    // 构造最基本的
    if($type == '+'){
        // 加参数
        foreach($array as $key=>$value){
            $temp = array();
            // ppath特殊处理
            // pid相同时,pid:vid,vid; vid之间用,分割
            // pid不同时,pid:vid;分割
            // $value参数: pid:vid的形式
            if($key == 'ppath' && !empty($myArray[$key])){
                // 查找是否已经有此pid 
                $temp = $myArray[$key]; // 数组中的ppath
                $tempArray = explode(";",$temp);
                $tempPids = array();
                foreach($tempArray as $k=>$v){
                    list($tempPid,$tempVid) = explode(":",$v);
                    $tempPids[] = $tempPid;
                }
                $valueArray = explode(":",$value);
                // 找到
                if(isset($valueArray[0]) && stristr($temp,$valueArray[0]) != false && in_array($valueArray[0],$tempPids)){
                    $myArray[$key] = str_replace($valueArray[0].":",$value.",",$myArray[$key]);
                }else{
                    // 没有找到直接增加
                    $myArray[$key] = $myArray[$key].";".$value;
                }
            /*}elseif($key == 'fid'){
                if(!empty($myArray['fid'])){
                    $myArray['sort'] = "sort-fid";
                }
                $myArray[$key] = $value;
            */
            }elseif($key == 'sort'){
                unset($myArray['s']);
                $myArray[$key] = $value;
            }else{
                unset($myArray['s']);
                $myArray[$key] = $value;
            }
        }
    }else{
        // 减少参数
        foreach($array as $key=>$value){
            // 为空,去掉整个产生
            if(empty($value)){
                unset($myArray[$key]);
            }else{
                // 获取value
                $temp = $myArray[$key];
                // 单独处理ppath
                if($key == 'ppath'){
                    // 先找对应的pid,根据pid查找vid
                    if($value == $myArray[$key]){
                        unset($myArray[$key]);
                    }else{
                        // 数组,如果vid=0,删除所有的pid
                        $valueArray = explode(":",$value);
                        $ppathArray = explode(";",$myArray[$key]);
                        $t = array();
                        // ppath判断
                        if(isset($ppathArray[0])){
                            foreach($ppathArray as $inKey=>$inValue){
                                // 直接去掉
                                if($inValue != $value){
                                    //单条记录path
                                    $inValueArray = explode(":",$inValue);
                                    // pid相同
                                    if($inValueArray[0] == $valueArray[0]){
                                        // 删除vid
                                        $temp = str_replace(','.$valueArray[1],'',$inValueArray[1]); // 末尾
                                        $temp = str_replace(':'.$valueArray[1],'',$temp); // 开头
                                        $temp = str_replace($valueArray[1].',','',$temp); // 中间
                                        // 第二条件,用于删除所有pid下的所有数据
                                        if(!empty($temp) && $temp != $inValueArray[1]){
                                            // 删除后的数据进入t数组
                                            $t[] = implode(":",array($inValueArray[0],$temp));
                                        }
                                    }else{
                                        $t[] = $inValue;
                                    }
                                }
                            }
                        }
                        // 处理后的数组,赋值给ppath
                        if(count($t)){
                            $myArray[$key] = implode(";",$t);
                        }
                    }
                }else{
                    // 删除里面信息
                    $myArray[$key] = str_replace($value,'',$temp);
                }
            }
        }
    }
    // 构造一段param
    return http_build_query($myArray);
}


代码写的比较糙,有时间再细化下,关键是build参数的方式和方法希望对大家有所启发和帮助。

Python Django框架url反向解析实现动态生成对应的url链接示例 这篇文章主要介绍了Python Django框架url反向解析实现动态生成对应的url链接,结合实例形式分析了Django框架URL反向解析具体原理与应用操作技巧,需要的朋友可以参考下: url反向解析:根据url路由规则,动态生成对应的url链接 (防止硬编码)。 url反向解析应用在两个地方:模板中的超链接,视图中的重定向。 项目名/urls.py(项目的url路由配置,url反向解析,取... 阅读详情

相关推荐

动态URL与静态URL的区别及编程示例

动态URL适用于传递动态数据、灵活处理和呈现数据的场景,而静态URL适用于访问不会频繁改变的内容或资源的场景。动态URL和静态URL是两种常见的URL类型,它们在构成方式、特点和编程实现上存在一些区别。动态URL的生成是通过服务器端脚本或应用程序处理请求时动态生成的,因此每次请求可能会生成不同的URL。时,服务器会根据查询参数中的用户ID从数据库中检索相应的用户信息,并返回格式化后的用户数据。灵活性:动态URL允许根据需求动态生成不同的URL,从而实现更灵活的数据处理和呈现方式。在上面的示例中,当访问。

ByteKnight的博客 694

javascript:设置URL参数的方法,适合多条件查询

适用场景:多条件查询情况,如下图所示:  通过设置URL参数,再结合数据源控件设置的RUL参数,就能进行简单的多条件查询了。 javascript函数: &lt;mce:script type="text/javascript"&gt;&lt;!-- //设置URL参数的方法 function setParmsValue(parms, parmsV...

weixin_34247032的博客 278

Python Requests库:请求参数的动态生成方法

在Web开发和数据采集过程中,我们经常需要与各种API进行交互。不同的API可能要求不同的请求参数,而且这些参数可能会根据不同的条件动态变化。Python的Requests库是一个强大且易用的HTTP库,它使得发送HTTP请求变得非常简单。本文章的目的就是详细介绍如何使用Requests库动态生成请求参数,涵盖了常见的请求参数类型,如查询字符串参数、表单数据、JSON数据等。通过本文的学习,读者将能够掌握在不同场景下动态生成请求参数的方法,提高与API交互的效率和灵活性。

AI Python 编程之道的博客 1153

(重点)【MBG实战(下划线命名)】 1.crud 2.计数 3.自定义sql(my文件夹下) 4.分页插件PageHelper 5.解决重复生成xml报错问题 6.跳过指定单元测试

1.计数。

focus-unchanged-thing 867

Dynamics 365从入门到精通:一站式掌握微软智能商业应用平台

很多新手学Dynamics 365时,容易陷入“死记功能”的误区,其实这款平台的核心价值不是“功能多全”,而是“能适配企业业务流程,通过生态集成提升效率”。先从具体业务场景入手,理解每个功能的实际价值;再通过生态集成拓展系统能力;最后通过开发实现定制化,满足企业的特殊需求。按照这个思路,新手不用害怕复杂,一步步落地实战,3个月就能从“入门”到“能独立负责项目”。如果在学习过程中遇到具体问题(比如部署报错、数据迁移失败),欢迎在评论区留言,我会结合实战经验帮你解答!

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1040

量子密钥分发系统设计与实现(一):系统基本架构讨论

本文主要对量子密钥分发系统中的基础架构和基于系统的量子密钥协商过程进行了初步讨论,为后期系列文章进行铺垫。

量子领域相关话题 3894

JS逆向实战案例1——某房地产url动态生成

JS逆向实战案例1——某房地产url动态生成

zhu6201976的博客 1977

中文文本纠错实战:pycorrector与kenlm的安装与高效使用指南

本文提供了一份详细的中文文本纠错实战指南,重点介绍了pycorrector与kenlm的安装与高效使用方法。内容涵盖从编译环境准备、依赖安装到核心参数调优、批量处理及领域自适应等全流程,旨在帮助开发者快速部署并优化纠错系统,提升中文文本处理的质量与效率。

weixin_29055699的博客 411

ASP.NET MVC3 学习心得------路由机制

9.1 理解URL URL满足的要求: l 域名易于记忆和拼写 l 简短、易输入 l 可以反应出站点的结构 l 可破解,用户可以通过移除URL的末尾,进而达到更高层次的信息体系结构 l 持久、不能变化 9.2路由机制的概述 ASP.NET MVC中路由机制的两种用途: l 匹配传入的请求,并映射到控制器的操作 l 构造传出的URL,用来相应控制器的操

xuemoyao的专栏 3705

【存储原理】IO超时处理 块层block-scsi层之间

【存储原理】IO超时处理 块层block-scsi层之间

sinat_37817094的博客 1024

13、离散时间系统建模与分析

本文系统介绍了离散时间系统的建模与分析方法,涵盖连续时间模型的离散化过程、系统稳定性判断准则、输入输出模型转换方法以及有限脉冲响应和阶跃响应模型的应用。通过多个示例详细展示了不同系统在离散化过程中的特性变化,并探讨了采样间隔对系统动态特性的影响。此外,文章还分析了时间延迟的处理方法,并总结了关键知识点及操作步骤,为离散时间系统的实际应用提供了理论基础和实践指导。

2w3e4r5t6y的博客 189

去掉get方式的URL中空的参数

当然,用post提交就没有任何参数了,但这不符合HTTP的规范,查询嘛,就得用get方式才好,但是get方式不够智能,查询表单中用户可能一个条件也没设置,一点查询,URL上跟一大串空参数如"?a=&b=&user=&q="很难看,我希望实现:如果用户一个条件也没选,那URL后面什么参数也不带,如果选了某个参数,URL上只带这个参数,不带任何空值的参数。 我想,唯一的方式就是不使用form,而...

berg369的专栏 1050

2026年摩尔线程数字IC面试试卷带答案

本文摘要: 该试卷为数字IC设计笔试,满分120分,时长90分钟,包含单选题、波形分析题、多选题和代码设计题。重点考察时序约束(如set_false_path)、建立/保持时间、逻辑化简、复位机制、AXI协议、半导体工艺、状态机、GPU架构等核心知识点。多选题涉及异步FIFO设计、Verilog综合、亚稳态处理、C++关键字和低功耗技术。代码题要求实现单比特信号去毛刺电路,需稳定4个时钟周期才输出。试题解析详细,标注了企业面试高频考点,如摩尔线程自研的MUSA架构和花港GPU架构特点。整体内容专业性强,覆盖

Open 98

Js 动态修改 url 的参数

URL链接:url = http://www.baidu.com?id={ID}&type={Type} DATA数据:param={ ID:“123421”, Type:“line” } Js代码如下: function changeLinkUrl(linkUrl,param){ //获取{}中的变量名称 var array = linkUrl.match(/{(.*?)}/g); if(array == null ){ return linkUrl; } //正则表达

悟●禅●酒的专栏 1086

《Zephyr OS 入门与实战》第5章:内存管理策略

【代码】《Zephyr OS 入门与实战》第5章:内存管理策略。

2301_79143213的博客 349

把 SNC 支持的通信链路一次讲透,SAP GUI、RFC、CPIC、SAProuter 到底谁在保护谁

摘要: SNC(Secure Network Communications)是SAP系统中用于保护特定通信链路的安全机制,主要应用于DIAG、RFC、CPIC等SAP协议,而非HTTP等互联网协议(后者由SSL/TLS处理)。其核心在于保护通信端点之间的逻辑链路,需在发起方和接收方同时配置SNC参数,包括SNC名称、保护等级(QoP)等。实际项目中,SNC的配置涉及多个层面,如SAP GUI到ABAP平台的登录链路、外部程序通过RFC/CPIC连接ABAP的认证、ABAP系统间的跨系统通信等。配置不当可能导

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 250

axios get请求动态拼接url

【代码】axios get请求动态拼接url。

vue+iview 动态渲染表格(vue.js结合iview插件) 385

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

hdwiki 学习笔记 01

一、href =“”里的参数写法 <!--{if $hotname[url]}-->{$hotname[url]} <!--{else}-->index.php?doc-innerlink-{eval echo urlencode($hotname[name])} <!--{/if}--> 二、 转载于:https://www.cnb...

weixin_30814329的博客 157

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

根据url动态生成二维码

根据url动态生成二维码的工具类,没有细研究,先贴出来,有兴趣自己深究。 public class QRCodeUtil { public static BufferedImage createImage(String content, String logoImgPath, boolean needCompress) throws IOException, WriterExcep...

qq_35701161的博客 849

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

js 拼接url和参数

class Url { /** * 传入对象返回url参数 * @param {Object} data {a:1} * @returns {string} */ getParam(data){ let url = ''; for(var k in data){ let value =...

sun 1万+

mockjs中根据请求参数动态生成模板

mockjs拦截get请求 这里由mockjs提供的options的参数中只能够获得url本身,并不能很好的直接获得get请求的参数。但是,通过querystring库的prase函数可以很好的解决这个问题。 由此就可获得get请求在url中的参数。 根据参数动态生成指定数量的列表(以分页为例) 通过使用JS提供的计算属性语法,可将变量设置为对象名。 ...

qq_43964025的博客 1200

vue 获取请求url_vue 获取url里参数的两种方法小结

vue 获取url里参数的两种方法小结我就废话不多说了,大家还是直接看代码吧~第一种:const query = Qs.parse(location.search.substring(1))let passport = query.passport;第二种:var query=this.$route.query;let lat = query.lat;补充知识:Vue通过query获取路由参数现在...

weixin_31263231的博客 1万+

在Power BI中根据用户选择动态生成带过滤条件的报表URL (Dynamic URL Link)

在Power BI中根据用户选择动态生成带过滤条件的报表URL (Dynamic URL Link)

Fluffy的百宝箱 7130

thinkphp 使用U方法自动生成URL超链接

ThinkPHP U方法 U 方法是 ThinkPHP 内置的一个快捷方法,可以根据系统 URL 模式配置动态的生成智能的 URL 地址。 由于 ThinkPHP 支持各种不同的 URL 模式,另外还有分组模式,因此当环境发生变化时,有时候可能会改变 URL 模式,而 U 方法正是解决不同配置情况下的 URL 统一问题。除了动态生成 URL 以自适应系统配置外,U 方法还有一个好处是可以自动

2万+

使用<jsp:include>,不想写死URL,动态生成URL的解决办法

http://dangry.iteye.com/blog/868422/

aty 4306
上一篇: 为 iPhone 和 iPad 自定义网站的主屏幕图标
下一篇: 一种加快在苹果app store中上架的方法
逸学堂
博客等级 码龄23年 1104粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值