我的分页代码在未设置过滤器的情况下非常有效。但是,当我在页面上使用过滤器时,它会显示每个产品,但是在完成产品后,没有数量的页面将不显示任何内容。我检查了是否可以发送过滤器,如:
if(isset($brand)){
echo " <a href='{$_SERVER['PHP_SELF'}}?currentpage=$nextpage&brand=$brand'>></a> "
}else{
echo " <a href='{$_SERVER['PHP_SELF'}}?currentpage=$nextpage'>></a>
}
但是这不是有效的方法,因为我将不得不检查20个过滤器。我也尝试过添加字符串,然后再将其添加到<a>
,但是它不能像这样工作:
$filters;
if(isset($brand)){
$filters .= "&brand=".$brand;
}
所以我的问题是:有没有一种方法可以检查回显是否设置了过滤器,并将它们全部发送到下一页(例如:品牌,颜色,尺寸..)。
答案 0 :(得分:2)
使用http_build_query
从值数组构建HTTP查询字符串。构建数组时,请使用null合并运算符,以避免出现有关使用未定义变量的通知。
$filter_array = [
"currentpage" => $nextpage,
"brand" => $brand ?? "",
"color" => $color ?? "",
"size" => $size ?? "",
// and the rest of your variables
];
$query = http_build_query($filter_array);
echo sprintf('<a href="%s?%s">></a>', $_SERVER["PHP_SELF"], $query);
或者,对于不支持的旧PHP版本:
$filter_array = [
"currentpage" => $nextpage,
"brand" => isset($brand) ? $brand : "",
"color" => isset($color) ? $color : "",
"size" => isset($size) ? $size : "",
// and the rest of your variables
];
$query = http_build_query($filter_array);
echo sprintf('<a href="%s?%s">></a>', $_SERVER["PHP_SELF"], $query);
答案 1 :(得分:0)
这是一种方法
首先将所有过滤器添加到数组中
$filters = array();
$filters['brand'] = $brand;
$filters['color'] = $color;
$filters['size'] = $size;
循环遍历滤镜数组以使参数字符串
$anchor_tag_params = "";
foreach($filters as $key => $value)
{
$anchor_tag_params .= "&".$key."=".$value;
}
,然后将params字符串附加到锚标记href
$anchor_tag_html = '<a href="'.$_SERVER['PHP_SELF'].'?currentpage='.$nextpage.$anchor_tag_params.'"></a>';