具有多个参数的分页问题

时间:2014-08-28 10:45:30

标签: php html mysql pdo pagination

我有一个分页类,适用于像

这样的网址
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() . "'>&laquo;</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() . "'>&raquo;</a>\n ";
        }
    }

    return $trail;
}

1 个答案:

答案 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);

在这种情况下,所有参数都将按所需顺序排列,页面将不在那里。