0
public function paging($limit,$numRows,$page){

    $allPages       = ceil($numRows / $limit);

    $start          = ($page - 1) * $limit;

    $querystring = "";

    foreach ($_GET as $key => $value) {
        if ($key != "page") $paginHTML .= "$key=$value&";
    }

    $paginHTML = "";

    $paginHTML .= "Pages: ";

    for ($i = 1; $i <= $allPages; $i++) {
        $paginHTML .= "<a " . ($i == $page ? "class=\"selected\" " : "");
        $paginHTML .= "href=\"?{$querystring}page=$i";
        $paginHTML .= "\">$i</a> ";
    }

    return $paginHTML;

 }

これは、MVC パターンの実装のための私のページネーション関数です。しかし、この関数は、次と前のリンクを表示しませんでした。

コントローラーへの前と次のリンクを含むページネーション用の HTML 変数を返す必要があります。

これらの変数をコントローラーからこの関数に渡しました。

$limit,$numRows,$page

上記の関数への次および前のリンクを取得するにはどうすればよいですか。

4

3 に答える 3

0

これは、現在のページの両側に最大 5 つの次および前のリンクを表示する必要があります。

リンクを別の形式にする場合は、関数を渡します。

私はこの非常に限られたテストのみを行い、クラスから引き出されたので、ここでハードコードされた値を $this への参照のパラメーターに置き換えることができます

     function get_paging_links($result_count, callable $format_function=null)
     {
         if(!$format_function){
             $format_function = function($url,$page,$qs){
                 $qs['page'] = $page;
                 return $url.'?'.http_build_query($qs);
             };
         }

        $per_page = 5;
        $total_pages = ceil($result_count / $per_page);
        $return = [];


        parse_str($_SERVER['QUERY_STRING'],$qs);

        $url = $_SERVER['REQUEST_URI'];

        //Remove existing query_string.
        if($pos = strpos($url,'?')){
            $url = substr($url,0,$pos);
        }

        $current_page = isset($qs['page']) ? $qs['page'] : 1;

        $previous = $current_page -1;

        if ($previous) {
            $return['previous'] = $format_function($url,$previous,$qs);
        }

        for($i = max(1,$current_page-5); $i <= min($total_pages,$current_page+5); $i++) {
            $return["$i"] = $format_function($url,$i,$qs);
        }

        $next_page = $current_page + 1;

        if ($next_page < $total_pages){
            $return['next'] = $format_function($url,$next_page,$qs);
        }

        return $return;
     }
于 2014-01-09T23:11:23.543 に答える
0

ループ自体にいくつかの条件を追加しました。

彼らがうまくいくことを願っています。

次のことを試してください。

<?php
public function paging($limit,$numRows,$page){

    $allPages       = ceil($numRows / $limit);

    $start          = ($page - 1) * $limit;

    $querystring = "";

    foreach ($_GET as $key => $value) {
        if ($key != "page") $paginHTML .= "$key=$value&amp;";
    }

    $paginHTML = "";

    $paginHTML .= "Pages: ";

    for ($i = 1; $i <= $allPages; $i++) {
        if ($i>1) {
                    $prev = $i-1;
                    $paginHTML .= '<a href="?'.$querystring.'page='.$prev'">Previous</a>';
                }
                $paginHTML .= "<a " . ($i == $page ? "class=\"selected\" " : "");
        $paginHTML .= "href=\"?{$querystring}page=$i";
        $paginHTML .= "\">$i</a> ";
                if ($i<$allPages) {
                    $next = $i+1;
                    $paginHTML .= '<a href="?'.$querystring.'page='.$next'">Next</a>';
                }
    }

    return $paginHTML;

 }
 ?>
于 2013-10-01T17:05:13.530 に答える