我有一个分页类,适用于像
这样的网址http://localmachine/c/category-name
分页链接看起来像
http://localmachine/c/category-name/page-2
但是,如果我将另一个参数添加到基本网址,如:
http://localmachine/c/category-name/brand-Coca+Cola
分页的链接将是
http://localmachine/brand/Coca+Cola/c/category-name/page-2
如何解决此问题以显示分页链接,如
http://localmachine/c/category-name/brand/Coca+Cola/page-2
这是我的分页功能,显示分页链接。
function buildTrail($param = ""){
if(is_array($param)){
foreach($param as $a => $b){
if($a != "page"){
$url .= $a . "/" . urlencode($b).'/';
}else{
$url .= '';
}
}
} else {
$url = $param;
}
//$location = basename($_SERVER['REQUEST_URI']);
$trail = "";
if($this->getPages() > 1){
if($this->getFrom() > 1){
$trail .= "<a href='" . WEBSITE . "/". $url . "page-" . $this->getPrevious() . "'>«</a>\n ";
}
if($this->getFrom() < 10 && $this->getPages() > 10){
for ($i = 1; $i <= 10; $i++){
$trail .= "<a class='". ($i == $this->getFrom() ? "selected" : "links") . "' href='" . WEBSITE . "/". $url . "page-" . $i . "'>" . $i . "</a>\n ";
}
} elseif($this->getFrom() < 10 && $this->getPages() < 10){
for ($i = 1; $i <= $this->getPages(); $i++){
$trail .= "<a class='". ($i == $this->getFrom() ? "selected" : "links") . "' href='" . WEBSITE . "/". $url . "page-" . $i . "'>" . $i . "</a>\n ";
}
}elseif ($this->getFrom() >= 10 && $this->getFrom() <= ($this->getPages() - 5) ){
for ($i = ($this->getFrom() - 5); $i <= ($this->getFrom() + 5); $i ++){
$trail .= "<a class='". ($i == $this->getFrom() ? "selected" : "links") . "' href='" . WEBSITE . "/". $url . "page-" . $i . "'>" . $i . "</a>\n ";
}
} else {
for ($i = ($this->getPages() - 9); $i <= $this->getPages(); $i ++){
$trail .= "<a class='". ($i == $this->getFrom() ? "selected" : "links") . "' href='" . WEBSITE . "/". $url . "page-" . $i . "'>" . $i . "</a>\n ";
}
}
if($this->getFrom() < $this->getPages()){
$trail .= "<a href='" . WEBSITE . "/". $url . "page-" . $this->getNext() . "'>»</a>\n ";
}
}
return $trail;
}
答案 0 :(得分:1)
我会这样做:
// Create array with preferred order of parameters first.
// Make sure to list all possible params here excluding page
$preferedOrder = array('c', 'brand');
$paramsArray = array();
foreach ($preferedOrder as $v) {
// Based on the type of parameter combine it with / or - . Put everything to array.
if (isset($param[$v])) {
if ($v == 'c') {
$paramsArray[] = $v . '/' . urlencode($param[$v]);
} else {
$paramsArray[] = $v . '-' . urlencode($param[$v]);
}
}
}
// Implode array with '/'
$url = implode('/', $paramsArray);
在这种情况下,所有参数都将按所需顺序排列,页面将不在那里。