Frage

  

<< 1 2 3 4 ... 15 16 17 ... 47 48 49 50 >>

     

<< 1 2 3 4 5 6 7 ... 47 48 49 50 >>

     

<< 1 2 3 4 ... 44 45 46 47 48 49 50 >>

(die fett ist die ausgewählte Seite)

Gibt es eine Cleaver Logik gibt, die Paginierung wie diese Skalierung schafft? Ich habe eine dieser erstellt, bevor aber es endete als ein Durcheinander der Logik Aussagen auf.

Die Sprache, die ich dies in jetzt PHP mache, aber wenn Sie Beispiele oder Hinweise für jede Sprache haben, würde es geschätzt.

Durch die Skalierung ich meine, wenn es nur ein paar Seiten. Die Paginierung zeigt dies.

  

<< 1 2 3 4 5 6 7 >>

Da die Anzahl der Seiten wachsen bis zu einem gewissen Punkt, stoppt die Paginierung alle Zahlen zeigt, und startet sie bis zu splitten.

  

<< 1 2 3 4 ... 47 48 49 50 >>

     

<< 1 2 3 4 5 6 ... 47 48 49 50 >>

     

<< 1 2 3 4 5 6 7 8 ... 47 48 49 50 >>

     

<< 1 2 3 4 .. 7 8 9 ... 47 48 49 50 >>

     

<< 1 2 3 4 .. 15 16 17 ... 47 48 49 50 >>

     

<< 1 2 3 4 ... 44 45 46 47 48 49 50 >>

     

<< 1 2 3 4 ... 47 48 49 50 >>

(beachten Sie, dass die tatsächlichen Zahlen und wie viele es zeigt vor und nach ist nicht relevant)

War es hilfreich?

Lösung

Sorry für die Klecks-Code, aber hier geht. Hoffentlich werden die Kommentare sind genug, um Ihnen zu sagen, wie es funktioniert -. Wenn ein Kommentar hinterlassen und ich könnte etwas mehr hinzufügen

    /**
     * Get a spread of pages, for when there are too many to list in a single <select>
     * Adapted from phpMyAdmin common.lib.php PMA_pageselector function
     *
     * @param integer total number of items
     * @param integer the current page
     * @param integer the total number of pages
     * @param integer the number of pages below which all pages should be listed
     * @param integer the number of pages to show at the start
     * @param integer the number of pages to show at the end
     * @param integer how often to show pages, as a percentage
     * @param integer the number to show around the current page
     */
    protected function pages($rows, $pageNow = 1, $nbTotalPage = 1, $showAll = 200, $sliceStart = 5, $sliceEnd = 5, $percent = 20, $range = 10)
    {
        if ($nbTotalPage < $showAll)
            return range(1, $nbTotalPage);

        // Always show the first $sliceStart pages
        $pages = range(1, $sliceStart);

        // Always show last $sliceStart pages
        for ($i = $nbTotalPage - $sliceEnd; $i <= $nbTotalPage; $i++)
            $pages[] = $i;

        $i = $sliceStart;
        $x = $nbTotalPage - $sliceEnd;
        $met_boundary = false;
        while ($i <= $x)
        {
            if ($i >= ($pageNow - $range) && $i <= ($pageNow + $range))
            {
                // If our pageselector comes near the current page, we use 1
                // counter increments
                $i++;
                $met_boundary = true;
            }
            else
            {
                // We add the percentate increment to our current page to
                // hop to the next one in range
                $i = $i + floor($nbTotalPage / $percent);

                // Make sure that we do not cross our boundaries.
                if ($i > ($pageNow - $range) && !$met_boundary)
                  $i = $pageNow - $range;
            }

            if ($i > 0 && $i <= $x)
                $pages[] = $i;
        }

        // Since because of ellipsing of the current page some numbers may be double,
        // we unify our array:
        sort($pages);
        return array_unique($pages);
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top