• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Blätternavigation beschränken/begrenzen

smsterminal

Mitglied
hi leutz hab ne zahlennavigation läuft gut, wie kann ich es aber begrenzen das es keine lange latte wird 1 2 3 4 5 6 7 8 9 10 11 usw, sonder daas bei 20seiten schluss ist und dann über pfeile oder weiter/zurück navigiere << < 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 > >>

hier der code

PHP:
<style type="text/css">
/* By DarkDragon1993 */
ul.pageMenu {
    padding: 0px;
    margin: 0px auto;
}
ul.pageMenu li {
    list-style: none;
    display: inline;
}
ul.pageMenu li a:link, ul.pageMenu li a:visited {
    color: #000000;
    text-decoration: none;
    padding: 3px 7px 3px 7px;
    background: #6699ff;
    border: 1px solid black;
}
ul.pageMenu li a:hover, ul.pageMenu li a.active {
    color: #3366ff;
    background: #FFFFFF;
    text-decoration: underline;
}
</style>
<?php
    $daten = file("zitate.txt");
    
    $daten_pro_seite = 20;
    
    $seitenzahl = ((isset($_GET["seitenzahl"])) ? $_GET["seitenzahl"] : 0);
    
    $fortlaufende_nummer = 0;
    
    echo "<ul class='pageMenu'>";
    if( $seitenzahl != 0 )
        echo "<li><a href=\"?seitenzahl=" . ( $seitenzahl - $daten_pro_seite ) . "\">Zur&uuml;ck</a></li>";
    for ($zaehler = 0; $zaehler < count($daten); $zaehler = $zaehler + $daten_pro_seite) {
        $fortlaufende_nummer++;
        echo "<li><a " . ( ( $seitenzahl == $zaehler ) ? "class='active' " : "" ) .
            "href=\"?seitenzahl=$zaehler\">$fortlaufende_nummer</a></li>";
    }
    if( $seitenzahl < count( $daten ) - $daten_pro_seite )
        echo "<li><a href=\"?seitenzahl=" . ( $seitenzahl + $daten_pro_seite ) . "\">Weiter</a></li>";
    echo "</ul>";
    
    for ($zaehler = $seitenzahl; $zaehler < ($seitenzahl + $daten_pro_seite); $zaehler++) {
        echo "<p>" . $daten[$zaehler] . "</p>\n";
    }
?>
 
Werbung:
Sowas?

PHP:
<?php

/**
 * Pagination helper
 *
 * @version 2010-Dec-30
 *
 * @author Marc Ermshaus <http://www.ermshaus.org/>
 * @license GNU General Public License v3 <http://www.gnu.org/licenses/gpl.html>
 */
class Paginator
{
    /** @var int */
    protected $entriesPerPage;

    /** @var int */
    protected $paginatorEntriesPerSide;

    /**
     *
     * @param int $entriesPerPage
     * @param int $maxPaginatorEntries
     */
    public function __construct($entriesPerPage = 10, $maxPaginatorEntries = 7)
    {
        $entriesPerPage      = (int) $entriesPerPage;
        $maxPaginatorEntries = (int) $maxPaginatorEntries;

        if (!($maxPaginatorEntries & 1)) {
            throw new Exception(
                    'maxPaginatorEntries needs to be an odd number');
        }

        $this->entriesPerPage          = $entriesPerPage;
        $this->paginatorEntriesPerSide = (int) ($maxPaginatorEntries - 1) / 2;
    }

    /**
     *
     * @param int $entryCount
     * @param int $activePage
     * @return array
     */
    public function getPagination($entryCount, $activePage)
    {
        $ret = array();
        $pageCount = ceil($entryCount / $this->entriesPerPage);

        $before = 0;
        $after  = 0;

        if ($pageCount > 2 * $this->paginatorEntriesPerSide + 1) {
            /* We cannot display every element, display range needs to be
               calculated */
            $before = $this->paginatorEntriesPerSide;
            $after  = $this->paginatorEntriesPerSide;

            if ($activePage - $before < 1) {
                $d = abs($activePage - $before) + 1;
                $after  += $d;
                $before -= $d;
            } else if ($activePage + $after > $pageCount) {
                $d = ($activePage + $after) - $pageCount;
                $after  -= $d;
                $before += $d;
            }
        } else {
            /* We can display every element */
            $before = $activePage - 1;
            $after  = $pageCount - $activePage;
        }

        // Do we need a "jump to first" button?
        if ($activePage - $before > 1) {
            $ret[] = '<<';
        }

        // Do we need a "previous" button?
        if ($activePage > 1) {
            $ret[] = '<';
        }

        if ($before > 0) {
            $ret = array_merge($ret, range($activePage - $before,
                    $activePage - 1));
        }

        // Active page
        $ret[] = '*' . $activePage;

        if ($after > 0) {
            $ret = array_merge($ret, range($activePage + 1,
                    $activePage + $after));
        }

        // Do we need a "next" button?
        if ($activePage < $pageCount) {
            $ret[] = '>';
        }

        // Do we need a "jump to last" button?
        if ($activePage + $after < $pageCount) {
            $ret[] = '>>';
        }

        return $ret;
    }
}



$entryCount     = 250;
$entriesPerPage = 10;
$pageCount      = ceil($entryCount / $entriesPerPage);

$p = new Paginator(10, 9);

for ($activePage = 1; $activePage <= $pageCount; $activePage++) {
    printf("%s<br>\n", implode(' ', $p->getPagination($entryCount,
            $activePage)));
}

Das Sternchen markiert jeweils das aktive Element.

Code:
*1 2 3 4 5 6 7 8 9 > >>
< 1 *2 3 4 5 6 7 8 9 > >>
< 1 2 *3 4 5 6 7 8 9 > >>
< 1 2 3 *4 5 6 7 8 9 > >>
< 1 2 3 4 *5 6 7 8 9 > >>
<< < 2 3 4 5 *6 7 8 9 10 > >>
<< < 3 4 5 6 *7 8 9 10 11 > >>
<< < 4 5 6 7 *8 9 10 11 12 > >>
<< < 5 6 7 8 *9 10 11 12 13 > >>
<< < 6 7 8 9 *10 11 12 13 14 > >>
<< < 7 8 9 10 *11 12 13 14 15 > >>
<< < 8 9 10 11 *12 13 14 15 16 > >>
<< < 9 10 11 12 *13 14 15 16 17 > >>
<< < 10 11 12 13 *14 15 16 17 18 > >>
<< < 11 12 13 14 *15 16 17 18 19 > >>
<< < 12 13 14 15 *16 17 18 19 20 > >>
<< < 13 14 15 16 *17 18 19 20 21 > >>
<< < 14 15 16 17 *18 19 20 21 22 > >>
<< < 15 16 17 18 *19 20 21 22 23 > >>
<< < 16 17 18 19 *20 21 22 23 24 > >>
<< < 17 18 19 20 *21 22 23 24 25 >
<< < 17 18 19 20 21 *22 23 24 25 >
<< < 17 18 19 20 21 22 *23 24 25 >
<< < 17 18 19 20 21 22 23 *24 25 >
<< < 17 18 19 20 21 22 23 24 *25

Edit: Weitere Ansätze auch hier:

- http://www.php.de/scriptboerse/74048-paginator-algorithmus.html
 
Werbung:
Zurück
Oben