1

我已经尝试了一段时间来解决可能是一个小问题,但我似乎无法理解它。我尝试了一些不同的方法,有些是在 SO 找到的,但还没有奏效。

问题包括:
我有一个展示室页面,在那里我展示了一些布料。每一块布上都有四个“视图”

  1. 男性
  2. 女性
  3. 正面
  4. 后退

现在,用户可以通过查看男性女性模型来过滤它,但他们也可以通过查看两个性别的正面背面来过滤。

我创建了我的脚本,因此它可以检测 URL 查询并显示正确的数据,但我的问题是正确“构建” URL。

初次进入页面时,四个链接是这样的:

  1. example.com?gender=male
  2. example.com?gender=female
  3. example.com?site=front
  4. example.com?site=back

这是因为它是模型中的“默认”视图(默认视图设置为性别=男性 && 站点=正面)。

但是,如果我选择查看?gender=female用户应该能够通过添加&site=back再次过滤它,因此完整的 URL 将是:example.com ?gender=female&site=back

如果我然后按链接查看gender=male它应该仍然保留 URL 参数&site=back

到目前为止,我所做的是将参数附加到现有 URL,但这会导致 URL 字符串,例如:example.com ?gender=male&site=front&gender=female 等等……</p>

我尝试过使用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 的答案,但没有一个是我的问题的答案。

我希望我已经解释了自己,否则请告诉我,我会详细说明。
任何帮助或建议将不胜感激

4

4 回答 4

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;this 将根据 if 语句的返回值将 $var 的值设置为 true_result 或 false_result。

然后你可以对性别做同样的事情:

$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';
于 2013-04-16T14:06:42.733 回答
2

通过寻找一个更好的解决方案然后我的解决方案找到了这个并找到了这个丑陋的解决方案(我们在网上看到很多),所以这是我的解决方案:

function add_get_parameter($arg, $value)
{
    $_GET[$arg] = $value;

    return "?" . http_build_query($_GET);
}
于 2013-08-26T23:01:08.413 回答
-1
<?php
function requestUriAddGetParams(array $params)
{
    $parseRes=parse_url($_REQUEST['REQUEST_URI']);
    $params=array_merge($_GET, $params);
    return $parseRes['path'].'?'.http_build_query($params);
}
?>
于 2014-12-18T20:16:30.340 回答
-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;
于 2014-12-19T07:08:11.773 回答