我已经尝试了一段时间来解决可能是一个小问题,但我似乎无法理解它。我已经尝试了一些不同的方法,其中一些在SO上找到,但还没有一种方法可以使用。
问题包括:
我有一个展示厅页面,我在那里展示一些布料。在每一件布料上都有四个“视图”
现在,用户可以通过查看男性或女性模型对其进行过滤,但也可以通过查看前面或返回两种性别。
我已经创建了我的脚本,因此它会检测到URL查询并显示正确的数据,但我的问题是正确“构建”URL。
首次进入页面时,四个链接如下:
这项工作是因为它是模型中的“默认”视图(默认视图设置为gender = male&& site = front)。
但是,如果我选择查看?gender = female ,则用户应该可以通过添加& site = back 再次对其进行过滤,以便完整的网址:example.com?gender=female&site=back
如果我按下链接以查看性别=男性,则仍应保留网址参数& site = back 。
我到目前为止所做的是将参数附加到现有网址,但这会产生以下网址字符串: example.com?gender=male&site=front&gender=female 和等......
我已经尝试过使用 parse_url 函数, http_build_query($ parms)方法并创建我自己的“自己”函数来检查现有参数但是它不起作用。
我最近的尝试是:
_setURL(‘http://example.com?gender=male’, ‘site’, ‘back’);
function _setURL($url, $key, $value) {
$separator = (parse_url($url, PHP_URL_QUERY) == NULL) ? '?' : '&';
$query = $key."=".$value;
$url .= $separator . $query;
var_dump($url); exit;
}
此函数有效,除非$ _GET参数已存在,因此应替换而不添加。
我不确定是否有一些“最佳实践”来解决这个问题,正如我所说,我已经看了很多关于SO的答案,但没有一个在我的问题上找到了。
我希望我已经解释过了,否则请告诉我,我会详细说明 任何帮助或建议将不胜感激
答案 0 :(得分:4)
您可以使用以下方法动态生成链接:
$frontLink = (isset($_GET['gender'])) ? 'mydomain.com?gender='.$_GET['gender'].'&site=front':'mydomain.com?site=front';
$backLink = (isset($_GET['gender'])) ? 'mydomain.com?gender='.$_GET['gender'].'&site=back':'mydomain.com?site=back';
这是一个1行if语句,它将分别设置变量$frontLink
和$backlink
的值。 1行if语句的语法是$var = (if_statement) ? true_result:false_result;
这将把$ var的值设置为true_result或false_result,具体取决于if语句的返回值。
然后你可以为性别做同样的事情:
$maleLink = (isset($_GET['site'])) ? 'mydomain.com?gender=male&site='.$_GET['site']:'mydomain.com?gender=male';
$femaleLink = (isset($_GET['site'])) ? 'mydomain.com?gender=female&site='.$_GET['site']:'mydomain.com?gender=female';
答案 1 :(得分:2)
通过寻找更好的解决方案找到了这个,然后我发现了这个丑陋的(我们在网上看到很多),所以这是我的解决方案:
function add_get_parameter($arg, $value)
{
$_GET[$arg] = $value;
return "?" . http_build_query($_GET);
}
答案 2 :(得分:-1)
<?php
function requestUriAddGetParams(array $params)
{
$parseRes=parse_url($_REQUEST['REQUEST_URI']);
$params=array_merge($_GET, $params);
return $parseRes['path'].'?'.http_build_query($params);
}
?>
答案 3 :(得分:-2)
if(isset($_GET['diagid']) && $_GET['diagid']!='') {
$repParam = "&diagid=".$_GET['diagid'];
$params = str_replace($repParam, "", $_SERVER['REQUEST_URI']);
$url = "http://".$_SERVER['HTTP_HOST'].$params."&diagid=".$ID;
}
else $url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."&diagid=".$ID;