dbCF.de

rerun.exe automatisch beim Start von Windows beenden

Ich habe mir vor einigen Monaten einen Laptop aus dem Hause TUXEDO Computers zugelegt. Auf dem Rechner läuft Windows 10 und manchmal auch eine rerun.exe, welche die CPU bis zu 30% auslastet. Da mich das ziemlich nervt, habe ich ein winziges Programm geschrieben, das beim Start von Windows mit gestartet wird und schaut, ob die rerun.exe mal wieder aktiv ist. Wenn dem so ist, dann wird sie beendet und die Suche hat ein Ende. Nach spätestens einer Minute wird die Suche so oder so beendet.

Die rerun.exe gehört übrigens zu dem Control Center, welches man installieren kann. TUXEDO nimmt als Grundlage die Laptops von Clevo. Das heißt, das gleiche Problem mit der rerun.exe kann auch bei den Laptops von Schenker Technologies auftreten.

using System;
using System.Diagnostics;
using System.Threading;

namespace killrerun
{
    class Program
    {
        static void Main(string[] args)
        {
            var exitOn = DateTime.Now.AddMinutes(1);
            while (DateTime.Now < exitOn)
            {
                try
                {
                    foreach (var process in Process.GetProcessesByName("rerun"))
                    {
                        process.Kill();
                        Process.GetCurrentProcess().Kill();
                    }
                }
                catch
                {
                    // Who cares...
                }

                Thread.Sleep(100);
            }
        }
    }
}

Wer keinen .NET Compiler zur Hand hat, der kann sich das Programm auch hier herunterladen. “Getestet” habe ich es mit .NET SDK 4.7 auf einem Windows 10 Pro 64 Bit.

Posted in Dev

Bilder in Piwigo-Galerie neu nummerieren

Als Galerie und für die Verwaltung meiner Bilder nutze ich Piwigo. Mir gelingt es leider immer wieder, dass ich vergesse die Dateien vor dem Hochladen durchzunummerieren. Oder ich habe sie umbenannt und lösche im Nachhinein welche, womit sich Lücken ergeben.

Die einfachste Lösung das zu beheben (geht man davon aus, dass die originalen Dateinamen alphabetisch sind), ist das nachfolgende SQL-Query anzupassen und abzuschicken. Es wird davon ausgegangen, dass die Tabellen alle den Prefix “piwigo_” haben (wurde bei der Installation festgelegt). Nun muss man nur noch in Zeile 11 die ID der Kategorie angeben, diese findet sich in der URL zur Kategorie, siehe Beispiel. Zusätzlich sollte man sich noch für eine fixe (Zeile 16) oder variable (Zeile 15) Länge der Nummerierung entscheiden. Bei der variablen Länge kann noch definiert werden, wie lang die Zahl denn sein soll. Abschließend den Query ausführen und über die saubere Nummerierung freuen.

Hier nun das kurze Query:

SET @rownum=0;
UPDATE
  `piwigo_images` t,
  (
    SELECT @rownum:=@rownum+1 rownum, `piwigo_images`.`id`
    FROM `piwigo_images`
    WHERE `id`
      IN (
        SELECT `image_id`
        FROM `piwigo_image_category`
        WHERE `category_id` = XXX -- Siehe URL, z. B. https://dbCF.de/gallery/index.php?/category/13
      )
    ORDER BY `file` ASC
  ) r
SET t.`name` = LPAD(r.rownum, 3, '0') -- Die 3 setzt die Länge der Zahl, z B. "008, 009, 010".
-- SET t.`name` = r.rownum -- Für variable Länge nutzen z. B. "8, 9, 10".
WHERE t.`id` = r.`id`;
Posted in Dev

Pagination demo

Here you can see some possible combinations, realisable with the script for paging.

To show you how many things you can adjust, some values will be set to a random value.

Links for first page, previous page, first three pages, page before and behind current, last three pages, next and last page
[1], 2, 3 ___ 16, 17, 18NextLast

".str_replace('<', '&lt;', $pagination=new Pagination(0, 54);
$pagination->setLinkHref('https://dbCF.de/blog/pagination-demo/?page=');
$pagination->setDelimiter3(', ');
$pagination->setDelimiter4(' ___ ');
$pagination->setLinkMore(' style="font-size:23px;"');
$pagination->setLinkFirstLastText('First', 'Last');
$pagination->setShowActiveLink('false');
echo $pagination->create();)."

Links for previous page, first three pages, page before and behind current, last three pages and next page
[1], >2<, >3< ___ >16<, >17<, >18<Next

".str_replace('<', '&lt;', $pagination=new Pagination(0, 54);
$pagination->setLinkHref('https://dbCF.de/blog/pagination-demo/?page=');
$pagination->setDelimiter3(', ');
$pagination->setDelimiter4(' ___ ');
$pagination->setLinkActiveMore(' style="font-size:23px;"');
$pagination->setLinkBracket('>', '<');
$pagination->setLinkNextPrevMore(' style="color:green; font-weight:bold;"');
$pagination->setShowFirstLast(false);
echo $pagination->create();)."

Links for first page, first three pages, page before and behind current, last three pages and last page
[1]23161718 Last

".str_replace('<', '&lt;', $pagination=new Pagination(0, 54);
$pagination->setLinkHref('https://dbCF.de/blog/pagination-demo/?page=');
$pagination->setDelimiter1(' ');
$pagination->setDelimiter4(' ... ');
$pagination->setLinkActiveMore(' style="font-size:23px;"');
$pagination->setLinkNextPrevText('Next', 'Previous');
$pagination->setShowActiveLink('false');
$pagination->setShowNextPrev(false);
echo $pagination->create();)."

Links for first three pages, page before and behind current and last three pages
[1]23161718

".str_replace('<', '&lt;', $pagination=new Pagination(0, 54);
$pagination->setLinkHref('https://dbCF.de/blog/pagination-demo/?page=');
$pagination->setLinkNextPrevMore(' style="color:green; font-weight:bold;"');
$pagination->setShowActiveLink('false');
$pagination->setShowFirstLast(false);
$pagination->setShowNextPrev(false);
echo $pagination->create();)."

Links for first page, previous page, page before and behind current, next and last page
>1<23Wanna see the next page? Click here!Last

".str_replace('<', '&lt;', $pagination=new Pagination(0, 54);
$pagination->setLinkHref('https://dbCF.de/blog/pagination-demo/?page=');
$pagination->setDelimiter2(' -- ');
$pagination->setLinkActiveBracket('>', '<');
$pagination->setLinkActiveMore(' style="font-size:23px;"');
$pagination->setLinkNextPrevText('Wanna see the next page? Click here!', 'Check out the previous page here!');
$pagination->setLinkNextPrevMore(' style="color:green; font-weight:bold;"');
$pagination->setLinkFirstLastText('First', 'Last');
$pagination->setShowOuter(false);
echo $pagination->create();)."

Links for previous page, page before and behind current and next last page
[1]{2}{3}Next

".str_replace('<', '&lt;', $pagination=new Pagination(0, 54);
$pagination->setLinkHref('https://dbCF.de/blog/pagination-demo/?page=');
$pagination->setDelimiter1(' -- ');
$pagination->setDelimiter2(' ');
$pagination->setDelimiter4(' ... ');
$pagination->setLinkBracket(' {', '} ');
$pagination->setLinkNextPrevText('Next', 'Previous');
$pagination->setLinkNextPrevMore(' style="color:green; font-weight:bold;"');
$pagination->setShowActiveLink('false');
$pagination->setShowOuter(false);
$pagination->setShowFirstLast(false);
echo $pagination->create();)."

Links for first page, page before and behind current and last page
[1], 2, 3Last

".str_replace('<', '&lt;', $pagination=new Pagination(0, 54);
$pagination->setLinkHref('https://dbCF.de/blog/pagination-demo/?page=');
$pagination->setDelimiter1(' ');
$pagination->setDelimiter3(', ');
$pagination->setLinkActiveMore(' style="font-size:23px;"');
$pagination->setLinkNextPrevText('Wanna see the next page? Click here!', 'Check out the previous page here!');
$pagination->setShowOuter(false);
$pagination->setShowNextPrev(false);
echo $pagination->create();)."

Links for page before and behind current
{1}{2}{3} ___

".str_replace('<', '&lt;', $pagination=new Pagination(0, 54);
$pagination->setLinkHref('https://dbCF.de/blog/pagination-demo/?page=');
$pagination->setDelimiter1(' ');
$pagination->setDelimiter2(' ');
$pagination->setDelimiter4(' ___ ');
$pagination->setLinkActiveBracket(' {', '} ');
$pagination->setLinkActiveMore(' style="font-size:23px;"');
$pagination->setLinkBracket(' {', '} ');
$pagination->setLinkMore(' style="font-size:23px;"');
$pagination->setLinkNextPrevText('Next', 'Previous');
$pagination->setLinkNextPrevMore(' style="color:green; font-weight:bold;"');
$pagination->setLinkFirstLastText('First', 'Last');
$pagination->setShowOuter(false);
$pagination->setShowFirstLast(false);
$pagination->setShowNextPrev(false);
echo $pagination->create();)."

Links for first page, previous page, jede Seite einzeln, next and last page
[1]{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}{16}{17}{18} NextLast

".str_replace('<', '&lt;', $pagination=new Pagination(0, 54);
$pagination->setLinkHref('https://dbCF.de/blog/pagination-demo/?page=');
$pagination->setDelimiter2(' ');
$pagination->setLinkBracket(' {', '} ');
$pagination->setLinkMore(' style="font-size:23px;"');
$pagination->setLinkNextPrevMore(' style="color:green; font-weight:bold;"');
$pagination->setLinkFirstLastText('First', 'Last');
$pagination->setShowActiveLink('false');
$pagination->setShowContinuous(true);
echo $pagination->create();)."

Links for previous page, every single page and next page
[1]>2<>3<>4<>5<>6<>7<>8<>9<>10<>11<>12<>13<>14<>15<>16<>17<>18< Next

".str_replace('<', '&lt;', $pagination=new Pagination(0, 54);
$pagination->setLinkHref('https://dbCF.de/blog/pagination-demo/?page=');
$pagination->setDelimiter2(' ');
$pagination->setDelimiter3(' - ');
$pagination->setDelimiter4(' ___ ');
$pagination->setLinkActiveBracket(' [', '] ');
$pagination->setLinkBracket('>', '<');
$pagination->setLinkMore(' style="font-size:23px;"');
$pagination->setLinkNextPrevMore(' style="color:green; font-weight:bold;"');
$pagination->setLinkFirstLastText('Secret information on page one!!', 'Nothin too see here but the last page');
$pagination->setShowContinuous(true);
$pagination->setShowFirstLast(false);
echo $pagination->create();)."

Links for erste Seite, every single page and last page
[1][2][3][4][5][6][7][8][9][10][11][12][13][14][15][16][17][18]Last

".str_replace('<', '&lt;', $pagination=new Pagination(0, 54);
$pagination->setLinkHref('https://dbCF.de/blog/pagination-demo/?page=');
$pagination->setDelimiter2(' ');
$pagination->setLinkActiveMore(' style="font-size:23px;"');
$pagination->setLinkBracket(' [', '] ');
$pagination->setLinkFirstLastText('First', 'Last');
$pagination->setShowActiveLink('false');
$pagination->setShowContinuous(true);
$pagination->setShowNextPrev(false);
echo $pagination->create();)."

Links for every single page
>1<{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}{16}{17}{18}

".str_replace('<', '&lt;', $pagination=new Pagination(0, 54);
$pagination->setLinkHref('https://dbCF.de/blog/pagination-demo/?page=');
$pagination->setDelimiter2(' -- ');
$pagination->setDelimiter3(' - ');
$pagination->setDelimiter4(' ___ ');
$pagination->setLinkActiveBracket('>', '<');
$pagination->setLinkBracket(' {', '} ');
$pagination->setLinkMore(' style="font-size:23px;"');
$pagination->setLinkNextPrevText('Next', 'Previous');
$pagination->setLinkFirstLastText('Secret information on page one!!', 'Nothin too see here but the last page');
$pagination->setShowContinuous(true);
$pagination->setShowFirstLast(false);
$pagination->setShowNextPrev(false);
echo $pagination->create();)."
Posted in Dev

Blättern demo

Hier sind einige der möglichen Varianten aufgezeigt, die mit dem Skript zum Blättern realisiert werden können.

Um zu zeigen, was noch so alles eingestellt werden kann, werden einige Einstellungen per Zufall ausgewählt und auf die jeweilige Anzeige angewandt.

Links für erste Seite, vorige Seite, erste drei Seiten, Seite vor und hinter aktueller, letzten drei Seiten, nächste Seite und letzte Seite
{1}[2][3][16][17][18]Weiter Machst Du Seite ganz hinten

".str_replace('<', '&lt;', $blaettern=new Blaettern(0, 54);
$blaettern->setLinkHref('https://dbCF.de/blog/blaettern-demo/?page=');
$blaettern->setDelimiter1(' ');
$blaettern->setLinkActiveBracket(' {', '} ');
$blaettern->setLinkBracket(' [', '] ');
$blaettern->setLinkNextPrevText('Weiter', 'Zurück');
$blaettern->setLinkNextPrevMore(' style="color:green; font-weight:bold;"');
$blaettern->setLinkFirstLastText('Machst Du Seite 1', 'Machst Du Seite ganz hinten');
$blaettern->setShowActiveLink('false');
echo $blaettern->create();)."

Links für vorige Seite, erste drei Seiten, Seite vor und hinter aktueller, letzten drei Seiten und nächste Seite
[1]23161718 Weiter

".str_replace('<', '&lt;', $blaettern=new Blaettern(0, 54);
$blaettern->setLinkHref('https://dbCF.de/blog/blaettern-demo/?page=');
$blaettern->setDelimiter1(' -- ');
$blaettern->setDelimiter2(' ');
$blaettern->setLinkActiveBracket(' [', '] ');
$blaettern->setLinkActiveMore(' style="font-size:23px;"');
$blaettern->setLinkNextPrevMore(' style="color:green; font-weight:bold;"');
$blaettern->setShowActiveLink('false');
$blaettern->setShowFirstLast(false);
echo $blaettern->create();)."

Links für erste Seite und Seite vor und hinter aktueller sowie letzte Seite
{1}>2<>3<>16<>17<>18<Ende

".str_replace('<', '&lt;', $blaettern=new Blaettern(0, 54);
$blaettern->setLinkHref('https://dbCF.de/blog/blaettern-demo/?page=');
$blaettern->setDelimiter1(' -- ');
$blaettern->setDelimiter4(' ... ');
$blaettern->setLinkActiveBracket(' {', '} ');
$blaettern->setLinkBracket('>', '<');
$blaettern->setLinkNextPrevText('Machst Du Seite weiter!', 'Machst Du Seite rückwärts!');
$blaettern->setLinkNextPrevMore(' style="color:green; font-weight:bold;"');
$blaettern->setLinkFirstLastText('Anfang', 'Ende');
$blaettern->setShowActiveLink('false');
$blaettern->setShowNextPrev(false);
echo $blaettern->create();)."

Links für Seite vor und hinter aktueller
[1]23161718

".str_replace('<', '&lt;', $blaettern=new Blaettern(0, 54);
$blaettern->setLinkHref('https://dbCF.de/blog/blaettern-demo/?page=');
$blaettern->setDelimiter2(' ');
$blaettern->setLinkActiveBracket(' [', '] ');
$blaettern->setShowFirstLast(false);
$blaettern->setShowNextPrev(false);
echo $blaettern->create();)."

Links für erste Seite, vorige Seite, Seite vor und hinter aktueller, nächste Seite und letzte Seite
[1][2][3]WeiterMachst Du Seite ganz hinten

".str_replace('<', '&lt;', $blaettern=new Blaettern(0, 54);
$blaettern->setLinkHref('https://dbCF.de/blog/blaettern-demo/?page=');
$blaettern->setDelimiter2(' ');
$blaettern->setDelimiter3(' - ');
$blaettern->setLinkActiveMore(' style="font-size:23px;"');
$blaettern->setLinkBracket(' [', '] ');
$blaettern->setLinkFirstLastText('Machst Du Seite 1', 'Machst Du Seite ganz hinten');
$blaettern->setShowActiveLink('false');
$blaettern->setShowOuter(false);
echo $blaettern->create();)."

Links für vorige Seite, Seite vor und hinter aktueller sowie nächste Seite
[1], [2], [3]Weiter

".str_replace('<', '&lt;', $blaettern=new Blaettern(0, 54);
$blaettern->setLinkHref('https://dbCF.de/blog/blaettern-demo/?page=');
$blaettern->setDelimiter1(' ');
$blaettern->setDelimiter3(', ');
$blaettern->setDelimiter4(' ... ');
$blaettern->setLinkActiveBracket(' [', '] ');
$blaettern->setLinkBracket(' [', '] ');
$blaettern->setLinkMore(' style="font-size:23px;"');
$blaettern->setLinkNextPrevText('Weiter', 'Zurück');
$blaettern->setShowOuter(false);
$blaettern->setShowFirstLast(false);
echo $blaettern->create();)."

Links für erste Seite, Seite vor und hinter aktueller sowie letzte Seite
>1<23 … — Ende

".str_replace('<', '&lt;', $blaettern=new Blaettern(0, 54);
$blaettern->setLinkHref('https://dbCF.de/blog/blaettern-demo/?page=');
$blaettern->setDelimiter1(' -- ');
$blaettern->setDelimiter2(' ');
$blaettern->setDelimiter3(' - ');
$blaettern->setDelimiter4(' ... ');
$blaettern->setLinkActiveBracket('>', '<');
$blaettern->setLinkNextPrevText('Machst Du Seite weiter!', 'Machst Du Seite rückwärts!');
$blaettern->setLinkNextPrevMore(' style="color:green; font-weight:bold;"');
$blaettern->setShowOuter(false);
$blaettern->setShowNextPrev(false);
echo $blaettern->create();)."

Links für Seite vor und hinter aktueller
[1], >2<, >3< ___

".str_replace('<', '&lt;', $blaettern=new Blaettern(0, 54);
$blaettern->setLinkHref('https://dbCF.de/blog/blaettern-demo/?page=');
$blaettern->setDelimiter1(' ');
$blaettern->setDelimiter2(' -- ');
$blaettern->setDelimiter3(', ');
$blaettern->setDelimiter4(' ___ ');
$blaettern->setLinkActiveMore(' style="font-size:23px;"');
$blaettern->setLinkBracket('>', '<');
$blaettern->setLinkFirstLastText('Anfang', 'Ende');
$blaettern->setShowOuter(false);
$blaettern->setShowFirstLast(false);
$blaettern->setShowNextPrev(false);
echo $blaettern->create();)."

Links für erste Seite, vorige Seite, jede Seite einzeln, nächste Seite und letzte Seite
[1]23456789101112131415161718WeiterEnde

".str_replace('<', '&lt;', $blaettern=new Blaettern(0, 54);
$blaettern->setLinkHref('https://dbCF.de/blog/blaettern-demo/?page=');
$blaettern->setDelimiter4(' ___ ');
$blaettern->setLinkActiveMore(' style="font-size:23px;"');
$blaettern->setLinkNextPrevMore(' style="color:green; font-weight:bold;"');
$blaettern->setLinkFirstLastText('Anfang', 'Ende');
$blaettern->setShowActiveLink('false');
$blaettern->setShowContinuous(true);
echo $blaettern->create();)."

Links für vorige Seite, jede Seite einzeln sowie nächste Seite
{1}23456789101112131415161718Machst Du Seite weiter!

".str_replace('<', '&lt;', $blaettern=new Blaettern(0, 54);
$blaettern->setLinkHref('https://dbCF.de/blog/blaettern-demo/?page=');
$blaettern->setDelimiter1(' ');
$blaettern->setDelimiter3(' - ');
$blaettern->setLinkActiveBracket(' {', '} ');
$blaettern->setLinkActiveMore(' style="font-size:23px;"');
$blaettern->setLinkMore(' style="font-size:23px;"');
$blaettern->setLinkNextPrevText('Machst Du Seite weiter!', 'Machst Du Seite rückwärts!');
$blaettern->setLinkNextPrevMore(' style="color:green; font-weight:bold;"');
$blaettern->setShowContinuous(true);
$blaettern->setShowFirstLast(false);
echo $blaettern->create();)."

Links für erste Seite, jede Seite einzeln sowie letzte Seite
{1}23456789101112131415161718Ende

".str_replace('<', '&lt;', $blaettern=new Blaettern(0, 54);
$blaettern->setLinkHref('https://dbCF.de/blog/blaettern-demo/?page=');
$blaettern->setDelimiter3(' - ');
$blaettern->setLinkActiveBracket(' {', '} ');
$blaettern->setLinkActiveMore(' style="font-size:23px;"');
$blaettern->setLinkMore(' style="font-size:23px;"');
$blaettern->setLinkNextPrevMore(' style="color:green; font-weight:bold;"');
$blaettern->setShowContinuous(true);
$blaettern->setShowNextPrev(false);
echo $blaettern->create();)."

Links für jede einzelne Seite
[1]23456789101112131415161718

".str_replace('<', '&lt;', $blaettern=new Blaettern(0, 54);
$blaettern->setLinkHref('https://dbCF.de/blog/blaettern-demo/?page=');
$blaettern->setDelimiter1(' -- ');
$blaettern->setDelimiter2(' -- ');
$blaettern->setDelimiter3(' - ');
$blaettern->setLinkFirstLastText('Anfang', 'Ende');
$blaettern->setShowActiveLink('false');
$blaettern->setShowContinuous(true);
$blaettern->setShowFirstLast(false);
$blaettern->setShowNextPrev(false);
echo $blaettern->create();)."
Posted in Dev

How to use visural-wicket’s BeautyTipBehavior and dots in the component id

When we started to use visural-wicket (version 0.6.5) we experienced some problems with some tool tips. For whatever reason, the JavaScript behavior was not attached to some components. So all you got was the tool tip given from title attribute and that’s it.

The problem was that some ids contain a dot. jQuery interprets the ids as regular expression, so ids like userKey.username were not found.

The solution was to overwrite a method in our own ToolTip class and provide the super call with a component that has an escaped id.

public class ToolTip extends BeautyTipBehavior {
    private static final long serialVersionUID = 1L;

    public ToolTip(IModel<String> tipModel) {
        super(tipModel);
    }

    /*
     * (non-Javadoc)
     *
     * @see com.visural.wicket.behavior.beautytips.BeautyTipBehavior#bind(org.apache.wicket.Component)
     */
    @Override
    public void bind(Component component) {
        final String fakeComponentId = component.getId().replace(".", "\\\\.");
        final Component fakeComponent = new Component(fakeComponentId) {
            private static final long serialVersionUID = 1L;

            @Override
            protected void onRender(MarkupStream markupStream) {}
        };
        fakeComponent.setMarkupId(fakeComponentId);

        super.bind(fakeComponent);
    }
}
Posted in Dev

PHP class for pagination

Need a demonstration?

Some possible combinations are shown on the demo page.

How to use it?

Simply copy the code into a file (or download it here). I will call it pagination.php. Your code should look like this:

<?php
// Include file with code
include_once('pagination.php');

// Get current page
$active_page = !empty($_GET['page']) ? $_GET['page'] : 0;

// Get count of all entries
$result=mysql_query('SELECT COUNT(field) FROM table');
list($entries)=mysql_fetch_row($result);


// Create object, deliver current page and count of all entries
$pagination=new blaettern($active_page, $entries);
// Define url for links
// You could define this within my code and save this call
$pagination->setLinkHref($_SERVER['PHP_SELF'].'?page=');


// Create first list of links and show
echo $pagination->create();


// Do request with limitations (LIMIT)
$result=mysql_query('SELECT field
                     FROM tabelle
                     LIMIT '.($pagination->getEntriesPerPage() * $pagination->getActivePage()).', '.$pagination->getEntriesPerPage());
// Show found data
if (mysql_num_rows($result)>0) {
    while (list($field)=mysql_fetch_row($result)) {
        echo "$field<br />\n";
    }
}
else {
    echo "No data found!\n";
}


// Create second list of links and show
echo $pagination->create();
?>

You should get a list of links which will look similar like this (depends on count of entries and your settings): [1], >2<, >3< ... >32<, >33<, >34< - Next -- Last

What to do with it?

After clicking one of these links you will have a new $active_page. With this number you can e.g. calculate in MySQL a range of results to show (see LIMIT '.($pagination->getEntriesPerPage() * $pagination->getActivePage()).', '.$pagination->getEntriesPerPage()). So you have split the content of a page into many pages in an very easy way.

<?php
/** Function for pagination
* Function that creates a list of links which can be used to browse through a specified count of results
*
* @author Carsten Franke <mail@dbCF.de>
* @link http://dbCF.de/
* @version 1.2.1
* @copyright GPL
*/

// Only used while developing
// error_reporting(E_ALL);

/*
All possible versions
First — Previous – 1, 2, 3 … 6, 7, 8 … 11, 12, 13 – Next — Last
Previous – 1, 2, 3 … 6, 7, 8 … 11, 12, 13 – Next
First – 1, 2, 3 … 6, 7, 8 … 11, 12, 13 – Last
1, 2, 3 … 6, 7, 8 … 11, 12, 13

First — Previous – … 6, 7, 8 … – Next — Last
Previous … 6, 7, 8 … Next
First … 6, 7, 8 … Last
… 6, 7, 8 …

First — Previous – 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 – Next — Last
Previous – 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 – Next
First – 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 – Last
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

Variables for links
Variable Example Output example
$delimiter1 — First — Previous
$delimiter2 – Previous – 1
$delimiter3 , 1, 2, 3
$delimiter4 … 1, 2, 3 … 6, 7, 8

$linkActiveText Page Page 1, Page 2, Page 3
$linkActiveBracketLeft [ 6, [7], 8
$linkActiveBracketRight ] 6, [7], 8
$linkActiveMore style=’font-size:1.2em;’ <a href=’…’ style=’font-size:1.2em;’>

$linkText Page Page 1, Page 2, Page 3
$linkBracketLeft > >1<, >2<, >3<
$linkBracketRight < >1<, >2<, >3<
$linkMore target=’_blank’ <a href=’…’ target=’_blank’>

$linkFirstText First First — Previous
$linkLastText Last Next — Last
$linkFirstLastMore style=’font-family:arial;’ <a href=’…’ style=’font-family:arial;’>

$linkNextText Next Next — Last
$linkPrevText Previous First — Previous
$linkNextPrevMore class=’navigation’ <a href=’…’ class=’navigation’>

$showCount 3 6, 7, 8
$showContinuous true/false true: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
false: depends on $showOuter
$showOuter true/false true: 1, 2, 3 … 6, 7, 8 … 11, 12, 13
false: … 6, 7, 8 …
$showNextPrev true/false true: show Next/Previous, false: don’t show
$showFirstLast true/false true: show First/Last, false: don’t show
$showActiveLink true/false true: 6, [7], 8, false: 6, 8
$showSingleLink true/false true: [1], false: (nothing)

$linkHref news.php?id=$id&page= <a href=’news.php?id=BMW&page=2’>
*/

class Pagination {
/** Creates an object for this class
*
* @access public
* @param (int) $activePage Number of active page; you get it approximately in this way: “$activePage=isset($_GET[‘ap’]) ? $_GET[‘ap’] : 0;”
* @param (int) $entries Count of all results; you get it approximately in this way: “$entries=mysql_num_rows($resource);”
*/
public function __construct($activePage, $entries) {
$this->setActivePage($activePage);
$this->setEntries($entries);
}

/** Creates list of links
*
* @access public
* @return (mixed) Returns generated list of link or false on error
*/
public function create() {
// I’m to lazy to use the long notation so I create some references… :)
$activePage = &$this->activePage;
$entries = &$this->entries;
$entriesPerPage = &$this->entriesPerPage;
$linkCount = &$this->linkCount;
$linkCountSurround = &$this->linkCountSurround;
$showCount = &$this->showCount;
$showContinuous = &$this->showContinuous;
$showOuter = &$this->showOuter;
$showSingleLink = &$this->showSingleLink;
$showActiveLink = &$this->showActiveLink;
$pageNext = &$this->pageNext;
$pagePrev = &$this->pagePrev;
$pageFirst = &$this->pageFirst;
$pageLast = &$this->pageLast;
$links = &$this->links;

// Re-initiate array
$links = array ();

// Calculate count of all possible links
$linkCount = $entries % $entriesPerPage == 0 ? (int)$entries / $entriesPerPage : (int)ceil($entries / $entriesPerPage);

// Calculate how many link will surround the active one
$linkCountSurround = floor($showCount / 2);

// If there will be only one link and the user won’t see it then return empty string
if (($showSingleLink === false || $showActiveLink === false) && $entries <= $showCount) {
$links = ”;
return $links;
}
else if ($showSingleLink === true && $showActiveLink === true && $entries <= $showCount) {
$linkCount = 1;
}

// If it makes sense ($showOuter===true but $linkCount<=$showCount*3) then overwrite $showContinuous
if ($showOuter === true && $linkCount <= $showCount * 3) {
$showContinuous = true;
}

// Check value of active page, reset if needed
if ($linkCount < $activePage) {
$activePage = $linkCount – 1;
} elseif (!is_numeric($activePage) || $activePage < 0) {
$activePage = 0;
}

// Now we calculate number for pages first, last, next and previous
// If one of these pages doesn’t exist the value will be null (not 0!)
$pageNext = $activePage + 1;

if ($pageNext >= $linkCount – 1 && $activePage == $linkCount – 1) {
$pageNext = null;
}
$pagePrev = $activePage – 1;

if ($pagePrev <= 0 && $activePage == 0) {
$pagePrev = null;
}
$pageFirst = 0;

if ($activePage == 0) {
$pageFirst = null;
}
$pageLast = $linkCount – 1;

if ($activePage == $linkCount – 1) {
$pageLast = null;
}

// Iterate through all pages (not give a damn about they will be shown at the end) and store number of page in array
for ($i = 0; $i < $linkCount; $i++) {
$links[] = $i;
}
// Create links from page numbers
$this->_makeLinks();

// If all pages should be show…
// …or count of links is lower than count of links to show, so join links with delimter3 to string
if ($showContinuous === true || $linkCount <= $showCount) {
$this->_addDelimiter3();
} else {
// Or if not all links should be shown…
// …and not the outer
if ($showOuter === false) {
// If active link is one of the outer one, then show them separate
if ($activePage <= $linkCountSurround) {
$links = $this->_getOuterLinks(‘left’);
$this->_addDelimiter3();
$this->_addDelimiter4(false, true);
} elseif ($activePage >= $pageLast – $linkCountSurround) {
$links = $this->_getOuterLinks(‘right’);

$this->_addDelimiter3();
$this->_addDelimiter4(true, false);
}
// Otherwise get the $showCount of relevant links
else {
$links = $this->_getInnerLinks();
$this->_addDelimiter3();
$this->_addDelimiter4(true, true);
}
}
// Or if not all links should be shown…
// …and the outer too
elseif ($showOuter === true) {
// Fetch all possible links
$temp[0] = $this->_getOuterLinks(‘left’);
$temp[1] = $this->_getInnerLinks();
$temp[2] = $this->_getOuterLinks(‘right’);

// Merge all three arrays into one
// No use of array_*-functions cause they destroy the index
$temp2 = $temp[0];

for ($i = 1; $i < 3; $i++) {
foreach ($temp[$i] as $k => $v) {
$temp2[$k] = $v;
}
}
$temp = $temp2;
unset ($temp2);
ksort ($temp);

// Detect successional links (distance to next link is 1) and push into an array
$last_index = 0;
$j = 0;

foreach ($temp as $k => $v) {
if ($k – $last_index > 1) {
$j++;
}

$temp2[$j][] = $v;

$last_index = $k;
}

// Join this new array to string
// No use of functions, cause they would use $this->links
unset ($temp);

for ($i = 0; $i < count($temp2); $i++) {
$temp[] = join($this->delimiter3, $temp2[$i]);
}
$links = join($this->delimiter4, $temp);
}
}

// Add links for Next/Previous and First/Last
$this->_addNextPrev();
$this->_addFirstLast();

return $links;
}

/** Generates a string of the final links from saved page-ids in $links
*
* @access private
*/
private function _makeLinks() {
// I’m to lazy to use the long notation so I create some references… :)
$activePage = &$this->activePage;
$linkHref = &$this->linkHref;
$linkActiveBracketLeft = &$this->linkActiveBracketLeft;
$linkActiveBracketRight = &$this->linkActiveBracketRight;
$linkActiveMore = &$this->linkActiveMore;
$linkActiveText = &$this->linkActiveText;
$linkBracketLeft = &$this->linkBracketLeft;
$linkBracketRight = &$this->linkBracketRight;
$linkMore = &$this->linkMore;
$linkText = &$this->linkText;
$showActiveLink = &$this->showActiveLink;
$links = &$this->links;

for ($i = 0; $i < count($links); $i++) {
$num_link = $i + $this->numberFirstPage;
$num_show = $i + 1;

if ($i == $activePage) {
$links[$i]
= “<a href='{$linkHref}{$num_link}'{$linkActiveMore}>{$linkActiveBracketLeft}{$linkActiveText}{$num_show}{$linkActiveBracketRight}</a>”;
} else {
$links[$i]
= “<a href='{$linkHref}{$num_link}'{$linkMore}>{$linkBracketLeft}{$linkText}{$num_show}{$linkBracketRight}</a>”;
}
}

// Now we hide the link for active page – if requested
if ($showActiveLink === false) {
unset($links[$activePage]);
}
unset ($temp);

foreach ($links as $k => $v) {
$temp[] = $v;
}
$links = $temp;
}

/** Returns array of inner links
*
* @access private
*/
private function _getInnerLinks() {
// I’m to lazy to use the long notation so I create some references… :)
$activePage = &$this->activePage;
$pageFirst = &$this->pageFirst;
$pageLast = &$this->pageLast;
$linkCountSurround = &$this->linkCountSurround;
$linkCount = &$this->linkCount;
$showCount = &$this->showCount;
$links = &$this->links;

$temp = false;
$from = $activePage – $linkCountSurround;

if ($from < 0) {
$from = 0;
}
$to = $from + $showCount;

if ($to > $linkCount – 1) {
$to = $linkCount – 1;
}

for ($i = $from; $i < $to; $i++) {
$temp[$i] = $links[$i];
}

return $temp;
}

/** Returns array of outer links (use ‘left’ or ‘right’)
*
* @access private
*/
private function _getOuterLinks($side = null) {
// I’m to lazy to use the long notation so I create some references… :)
$showActiveLink = &$this->showActiveLink;
$linkCount = &$this->linkCount;
$showCount = &$this->showCount;
$links = &$this->links;

$temp = false;

if ($side === ‘left’) {
for ($i = 0; $i < $showCount; $i++) {
$temp[$i] = $links[$i];
}
} elseif ($side === ‘right’) {
// The first workaround, which prevents that a link under wished number will be shown
if ($showActiveLink === false) {
$from = $linkCount – $showCount – 1;
} else {
$from = $linkCount – $showCount;
}
$to = $from + $showCount;

for ($i = $from; $i < $to; $i++) {
$temp[$i] = $links[$i];
}
}

return $temp;
}

/** Joins array to string with delimiter (see examples)
*
* @access private
*/
private function _addDelimiter1() {
if ($this->pageFirst !== null) {
$this->links = $this->delimiter1 . $this->links;
}

if ($this->pageLast !== null) {
$this->links = $this->links . $this->delimiter1;
}
}

/** Joins array to string with delimiter (see examples)
*
* @access private
*/
private function _addDelimiter2() {
// I’m to lazy to use the long notation so I create some references… :)
$links = &$this->links;
$pagePrev = &$this->pagePrev;
$pageNext = &$this->pageNext;
$delimiter2 = &$this->delimiter2;
$delimiter4 = &$this->delimiter4;

if ($pagePrev !== null &&
// Prevent that delimiter2 will be shown if delimiter4 will be too
substr($links, 0, strlen($delimiter4)) != $delimiter4) {
$links = $delimiter2 . $links;
}

if ($pageNext !== null && substr($links, -1 * strlen($delimiter4)) != $delimiter4) {
$links = $links . $delimiter2;
}
}

/** Joins array to string with delimiter (see examples)
*
* @access private
*/
private function _addDelimiter3() { $this->links = join($this->delimiter3, $this->links); }

/** Joins array to string with delimiter (see examples)
*
* @access private
*/
private function _addDelimiter4($left = false, $right = false) {
if ($left === true) {
$this->links = $this->delimiter4 . $this->links;
}

if ($right === true) {
$this->links = $this->links . $this->delimiter4;
}
}

/** Adds links Next/Previous to list – if requested
*
* @access private
*/
private function _addNextPrev() {
// I’m to lazy to use the long notation so I create some references… :)
$activePage = &$this->activePage;
$linkHref = &$this->linkHref;
$linkNextText = &$this->linkNextText;
$linkPrevText = &$this->linkPrevText;
$linkNextPrevMore = &$this->linkNextPrevMore;
$showNextPrev = &$this->showNextPrev;
$pageNext = &$this->pageNext;
$pagePrev = &$this->pagePrev;
$links = &$this->links;

if ($showNextPrev === true) {
$this->_addDelimiter2();

$temp1 = $temp2 = ”;

if ($pagePrev !== null) {
$temp1 = “<a href='{$linkHref}” . ($pagePrev – $this->stepsNextPrev + 1 + $this->numberFirstPage)
. “‘{$linkNextPrevMore}>$linkPrevText</a>”;
}

if ($pageNext !== null) {
$temp2 = “<a href='{$linkHref}” . ($pageNext + $this->stepsNextPrev – 1 + $this->numberFirstPage)
. “‘{$linkNextPrevMore}>$linkNextText</a>”;
}
$links = $temp1 . $links . $temp2;
}
}

/** Adds links First/Last to list – if requested
*
* @access private
*/
private function _addFirstLast() {
// I’m to lazy to use the long notation so I create some references… :)
$linkHref = &$this->linkHref;
$linkFirstText = &$this->linkFirstText;
$linkLastText = &$this->linkLastText;
$linkFirstLastMore = &$this->linkFirstLastMore;
$showFirstLast = &$this->showFirstLast;
$pageFirst = &$this->pageFirst;
$pageLast = &$this->pageLast;
$links = &$this->links;

if ($showFirstLast === true) {
$this->_addDelimiter1();

$temp1 = $temp2 = ”;

if ($pageFirst !== null) {
$temp1 = “<a href='{$linkHref}” . ($pageFirst + $this->numberFirstPage)
. “‘{$linkFirstLastMore}>$linkFirstText</a>”;
}

if ($pageLast !== null) {
$temp2 = “<a href='{$linkHref}” . ($pageLast + $this->numberFirstPage)
. “‘{$linkFirstLastMore}>$linkLastText</a>”;
}
$links = $temp1 . $links . $temp2;
}
}

/** Sets value of active page
* <b>ATTENTION</b> 10 here, means page 11 in output
* This value MUST be set dynamic
* ‘ap’ MUST be the same as the last variable in $linkHref (ap = active page)
*
* @access public
* @param (int) $activePage Number of active page; you get it approximately in this way: “$activePage=isset($_GET[‘ap’]) ? $_GET[‘ap’] : 0;”
* @return (bool) Returns false if $activePage has no valid value
*/
public function setActivePage($activePage) {
if (is_numeric($activePage)) {
$this->activePage = round($activePage) – $this->numberFirstPage;
return true;
} else {
return false;
}
}

/** Sets value for link of the first page
* If your first page should be linked with the value 12
* you have to enter it here
*
* @access public
* @param (int) $numberFirstPage Number of first page
* @return (bool) Returns false if $numberFirstPage has no valid value
*/
public function setNumberFirstPage($numberFirstPage) {
if (is_numeric($numberFirstPage)) {
$this->numberFirstPage = round($numberFirstPage);
return true;
} else {
return false;
}
}

/** Sets value for total number of entries
*
* @access public
* @param (int) $entries Total count of entries; you get it approximately in this way: “$entries=mysql_num_rows($resource);”
* @return (bool) Returns false if $entries has no valid value
*/
public function setEntries($entries) {
if (is_numeric($entries)) {
$this->entries = round($entries);
return true;
} else {
return false;
}
}

/** Sets value for entries per page to show
*
* @access public
* @param (int) $entriesPerPage Total count of entries to show per page
* @return (bool) Returns false if $entriesPerPage has no valid value
*/
public function setEntriesPerPage($entriesPerPage) {
if (is_numeric($entriesPerPage) && $entriesPerPage >= 0) {
$this->entriesPerPage = round($entriesPerPage);
return true;
} else {
return false;
}
}

/** Sets value of links where to refer to
* <b>IMPORTANT</b> The variable which contains value for active page MUST be at the end of the link followed by a = !! (see examples)
* The page number will be appended at the end of the link, that’s why you must pay attention on it!
*
* @access public
* @param (string) $linkHref URL where links should refer to
* @return (bool) Returns false if $linkHref has no valid value
*/
public function setLinkHref($linkHref) {
if (is_string($linkHref)) {
if (substr($linkHref, -1) != ‘=’) {
$linkHref .= ‘=’;
}
$this->linkHref = trim($linkHref);
return true;
} else {
return false;
}
}

/** Sets delimiter between links First/Previous and Next/Last
*
* @access public
* @param (string) $delimiter1 Delimiter between links First/Previous and Next/Last (see ‘All possible versions’)
* @return (bool) Returns false if $delimiter1 has no valid value
*/
public function setDelimiter1($delimiter1 = ‘ — ‘) {
if (is_string($delimiter1)) {
$this->delimiter1 = $delimiter1;
return true;
} else {
return false;
}
}

/** Sets delimiter between link Previous and page numbers and Next and page numbers
*
* @access public
* @param (string) $delimiter2 Delimiter between link Previous and page numbers and Next and page numbers (see ‘All possible versions’)
* @return (bool) Returns false if $delimiter2 has no valid value
*/
public function setDelimiter2($delimiter2 = ‘ – ‘) {
if (is_string($delimiter2)) {
$this->delimiter2 = $delimiter2;
return true;
} else {
return false;
}
}

/** Sets delimiter between links of single pages
*
* @access public
* @param (string) $delimiter3 Delimiter between links of single pages (see ‘All possible versions’)
* @return (bool) Returns false if $delimiter3 has no valid value
*/
public function setDelimiter3($delimiter3 = ‘, ‘) {
if (is_string($delimiter3)) {
$this->delimiter3 = $delimiter3;
return true;
} else {
return false;
}
}

/** Sets delimiter between links of single pages
*
* @access public
* @param (string) $delimiter4 Delimiter between links of single pages (see ‘All possible versions’)
* @return (bool) Returns false if $delimiter4 has no valid value
*/
public function setDelimiter4($delimiter4 = ‘ … ‘) {
if (is_string($delimiter4)) {
$this->delimiter4 = $delimiter4;
return true;
} else {
return false;
}
}

/** Sets value of chars in front and behind active link
*
* @access public
* @param (string) $linkActiveBracketLeft Chars in front of active link (see ‘Variables for links’)
* @param (string) $linkActiveBracketRight Chars behind of active link (see ‘Variables for links’)
* @return (bool) Returns false if $linkActiveBracketLeft or $linkActiveBracketRight has no valid value
*/
public function setLinkActiveBracket($linkActiveBracketLeft = ‘[‘, $linkActiveBracketRight = ‘]’) {
if (is_string($linkActiveBracketLeft) && is_string($linkActiveBracketRight)) {
$this->linkActiveBracketLeft = trim($linkActiveBracketLeft);
$this->linkActiveBracketRight = trim($linkActiveBracketRight);
return true;
} else {
return false;
}
}

/** Sets enhanced user adjustments to active link
*
* @access public
* @param (string) $linkActiveMore Enhanced user adjustments to active link (JavaScript, CSS, target, …)
* @return (bool) Returns false if $linkActiveMore has no valid value
*/
public function setLinkActiveMore($linkActiveMore = ”) {
if (is_string($linkActiveMore)) {
$linkActiveMore = ‘ ‘ . trim($linkActiveMore);
$this->linkActiveMore = $linkActiveMore;
return true;
} else {
return false;
}
}

/** Sets value of chars in front and behind of every (not active) link
*
* @access public
* @param (string) $linkBracketLeft Chars in front of every (not active) link (see ‘Variables for links’)
* @param (string) $linkBracketRight Chars behind every (not active) link (see ‘Variables for links’)
* @return (bool) Returns false if $linkBracketLeft or $linkBracketRight has no valid value
*/
public function setLinkBracket($linkBracketLeft = ”, $linkBracketRight = ”) {
if (is_string($linkBracketLeft) && is_string($linkBracketRight)) {
$this->linkBracketLeft = trim($linkBracketLeft);
$this->linkBracketRight = trim($linkBracketRight);
return true;
} else {
return false;
}
}

/** Sets enhanced user adjustments to every (not active) link
*
* @access public
* @param (string) $linkMore Enhanced user adjustments to every (not active) link (JavaScript, CSS, target, …)
* @return (bool) Returns false if $linkMore has no valid value
*/
public function setLinkMore($linkMore = ”) {
if (is_string($linkMore)) {
$linkMore = ‘ ‘ . trim($linkMore);
$this->linkMore = $linkMore;
return true;
} else {
return false;
}
}

/** Sets text for links Previous/Next
*
* @access public
* @param (string) $linkNextText Text for link Next
* @param (string) $linkPrevText Text for link Previous
* @return (bool) Returns false if $linkNextText or $linkPrevText has no valid value
*/
public function setLinkNextPrevText($linkNextText = ‘Weiter’, $linkPrevText = ‘Zur&uuml;ck’) {
if (is_string($linkNextText) && is_string($linkPrevText)) {
$this->linkNextText = $linkNextText;
$this->linkPrevText = $linkPrevText;
return true;
} else {
return false;
}
}

/** Sets enhanced user adjustments for text for links Previous/Next
*
* @access public
* @param (string) $linkNextPrevMore Enhanced user adjustments for links Next/Previous (JavaScript, CSS, target, …)
* @return (bool) Returns false if $linkNextPrevMore has no valid value
*/
public function setLinkNextPrevMore($linkNextPrevMore = ”) {
if (is_string($linkNextPrevMore)) {
$linkNextPrevMore = ‘ ‘ . trim($linkNextPrevMore);
$this->linkNextPrevMore = $linkNextPrevMore;
return true;
} else {
return false;
}
}

/** Sets text for links First/Last
*
* @access public
* @param (string) $linkFirstText Text for link First
* @param (string) $linkLastText Text for link Last
* @return (bool) Returns false if $linkFirstText or $linkLastText has no valid value
*/
public function setLinkFirstLastText($linkFirstText = ‘Anfang’, $linkLastText = ‘Ende’) {
if (is_string($linkFirstText) && is_string($linkLastText)) {
$this->linkFirstText = $linkFirstText;
$this->linkLastText = $linkLastText;
return true;
} else {
return false;
}
}

/** Sets enhanced user adjustments for text for links First/Last
*
* @access public
* @param (string) $linkFirstLastMore Enhanced user adjustments for links First/Last (JavaScript, CSS, target, …)
* @return (bool) Returns false if $linkFirstLastMore has no valid value
*/
public function setLinkFirstLastMore($linkFirstLastMore = ”) {
if (is_string($linkFirstLastMore)) {
$linkFirstLastMore = ‘ ‘ . trim($linkFirstLastMore);
$this->linkFirstLastMore = $linkFirstLastMore;
return true;
} else {
return false;
}
}

/** Sets value of how many links to show
*
* @access public
* @param (int) $showCount Value of how many links to show (odd numbers are more ideal)
* @return (bool) Returns false if $showCount has no valid value
*/
public function setShowCount($showCount = 3) {
if (is_numeric($showCount) && $showCount >= 3) {
$this->showCount = ceil($showCount);
return true;
} else {
return false;
}
}

/** Sets value of steps to do with Next/Previous
*
* @access public
* @param (bool) $stepsNextPrev Value of steps to do with Next/Previous
* @return (bool) Returns false if $stepsNextPrev has no valid value
*/
public function setStepsNextPrev($stepsNextPrev = null) {
if (is_numeric($stepsNextPrev) && $stepsNextPrev >= 1) {
$this->stepsNextPrev = round($stepsNextPrev);
return true;
} else {
return false;
}
}

/** Sets value to show all links at once or not
*
* @access public
* @param (bool) $showContinuous Value to show all links at once (true) or not (false)
* @return (bool) Returns false if $showContinuous has no valid value
*/
public function setShowContinuous($showContinuous = false) {
if (is_bool($showContinuous)) {
$this->showContinuous = $showContinuous;
return true;
} else {
return false;
}
}

/** Sets value to show outer links or not
*
* @access public
* @param (bool) $showOuter Value to show outer links (true) or not (false) (see ‘All possible versions’)
* @return (bool) Returns false if $showOuter has no valid value
*/
public function setShowOuter($showOuter = true) {
if (is_bool($showOuter)) {
$this->showOuter = $showOuter;
return true;
} else {
return false;
}
}

/** Sets value to show active link or not
*
* @access public
* @param (bool) $showActiveLink Value to show active link (true) or not (false)
* @return (bool) Returns false if $showActiveLink has no valid value
*/
public function setShowActiveLink($showActiveLink = true) {
if (is_bool($showActiveLink)) {
$this->showActiveLink = $showActiveLink;
return true;
} else {
return false;
}
}

/** Sets value to show Previous/Next or not
*
* @access public
* @param (bool) $showNextPrev Value to show Previous/Next (true) or not (false)
* @return (bool) Returns false if $showNextPrev has no valid value
*/
public function setShowNextPrev($showNextPrev = true) {
if (is_bool($showNextPrev)) {
$this->showNextPrev = $showNextPrev;
return true;
} else {
return false;
}
}

/** Sets value to show First/Last or not
*
* @access public
* @param (bool) $showFirstLast Value to show First/Last (true) or not (false)
* @return (bool) Returns false if $showFirstLast has no valid value
*/
public function setShowFirstLast($showFirstLast = true) {
if (is_bool($showFirstLast)) {
$this->showFirstLast = $showFirstLast;
return true;
} else {
return false;
}
}

/** Sets value to show a single link or not
*
* @access public
* @param (bool) $showSingleLink Value to show a single link (true) or nothing (false)
* @return (bool) Returns false if $showSingleLink has no valid value
*/
public function setShowSingleLink($showSingleLink = false) {
if (is_bool($showSingleLink)) {
$this->showSingleLink = $showSingleLink;
return true;
} else {
return false;
}
}

/** Returns number of entries per page
*
* @access public
* @return (int) Number of links to show per page
*/
public function getEntriesPerPage() {
return $this->entriesPerPage;
}

/** Returns (possibly corrected) number of active page
*
* @access public
* @return (int) (possibly corrected) number of active page
*/
public function getActivePage() {
return $this->activePage;
}

/** Shows value of every relevant variable
*
* @access public
*/
public function dump() {
$width = 30;
$vars = array (
‘activePage’,
‘delimiter1’,
‘delimiter2’,
‘delimiter3’,
‘delimiter4’,
‘entries’,
‘entriesPerPage’,
‘linkActiveBracketLeft’,
‘linkActiveBracketRight’,
‘linkActiveMore’,
‘linkActiveText’,
‘linkBracketLeft’,
‘linkBracketRight’,
‘linkCount’,
‘linkCountSurround’,
‘linkFirstLastMore’,
‘linkFirstText’,
‘linkHref’,
‘linkLastText’,
‘linkMore’,
‘linkNextPrevMore’,
‘linkNextText’,
‘linkPrevText’,
‘linkText’,
‘pageFirst’,
‘pageLast’,
‘pageNext’,
‘pagePrev’,
‘showActiveLink’,
‘showContinuous’,
‘showCount’,
‘showFirstLast’,
‘showNextPrev’,
‘showOuter’,
‘showSingleLink’,
‘stepsNextPrev’
);

echo “<pre>\n”;

for ($i = 0; $i < count($vars); $i++) {
$temp = $this->$vars[$i];

if (is_bool($temp)) {
$temp = $temp ? ‘true’ : ‘false’;
}

echo ‘$’ . str_pad($vars[$i], $width, ‘ ‘, STR_PAD_RIGHT) . ” = $temp\n”;
}

if (is_array($this->links)) {
echo ‘$links = ‘;
print_r ($this->links);

echo ‘$links = Array’ . “\n(\n”;

for ($i = 0; $i < count($this->links); $i++) {
echo ” [$i] => ” . htmlentities($this->links[$i]) . “\n”;
}

echo “)\n”;
} else {
echo ‘$’ . str_pad(‘links’, $width, ‘ ‘, STR_PAD_RIGHT) . ” = $this->links\n”;

echo ‘$’ . str_pad(‘links’, $width, ‘ ‘, STR_PAD_RIGHT) . ‘ = ‘
. htmlentities(str_replace(‘<a href’, “\n <a href”, $this->links)) . “\n”;
}

echo “</pre>\n”;
}

// If you change any of these values below you should know what you are doing! They won’t be checked!
// So I suggest to use the existing methods.

//////////////////////////////////////////////////
// Required variables
//////////////////////////////////////////////////
/** Number of active page (page 1 has value $this->numberFirstPage)
*
* @access private
* @var (int)
*/
private $activePage = 0;

/** Number for link of first page
*
* @access private
* @var (int)
*/
private $numberFirstPage = 1;

/** Total count of entries
*
* @access private
* @var (int)
*/
private $entries = 0;

/** Entries per page to show
*
* @access private
* @var (int)
*/
private $entriesPerPage = 3;

/** URL to file, plus variable for number of page
*
* @access private
* @var (string)
*/
private $linkHref = ”;

//////////////////////////////////////////////////
// Optional variables
//////////////////////////////////////////////////
/** Delimiter, see ‘Variables for links’
*
* @access private
* @var (string)
*/
private $delimiter1 = ‘ – ‘;

/** Delimiter, see ‘Variables for links’
*
* @access private
* @var (string)
*/
private $delimiter2 = ‘ – ‘;

/** Delimiter, see ‘Variables for links’
*
* @access private
* @var (string)
*/
private $delimiter3 = ‘ – ‘;

/** Delimiter, see ‘Variables for links’
*
* @access private
* @var (string)
*/
private $delimiter4 = ‘ … ‘;

/** Text in front of active link, see ‘Variables for links’
*
* @access private
* @var (string)
*/
private $linkActiveText = ”;

/** Chars in front of active link, see ‘Variables for links’
*
* @access private
* @var (string)
*/
private $linkActiveBracketLeft = ‘[‘;

/** Chars behind active link, see ‘Variables for links’
*
* @access private
* @var (string)
*/
private $linkActiveBracketRight = ‘]’;

/** Enhanced user adjustments for active link, see ‘Variables for links’
*
* @access private
* @var (string)
*/
private $linkActiveMore = ”;

/** Text in front of every not active link, see ‘Variables for links’
*
* @access private
* @var (string)
*/
private $linkText = ”;

/** Chars in front of every not active link, see ‘Variables for links’
*
* @access private
* @var (string)
*/
private $linkBracketLeft = ”;

/** Chars behind every not active link, see ‘Variables for links’
*
* @access private
* @var (string)
*/
private $linkBracketRight = ”;

/** Enhanced user adjustments for every not active link, see ‘Variables for links’
*
* @access private
* @var (string)
*/
private $linkMore = ”;

/** Label for ‘Next’ (next page), see ‘Variables for links’
*
* @access private
* @var (string)
*/
private $linkNextText = ‘Next’;

/** Label for ‘Previous’ (previous page), see ‘Variables for links’
*
* @access private
* @var (string)
*/
private $linkPrevText = ‘Previous’;

/** Enhanced user adjustments for links ‘Next’ and ‘Previous’, see ‘Variables for links’
*
* @access private
* @var (string)
*/
private $linkFirstLastMore = ”;

/** Label for ‘First’ (first page), see ‘Variables for links’
*
* @access private
* @var (string)
*/
private $linkFirstText = ‘First’;

/** Label for ‘Last’ (last page), see ‘Variables for links’
*
* @access private
* @var (string)
*/
private $linkLastText = ‘Last’;

/** Enhanced user adjustments for links ‘First’ and ‘Last’, see ‘Variables for links’
*
* @access private
* @var (string)
*/
private $linkNextPrevMore = ”;

/** Number of links to show, see ‘Variables for links’
*
* @access private
* @var (int)
*/
private $showCount = 3;

/** Show all links true/false, see ‘Variables for links’
*
* @access private
* @var (bool)
*/
private $showContinuous = false;

/** Show outer links true/false, see ‘Variables for links’
*
* @access private
* @var (bool)
*/
private $showOuter = true;

/** Show ‘Next’ and ‘Previous’ true/false, see ‘Variables for links’
*
* @access private
* @var (bool)
*/
private $showNextPrev = true;

/** Show ‘First’ and ‘Last’ true/false, see ‘Variables for links’
*
* @access private
* @var (bool)
*/
private $showFirstLast = true;

/** Show link of active page true/false, see ‘Variables for links’
*
* @access private
* @var (bool)
*/
private $showActiveLink = true;

/** Show single link true/false, see ‘Variables for links’
*
* @access private
* @var (bool)
*/
private $showSingleLink = false;

/** Count of pages to jump on ‘Next’/’Previous’
*
* @access private
* @var (bool)
*/
private $stepsNextPrev = 1;

//////////////////////////////////////////////////
// Squarely internal variables
//////////////////////////////////////////////////
/** Total count of links
*
* @access private
* @var (int)
*/
private $linkCount = 0;

/** Count of links which surround the active
*
* @access private
* @var (int)
*/
private $linkCountSurround = 0;

/** Number of previous page
*
* @access private
* @var (int)
*/
private $pagePrev = 0;

/** Number of next page
*
* @access private
* @var (int)
*/
private $pageNext = 0;

/** Number of first page
*
* @access private
* @var (int)
*/
private $pageFirst = 0;

/** Number of last page
*
* @access private
* @var (int)
*/
private $pageLast = 0;

/** Array of links and string on return
*
* @access private
* @var (mixed)
*/
private $links = array ();
}

/*
//////////////////////////////////////////////////
// A few (all?) examples
//////////////////////////////////////////////////
echo “<html><body bgcolor=’white’ style=’margin:5px; font-size:0.8em; font-family:verdana;’>\n”;
$activePage = !empty($_GET[‘page’]) ? $_GET[‘page’] : 0;
$PAGES = 54;

echo ‘all, with active and with big (5 pages) steps<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowContinuous(true);
$pagination->setShowOuter(false);
$pagination->setShowActiveLink(true);
$pagination->setStepsNextPrev(5);

echo $pagination->create() . “<br>\n”;

echo ‘<br>3 Links – inner, with active and big (3 pages) steps<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowCount(3);
$pagination->setShowContinuous(false);
$pagination->setShowOuter(false);
$pagination->setShowActiveLink(true);
$pagination->setStepsNextPrev(3);

echo $pagination->create() . “<br>\n”;

echo ‘<br>Active page and entries per page of links above<br>’;

echo ‘Active page: ‘ . $pagination->getActivePage() . ‘, Entries per page: ‘ . $pagination->getEntriesPerPage() . “<br>\n”;

echo ‘<hr>’;

echo ‘<br>all, with active<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowCount(3);
$pagination->setShowContinuous(true);
$pagination->setShowOuter(false);
$pagination->setShowActiveLink(true);

echo $pagination->create() . “<br>\n”;

echo ‘<br>all, without active<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowCount(3);
$pagination->setShowContinuous(true);
$pagination->setShowOuter(false);
$pagination->setShowActiveLink(false);

echo $pagination->create() . “<br>\n”;

echo ‘<br>all, with active<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowCount(4);
$pagination->setShowContinuous(true);
$pagination->setShowOuter(false);
$pagination->setShowActiveLink(true);

echo $pagination->create() . “<br>\n”;

echo ‘<br>all, without active<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowCount(4);
$pagination->setShowContinuous(true);
$pagination->setShowOuter(false);
$pagination->setShowActiveLink(false);

echo $pagination->create() . “<br>\n”;

echo ‘<br>all, with active<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowCount(5);
$pagination->setShowContinuous(true);
$pagination->setShowOuter(false);
$pagination->setShowActiveLink(true);

echo $pagination->create() . “<br>\n”;

echo ‘<br>all, without active<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowCount(5);
$pagination->setShowContinuous(true);
$pagination->setShowOuter(false);
$pagination->setShowActiveLink(false);

echo $pagination->create() . “<br>\n”;

echo ‘<hr>’;

echo ‘<br>3 Links – inner, with active<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowCount(3);
$pagination->setShowContinuous(false);
$pagination->setShowOuter(false);
$pagination->setShowActiveLink(true);

echo $pagination->create() . “<br>\n”;

echo ‘<br>3 Links – inner, without active<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowCount(3);
$pagination->setShowContinuous(false);
$pagination->setShowOuter(false);
$pagination->setShowActiveLink(false);

echo $pagination->create() . “<br>\n”;

echo ‘<br>4 Links – inner, with active<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowCount(4);
$pagination->setShowContinuous(false);
$pagination->setShowOuter(false);
$pagination->setShowActiveLink(true);

echo $pagination->create() . “<br>\n”;

echo ‘<br>4 Links – inner, without active<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowCount(4);
$pagination->setShowContinuous(false);
$pagination->setShowOuter(false);
$pagination->setShowActiveLink(false);

echo $pagination->create() . “<br>\n”;

echo ‘<br>5 Links – inner, with active<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowCount(5);
$pagination->setShowContinuous(false);
$pagination->setShowOuter(false);
$pagination->setShowActiveLink(true);

echo $pagination->create() . “<br>\n”;

echo ‘<br>5 Links – inner, without active<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowCount(5);
$pagination->setShowContinuous(false);
$pagination->setShowOuter(false);
$pagination->setShowActiveLink(false);

echo $pagination->create() . “<br>\n”;

echo ‘<hr>’;

echo ‘<br>3 Links – outer, with active<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowCount(3);
$pagination->setShowContinuous(false);
$pagination->setShowOuter(true);
$pagination->setShowActiveLink(true);

echo $pagination->create() . “<br>\n”;

echo ‘<br>3 Links – outer, without active<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowCount(3);
$pagination->setShowContinuous(false);
$pagination->setShowOuter(true);
$pagination->setShowActiveLink(false);

echo $pagination->create() . “<br>\n”;

echo ‘<br>4 Links – outer, with active<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowCount(4);
$pagination->setShowContinuous(false);
$pagination->setShowOuter(true);
$pagination->setShowActiveLink(true);

echo $pagination->create() . “<br>\n”;

echo ‘<br>4 Links – outer, without active<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowCount(4);
$pagination->setShowContinuous(false);
$pagination->setShowOuter(true);
$pagination->setShowActiveLink(false);

echo $pagination->create() . “<br>\n”;

echo ‘<br>5 Links – outer, with active<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowCount(5);
$pagination->setShowContinuous(false);
$pagination->setShowOuter(true);
$pagination->setShowActiveLink(true);

echo $pagination->create() . “<br>\n”;

echo ‘<br>5 Links – outer, without active<br>’;
$pagination = new Pagination($activePage, $PAGES);
$pagination->setLinkHref($_SERVER[‘PHP_SELF’] . ‘?page=’);
$pagination->setShowCount(5);
$pagination->setShowContinuous(false);
$pagination->setShowOuter(true);
$pagination->setShowActiveLink(false);

echo $pagination->create() . “<br>\n”;
*/
?>

Posted in Dev

PHP Klasse zum Blättern

Demonstration gefällig?

Einige mögliche Kombinationen werden auf der Demoseite vorgestellt.

Wie wird’s gemacht?

Einfach den Code in eine beliebige Datei kopieren (oder hier runterladen). Nennen wir sie einfach mal blaettern.php. Der eigene Code sieht dann irgendwie so aus:

<?php
// Datei mit Code einbinden
include_once('blaettern.php');

// Aktuelle Seite ermitteln
$active_page = !empty($_GET['page']) ? $_GET['page'] : 0;

// Anzahl aller Eintraege ermitteln
$result=mysql_query('SELECT COUNT(feld) FROM tabelle');
list($entries)=mysql_fetch_row($result);


// Objekt erstellen, aktuelle Seite und Anzahl Ergebnisse uebergeben
$blaettern=new blaettern($active_page, $entries);
// URL fuer Links definieren
// Kann man auch im Code fest verankern und sich somit diesen Aufruf sparen
$blaettern->setLinkHref($_SERVER['PHP_SELF'].'?page=');


// Erste Linkliste erstellen und ausgeben
echo $blaettern->create();


// Abfrage mit Begrenzung (LIMIT) ausfuehren
$result=mysql_query('SELECT feld
                     FROM tabelle
                     LIMIT '.($blaettern->getEntriesPerPage() * $blaettern->getActivePage()).', '.$blaettern->getEntriesPerPage());
// Wenn Daten gefunden wurden, dann ausgeben
if (mysql_num_rows($result)>0) {
    while (list($feld)=mysql_fetch_row($result)) {
        echo "$feld<br />\n";
    }
}
else {
    echo "Keine Datens&auml;tze gefunden!\n";
}


// Zweite Linkliste zeigen
echo $blaettern->create();
?>

Sie sollten eine Linkliste erhalten, die in etwa so aussieht (abhängig von der Zahl Einträge und Ihren Einstellungen): [1], >2<, >3< ... >32<, >33<, >34< - Weiter -- Ende

Was bringt mir das?

Nachdem einer der Links angeklickt wurde, hat man eine neue $active_page. Mit dieser Zahl lassen sich beispielsweise in MySQL ganz einfach die darzustellenden Datensätze errechnen (siehe LIMIT '.($blaettern->getEntriesPerPage() * $blaettern->getActivePage()).', '.$blaettern->getEntriesPerPage()). Somit hat man die Daten einer Tabelle ganz einfach auf mehrere Seiten aufgeteilt.

<?php
/** Funktion zum Blaettern
* Funktion zum erstellen einer Linkliste, die das Blaettern durch eine bestimmte Zahl von Ergebnissen erlaubt
*
* @author Carsten Franke <mail@dbCF.de>
* @link http://dbCF.de/
* @version 1.2.1
* @copyright GPL
*/

// Nur waehrend der Entwicklung interessant
// error_reporting(E_ALL);

/*
Alle moeglichen Varianten
Anfang — Zurueck – 1, 2, 3 … 6, 7, 8 … 11, 12, 13 – Weiter — Ende
Zurueck – 1, 2, 3 … 6, 7, 8 … 11, 12, 13 – Weiter
Anfang – 1, 2, 3 … 6, 7, 8 … 11, 12, 13 – Ende
1, 2, 3 … 6, 7, 8 … 11, 12, 13

Anfang — Zurueck – … 6, 7, 8 … – Weiter — Ende
Zurueck … 6, 7, 8 … Weiter
Anfang … 6, 7, 8 … Ende
… 6, 7, 8 …

Anfang — Zurueck – 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 – Weiter — Ende
Zurueck – 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 – Weiter
Anfang – 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 – Ende
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

Variablen fuer Links
Variable Beispiel Ausgabebeispiel
$delimiter1 — Anfang — Zurueck
$delimiter2 – Zurueck – 1
$delimiter3 , 1, 2, 3
$delimiter4 … 1, 2, 3 … 6, 7, 8

$linkActiveText Seite Seite 1, Seite 2, Seite 3
$linkActiveBracketLeft [ 6, [7], 8
$linkActiveBracketRight ] 6, [7], 8
$linkActiveMore style=’font-size:1.2em;’ <a href=’…’ style=’font-size:1.2em;’>

$linkText Seite Seite 1, Seite 2, Seite 3
$linkBracketLeft > >1<, >2<, >3<
$linkBracketRight < >1<, >2<, >3<
$linkMore target=’_blank’ <a href=’…’ target=’_blank’>

$linkFirstText Anfang Anfang — Zurueck
$linkLastText Ende Weiter — Ende
$linkFirstLastMore style=’font-family:arial;’ <a href=’…’ style=’font-family:arial;’>

$linkNextText Weiter Weiter — Ende
$linkPrevText Zurueck Anfang — Zurueck
$linkNextPrevMore class=’navigation’ <a href=’…’ class=’navigation’>

$showCount 3 6, 7, 8
$showContinuous true/false true: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
false: abhaengig von $showOuter
$showOuter true/false true: 1, 2, 3 … 6, 7, 8 … 11, 12, 13
false: … 6, 7, 8 …
$showNextPrev true/false true: Weiter/Zurueck anzeigen, false: nicht anzeigen
$showFirstLast true/false true: Anfang/Ende anzeigen, false: nicht anzeigen
$showActiveLink true/false true: 6, [7], 8, false: 6, 8
$showSingleLink true/false true: [1], false: (nichts)

$linkHref bilder.php?id=$id&page= <a href=’bilder.php?id=BMW&page=2’>
*/

class Blaettern {
/** Erstellt ein Objekt fuer die Blaetterfunktion
*
* @access public
* @param (int) $activePage Zahl der aktuellen Seite, erhaelt man ungefaehr so: “$activePage=isset($_GET[‘ap’]) ? $_GET[‘ap’] : 0;”
* @param (int) $entries Anzahl aller Ergebnisse; erhaelt man ungefaehr so: “$entries=mysql_num_rows($resource);”
*/
public function __construct($activePage, $entries) {
$this->setActivePage($activePage);
$this->setEntries($entries);
}

/** Erstellt die Liste mit Links
*
* @access public
* @return (mixed) Gibt den erstellten String der Links oder false bei Fehlern zurueck
*/
public function create() {
// Hab keine Lust mit den langen Namen zu arbeiten, also erstelle ich Referenzen darauf… :)
$activePage = &$this->activePage;
$entries = &$this->entries;
$entriesPerPage = &$this->entriesPerPage;
$linkCount = &$this->linkCount;
$linkCountSurround = &$this->linkCountSurround;
$showCount = &$this->showCount;
$showContinuous = &$this->showContinuous;
$showOuter = &$this->showOuter;
$showSingleLink = &$this->showSingleLink;
$showActiveLink = &$this->showActiveLink;
$pageNext = &$this->pageNext;
$pagePrev = &$this->pagePrev;
$pageFirst = &$this->pageFirst;
$pageLast = &$this->pageLast;
$links = &$this->links;

// Array neu initialisieren
$links = array ();

// Anzahl aller moeglichen Links zu den Seiten ermitteln
$linkCount = $entries % $entriesPerPage == 0 ? (int)$entries / $entriesPerPage : (int)ceil($entries / $entriesPerPage);

// Ermitteln, wie viele Links den aktuellen umgeben werden
$linkCountSurround = floor($showCount / 2);

// Wenn kein Blaettern zu Stande kommt, dann mal schauen, ob der Nutzer den einzelnen Link sehen will
if (($showSingleLink === false || $showActiveLink === false) && $entries <= $showCount) {
$links = ”;
return $links;
}
else if ($showSingleLink === true && $showActiveLink === true && $entries <= $showCount) {
$linkCount = 1;
}

// Wenn sinnvoll ($showOuter===true, aber $linkCount<=$showCount*3), dann ueberschreiben wir hier $showContinuous
if ($showOuter === true && $linkCount <= $showCount * 3) {
$showContinuous = true;
}

// Angabe der aktuelllen Seite pruefen, gegebenenfalls neu setzen
if ($linkCount < $activePage) {
$activePage = $linkCount – 1;
} elseif (!is_numeric($activePage) || $activePage < 0) {
$activePage = 0;
}

// Jetzt berechnen wir erst einmal die Seitenzahlen fuer die erste, letzte, naechste und vorherige Seite
// Sollte eine Seite nicht existieren, dann ist der Wert null (nicht 0!)
$pageNext = $activePage + 1;

if ($pageNext >= $linkCount – 1 && $activePage == $linkCount – 1) {
$pageNext = null;
}
$pagePrev = $activePage – 1;

if ($pagePrev <= 0 && $activePage == 0) {
$pagePrev = null;
}
$pageFirst = 0;

if ($activePage == 0) {
$pageFirst = null;
}
$pageLast = $linkCount – 1;

if ($activePage == $linkCount – 1) {
$pageLast = null;
}

// Alle Seitenzahlen durchgehen (egal, ob am Ende gezeigt oder nicht) und Seitenzahlen im Array speichern
for ($i = 0; $i < $linkCount; $i++) {
$links[] = $i;
}
// Links aus Seitenzahlen erstellen
$this->_makeLinks();

// Wenn alle Seiten angezeigt werden sollen…
// …oder Anzahl Links kleiner oder gleich der zu zeigenden ist, dann die Links speichern
if ($showContinuous === true || $linkCount <= $showCount) {
$this->_addDelimiter3();
} else {
// Oder wenn nicht alle Links angezeigt werden sollen…
// …und nicht die aeusseren, dann Links speichern
if ($showOuter === false) {
// Wenn aktiver Link einer der aeusseren ist, dann dieses gesondert zeigen
if ($activePage <= $linkCountSurround) {
$links = $this->_getOuterLinks(‘left’);
$this->_addDelimiter3();
$this->_addDelimiter4(false, true);
} elseif ($activePage >= $pageLast – $linkCountSurround) {
$links = $this->_getOuterLinks(‘right’);

$this->_addDelimiter3();
$this->_addDelimiter4(true, false);
}
// Ansonsten die $showCount relevanten Links ermitteln und speichern
else {
$links = $this->_getInnerLinks();
$this->_addDelimiter3();
$this->_addDelimiter4(true, true);
}
}
// Oder wenn nicht alle Links angezeigt werden sollen…
// …und die aeusseren, dann Links speichern
elseif ($showOuter === true) {
// Alle moeglichen Links sammeln
$temp[0] = $this->_getOuterLinks(‘left’);
$temp[1] = $this->_getInnerLinks();
$temp[2] = $this->_getOuterLinks(‘right’);

// Alle drei Arrays in eins packen
// Keine array_*-Funktion, da diese die Indizes loeschen
$temp2 = $temp[0];

for ($i = 1; $i < 3; $i++) {
foreach ($temp[$i] as $k => $v) {
$temp2[$k] = $v;
}
}
$temp = $temp2;
unset ($temp2);
ksort ($temp);

// Zusammenhaengende Links (Abstand zum naechsten gleich 1) in eigene Arrays packen
$last_index = 0;
$j = 0;

foreach ($temp as $k => $v) {
if ($k – $last_index > 1) {
$j++;
}

$temp2[$j][] = $v;

$last_index = $k;
}

// Arrays zusammenhaengender Links zu Strings zusammenfassen
// Kein Funktionsaufruf, da diese auf $this->links zugreifen
unset ($temp);

for ($i = 0; $i < count($temp2); $i++) {
$temp[] = join($this->delimiter3, $temp2[$i]);
}
$links = join($this->delimiter4, $temp);
}
}

// Links fuer Weiter/Zurueck und Anfang/Ende hinzufuegen, na ja, wenn es denn gewuenscht ist
$this->_addNextPrev();
$this->_addFirstLast();

return $links;
}

/** Macht aus den im Array $links gepeicherten IDs Links mit allem Dran und Drum
*
* @access private
*/
private function _makeLinks() {
// Hab keine Lust mit den langen Namen zu arbeiten, also erstelle ich Referenzen darauf… :)
$activePage = &$this->activePage;
$linkHref = &$this->linkHref;
$linkActiveBracketLeft = &$this->linkActiveBracketLeft;
$linkActiveBracketRight = &$this->linkActiveBracketRight;
$linkActiveMore = &$this->linkActiveMore;
$linkActiveText = &$this->linkActiveText;
$linkBracketLeft = &$this->linkBracketLeft;
$linkBracketRight = &$this->linkBracketRight;
$linkMore = &$this->linkMore;
$linkText = &$this->linkText;
$showActiveLink = &$this->showActiveLink;
$links = &$this->links;

for ($i = 0; $i < count($links); $i++) {
$num_link = $i + $this->numberFirstPage;
$num_show = $i + 1;

if ($i == $activePage) {
$links[$i]
= “<a href='{$linkHref}{$num_link}'{$linkActiveMore}>{$linkActiveBracketLeft}{$linkActiveText}{$num_show}{$linkActiveBracketRight}</a>”;
} else {
$links[$i]
= “<a href='{$linkHref}{$num_link}'{$linkMore}>{$linkBracketLeft}{$linkText}{$num_show}{$linkBracketRight}</a>”;
}
}

// Jetzt lassen wir den aktiven Link verschwinden – wenn denn gewuenscht
if ($showActiveLink === false) {
unset($links[$activePage]);
}
unset ($temp);

foreach ($links as $k => $v) {
$temp[] = $v;
}
$links = $temp;
}

/** Gibt Array der inneren Links zurueck
*
* @access private
*/
private function _getInnerLinks() {
// Hab keine Lust mit den langen Namen zu arbeiten, also erstelle ich Referenzen darauf… :)
$activePage = &$this->activePage;
$pageFirst = &$this->pageFirst;
$pageLast = &$this->pageLast;
$linkCountSurround = &$this->linkCountSurround;
$linkCount = &$this->linkCount;
$showCount = &$this->showCount;
$links = &$this->links;

$temp = false;
$from = $activePage – $linkCountSurround;

if ($from < 0) {
$from = 0;
}
$to = $from + $showCount;

if ($to > $linkCount – 1) {
$to = $linkCount – 1;
}

for ($i = $from; $i < $to; $i++) {
$temp[$i] = $links[$i];
}

return $temp;
}

/** Gibt Array mit aeusseren Links (links ‘left’ oder rechts ‘right’) zurueck
*
* @access private
*/
private function _getOuterLinks($side = null) {
// Hab keine Lust mit den langen Namen zu arbeiten, also erstelle ich Referenzen darauf… :)
$showActiveLink = &$this->showActiveLink;
$linkCount = &$this->linkCount;
$showCount = &$this->showCount;
$links = &$this->links;

$temp = false;

if ($side === ‘left’) {
for ($i = 0; $i < $showCount; $i++) {
$temp[$i] = $links[$i];
}
} elseif ($side === ‘right’) {
// Der erste Workaround, da sonst ein Link zu wenig gezeigt wird, wenn aktiver ausgeblendet
if ($showActiveLink === false) {
$from = $linkCount – $showCount – 1;
} else {
$from = $linkCount – $showCount;
}
$to = $from + $showCount;

for ($i = $from; $i < $to; $i++) {
$temp[$i] = $links[$i];
}
}

return $temp;
}

/** Macht aus den im Array $links gepeicherten IDs Links mit allem Dran und Drum (siehe Beispiele)
*
* @access private
*/
private function _addDelimiter1() {
if ($this->pageFirst !== null) {
$this->links = $this->delimiter1 . $this->links;
}

if ($this->pageLast !== null) {
$this->links = $this->links . $this->delimiter1;
}
}

/** Macht aus den im Array $links gepeicherten IDs Links mit allem Dran und Drum (siehe Beispiele)
*
* @access private
*/
private function _addDelimiter2() {
// Hab keine Lust mit den langen Namen zu arbeiten, also erstelle ich Referenzen darauf… :)
$links = &$this->links;
$pagePrev = &$this->pagePrev;
$pageNext = &$this->pageNext;
$delimiter2 = &$this->delimiter2;
$delimiter4 = &$this->delimiter4;

if ($pagePrev !== null &&
// Verhindern, dass Delimiter2 gezeigt wird, wenn Delimiter4 schon da ist (pure Schoenheit)
substr($links, 0, strlen($delimiter4)) != $delimiter4) {
$links = $delimiter2 . $links;
}

if ($pageNext !== null && substr($links, -1 * strlen($delimiter4)) != $delimiter4) {
$links = $links . $delimiter2;
}
}

/** Macht aus den im Array $links gepeicherten IDs Links mit allem Dran und Drum (siehe Beispiele)
*
* @access private
*/
private function _addDelimiter3() { $this->links = join($this->delimiter3, $this->links); }

/** Macht aus den im Array $links gepeicherten IDs Links mit allem Dran und Drum (siehe Beispiele)
*
* @access private
*/
private function _addDelimiter4($left = false, $right = false) {
if ($left === true) {
$this->links = $this->delimiter4 . $this->links;
}

if ($right === true) {
$this->links = $this->links . $this->delimiter4;
}
}

/** Fuegt dem Array Links fuer Weiter/Zurueck hinzu – wenn denn gewuenscht
*
* @access private
*/
private function _addNextPrev() {
// Hab keine Lust mit den langen Namen zu arbeiten, also erstelle ich Referenzen darauf… :)
$activePage = &$this->activePage;
$linkHref = &$this->linkHref;
$linkNextText = &$this->linkNextText;
$linkPrevText = &$this->linkPrevText;
$linkNextPrevMore = &$this->linkNextPrevMore;
$showNextPrev = &$this->showNextPrev;
$pageNext = &$this->pageNext;
$pagePrev = &$this->pagePrev;
$links = &$this->links;

if ($showNextPrev === true) {
$this->_addDelimiter2();

$temp1 = $temp2 = ”;

if ($pagePrev !== null) {
$temp1 = “<a href='{$linkHref}” . ($pagePrev – $this->stepsNextPrev + 1 + $this->numberFirstPage)
. “‘{$linkNextPrevMore}>$linkPrevText</a>”;
}

if ($pageNext !== null) {
$temp2 = “<a href='{$linkHref}” . ($pageNext + $this->stepsNextPrev – 1 + $this->numberFirstPage)
. “‘{$linkNextPrevMore}>$linkNextText</a>”;
}
$links = $temp1 . $links . $temp2;
}
}

/** Fuegt dem Array Links fuer Anfang/Ende hinzu – wenn denn gewuenscht
*
* @access private
*/
private function _addFirstLast() {
// Hab keine Lust mit den langen Namen zu arbeiten, also erstelle ich Referenzen darauf… :)
$linkHref = &$this->linkHref;
$linkFirstText = &$this->linkFirstText;
$linkLastText = &$this->linkLastText;
$linkFirstLastMore = &$this->linkFirstLastMore;
$showFirstLast = &$this->showFirstLast;
$pageFirst = &$this->pageFirst;
$pageLast = &$this->pageLast;
$links = &$this->links;

if ($showFirstLast === true) {
$this->_addDelimiter1();

$temp1 = $temp2 = ”;

if ($pageFirst !== null) {
$temp1 = “<a href='{$linkHref}” . ($pageFirst + $this->numberFirstPage)
. “‘{$linkFirstLastMore}>$linkFirstText</a>”;
}

if ($pageLast !== null) {
$temp2 = “<a href='{$linkHref}” . ($pageLast + $this->numberFirstPage)
. “‘{$linkFirstLastMore}>$linkLastText</a>”;
}
$links = $temp1 . $links . $temp2;
}
}

/** Setzt Wert fuer Zahl der aktuelle Seite
* <b>Achtung</b> 10 hier, bedeutet bei der Ausgabe Seite 11
* Dieser Wert MUSS dynamisch festgelegt werden
* ‘ap’ MUSS mit der letzten Variable bei $linkHref uebereinstimmen (ap = active page)
*
* @access public
* @param (int) $activePage Zahl der aktuellen Seite, erhaelt man ungefaehr so: “$activePage=isset($_GET[‘ap’]) ? $_GET[‘ap’] : 0;”
* @return (bool) Gibt false zurueck, wenn $activePage keinen gueltigen Wert hat
*/
public function setActivePage($activePage) {
if (is_numeric($activePage)) {
$this->activePage = round($activePage) – $this->numberFirstPage;
return true;
} else {
return false;
}
}

/** Setzt Wert fuer Zahl der ersten Seite
* Wer also beim Link auf Seite 1 nicht 0 sondern 12 uebergeben
* haben will, muss hier auch 12 eintragen.
*
* @access public
* @param (int) $numberFirstPage Zahl der ersten Seite
* @return (bool) Gibt false zurueck, wenn $numberFirstPage keinen gueltigen Wert hat
*/
public function setNumberFirstPage($numberFirstPage) {
if (is_numeric($numberFirstPage)) {
$this->numberFirstPage = round($numberFirstPage);
return true;
} else {
return false;
}
}

/** Setzt Wert fuer Gesamtzahl aller Eintraege
*
* @access public
* @param (int) $entries Anzahl aller Ergebnisse; erhaelt man ungefaehr so: “$entries=mysql_num_rows($resource);”
* @return (bool) Gibt false zurueck, wenn $entries keinen gueltigen Wert hat
*/
public function setEntries($entries) {
if (is_numeric($entries)) {
$this->entries = round($entries);
return true;
} else {
return false;
}
}

/** Setzt Wert fuer Anzahl Ergebnis pro Seite, die angezeigt werden sollen
*
* @access public
* @param (int) $entriesPerPage Anzahl Ergebnis pro Seite, die angezeigt werden sollen
* @return (bool) Gibt false zurueck, wenn $entriesPerPage keinen gueltigen Wert hat
*/
public function setEntriesPerPage($entriesPerPage) {
if (is_numeric($entriesPerPage) && $entriesPerPage >= 0) {
$this->entriesPerPage = round($entriesPerPage);
return true;
} else {
return false;
}
}

/** Setzt Wert fuer Link, zu dem verwiesen werden soll
* <b>WICHTIG</b> Die Variable, die den Wert der aktuellen Seite enthaelt muss ganz am Ende stehen und dahinter ein = (siehe Beispiele)!!
* Die Seitenzahl wird immer hinten angehangen, weshalb das unbedingt beachtet werden muss!
*
* @access public
* @param (string) $linkHref Link, zu dem verwiesen werden soll
* @return (bool) Gibt false zurueck, wenn $linkHref keinen gueltigen Wert hat
*/
public function setLinkHref($linkHref) {
if (is_string($linkHref)) {
if (substr($linkHref, -1) != ‘=’) {
$linkHref .= ‘=’;
}
$this->linkHref = trim($linkHref);
return true;
} else {
return false;
}
}

/** Setzt Trennzeichen zwischen Links Anfang/Zurueck und Weiter/Ende
*
* @access public
* @param (string) $delimiter1 Zeichen, die zwischen Links Anfang/Zurueck und Weiter/Ende angezeigt werden (siehe ‘Alle moeglichen Varianten’)
* @return (bool) Gibt false zurueck, wenn $delimiter1 keinen gueltigen Wert hat
*/
public function setDelimiter1($delimiter1 = ‘ — ‘) {
if (is_string($delimiter1)) {
$this->delimiter1 = $delimiter1;
return true;
} else {
return false;
}
}

/** Setzt Trennzeichen zwischen Links Zurueck und den Seitenzahlen sowie Weiter und den Seitenzahlen
*
* @access public
* @param (string) $delimiter2 Zeichen, die zwischen Links Zurueck und den Seitenzahlen sowie Weiter und den Seitenzahlen angezeigt werden (siehe ‘Alle moeglichen Varianten’)
* @return (bool) Gibt false zurueck, wenn $delimiter2 keinen gueltigen Wert hat
*/
public function setDelimiter2($delimiter2 = ‘ – ‘) {
if (is_string($delimiter2)) {
$this->delimiter2 = $delimiter2;
return true;
} else {
return false;
}
}

/** Setzt Trennzeichen zwischen Links der einzelnen Seiten
*
* @access public
* @param (string) $delimiter3 Zeichen, die zwischen Links der einzelnen Seiten gezeigt weden (siehe ‘Alle moeglichen Varianten’)
* @return (bool) Gibt false zurueck, wenn $delimiter3 keinen gueltigen Wert hat
*/
public function setDelimiter3($delimiter3 = ‘, ‘) {
if (is_string($delimiter3)) {
$this->delimiter3 = $delimiter3;
return true;
} else {
return false;
}
}

/** Setzt Trennzeichen zwischen Links der einzelnen Seiten
*
* @access public
* @param (string) $delimiter4 Zeichen, die zwischen Links der einzelnen Seiten gezeigt werden (siehe ‘Alle moeglichen Varianten’)
* @return (bool) Gibt false zurueck, wenn $delimiter4 keinen gueltigen Wert hat
*/
public function setDelimiter4($delimiter4 = ‘ … ‘) {
if (is_string($delimiter4)) {
$this->delimiter4 = $delimiter4;
return true;
} else {
return false;
}
}

/** Setzt Wert fuer Zeichen vor und hinter aktivem Link
*
* @access public
* @param (string) $linkActiveBracketLeft Zeichen vor aktivem Link (siehe ‘Variablen’)
* @param (string) $linkActiveBracketRight Zeichen hinter aktivem Link (siehe ‘Variablen’)
* @return (bool) Gibt false zurueck, wenn $linkActiveBracketLeft oder $linkActiveBracketRight keinen gueltigen Wert hat
*/
public function setLinkActiveBracket($linkActiveBracketLeft = ‘[‘, $linkActiveBracketRight = ‘]’) {
if (is_string($linkActiveBracketLeft) && is_string($linkActiveBracketRight)) {
$this->linkActiveBracketLeft = trim($linkActiveBracketLeft);
$this->linkActiveBracketRight = trim($linkActiveBracketRight);
return true;
} else {
return false;
}
}

/** Setzt erweiterte Einstellungen des aktiven Links
*
* @access public
* @param (string) $linkActiveMore Erweitere Einstellungen des aktiven Links (JavaScript, CSS, target, …)
* @return (bool) Gibt false zurueck, wenn $linkActiveMore keinen gueltigen Wert hat
*/
public function setLinkActiveMore($linkActiveMore = ”) {
if (is_string($linkActiveMore)) {
$linkActiveMore = ‘ ‘ . trim($linkActiveMore);
$this->linkActiveMore = $linkActiveMore;
return true;
} else {
return false;
}
}

/** Setzt Wert fuer Zeichen vor und hinter jeden (nicht aktiven) Link
*
* @access public
* @param (string) $linkBracketLeft Zeichen vor jedem (nicht aktiven) Link (siehe ‘Variablen’)
* @param (string) $linkBracketRight Zeichen hinter jedem (nicht aktiven) Link (siehe ‘Variablen’)
* @return (bool) Gibt false zurueck, wenn $linkBracketLeft keinen gueltigen Wert hat
*/
public function setLinkBracket($linkBracketLeft = ”, $linkBracketRight = ”) {
if (is_string($linkBracketLeft) && is_string($linkBracketRight)) {
$this->linkBracketLeft = trim($linkBracketLeft);
$this->linkBracketRight = trim($linkBracketRight);
return true;
} else {
return false;
}
}

/** Setzt erweiterte Einstellungen fuer jeden (nicht aktiven) Link
*
* @access public
* @param (string) $linkMore Erweitere Einstellungen des jedes (nicht aktiven) Links (JavaScript, CSS, target, …)
* @return (bool) Gibt false zurueck, wenn $linkMore keinen gueltigen Wert hat
*/
public function setLinkMore($linkMore = ”) {
if (is_string($linkMore)) {
$linkMore = ‘ ‘ . trim($linkMore);
$this->linkMore = $linkMore;
return true;
} else {
return false;
}
}

/** Setzt Text fuer Links Zurueck/Weiter
*
* @access public
* @param (string) $linkNextText Text des Links Weiter
* @param (string) $linkPrevText Text des Links Zurueck
* @return (bool) Gibt false zurueck, wenn $linkNextText oder $linkPrevText keinen gueltigen Wert hat
*/
public function setLinkNextPrevText($linkNextText = ‘Weiter’, $linkPrevText = ‘Zurück’) {
if (is_string($linkNextText) && is_string($linkPrevText)) {
$this->linkNextText = $linkNextText;
$this->linkPrevText = $linkPrevText;
return true;
} else {
return false;
}
}

/** Setzt erweiterte Einstellungen fuer Links Zurueck/Weiter
*
* @access public
* @param (string) $linkNextPrevMore Erweitere Einstellungen Links Zurueck/Weiter (JavaScript, CSS, target, …)
* @return (bool) Gibt false zurueck, wenn $linkNextPrevMore keinen gueltigen Wert hat
*/
public function setLinkNextPrevMore($linkNextPrevMore = ”) {
if (is_string($linkNextPrevMore)) {
$linkNextPrevMore = ‘ ‘ . trim($linkNextPrevMore);
$this->linkNextPrevMore = $linkNextPrevMore;
return true;
} else {
return false;
}
}

/** Setzt Text fuer Links Anfang/Ende
*
* @access public
* @param (string) $linkFirstText Text des Links Anfang
* @param (string) $linkLastText Text des Links Ende
* @return (bool) Gibt false zurueck, wenn $linkFirstText oder $linkLastText keinen gueltigen Wert hat
*/
public function setLinkFirstLastText($linkFirstText = ‘Anfang’, $linkLastText = ‘Ende’) {
if (is_string($linkFirstText) && is_string($linkLastText)) {
$this->linkFirstText = $linkFirstText;
$this->linkLastText = $linkLastText;
return true;
} else {
return false;
}
}

/** Setzt erweiterte Einstellungen fuer Links Anfang/Ende
*
* @access public
* @param (string) $linkFirstLastMore Erweitere Einstellungen Links Anfang/Ende (JavaScript, CSS, target, …)
* @return (bool) Gibt false zurueck, wenn $linkFirstLastMore keinen gueltigen Wert hat
*/
public function setLinkFirstLastMore($linkFirstLastMore = ”) {
if (is_string($linkFirstLastMore)) {
$linkFirstLastMore = ‘ ‘ . trim($linkFirstLastMore);
$this->linkFirstLastMore = $linkFirstLastMore;
return true;
} else {
return false;
}
}

/** Setzt den Wert, wie viele Links gezeigt werden sollen
*
* @access public
* @param (int) $showCount Gibt Zahl der Links an, die nebeneinander gezeigt werden (ungerade Zahlen sind idealer)
* @return (bool) Gibt false zurueck, wenn $showCount keinen gueltigen Wert hat
*/
public function setShowCount($showCount = 3) {
if (is_numeric($showCount) && $showCount >= 3) {
$this->showCount = ceil($showCount);
return true;
} else {
return false;
}
}

/** Setzt den Wert, um wie viele Seiten bei Weiter/Zurueck gesprungen werden soll
*
* @access public
* @param (bool) $stepsNextPrev Gibt Zahl der Seiten an, um die bei Weiter/Zurueck gesprungen werden soll
* @return (bool) Gibt false zurueck, wenn $stepsNextPrev keinen gueltigen Wert hat
*/
public function setStepsNextPrev($stepsNextPrev = null) {
if (is_numeric($stepsNextPrev) && $stepsNextPrev >= 1) {
$this->stepsNextPrev = round($stepsNextPrev);
return true;
} else {
return false;
}
}

/** Setzt den Wert, ob alle Links auf einmal gezeigt werden sollen
*
* @access public
* @param (bool) $showContinuous Wenn true, dann werden alle Links auf einmal gezeigt
* @return (bool) Gibt false zurueck, wenn $showOuter keinen gueltigen Wert hat
*/
public function setShowContinuous($showContinuous = false) {
if (is_bool($showContinuous)) {
$this->showContinuous = $showContinuous;
return true;
} else {
return false;
}
}

/** Setzt den Wert, ob aeussere Links der Seiten gezeigt werden sollen
*
* @access public
* @param (bool) $showOuter Wenn true, dann werden aeusseren Links der Seiten angezeigt (siehe ‘Alle moeglichen Varianten’)
* @return (bool) Gibt false zurueck, wenn $showOuter keinen gueltigen Wert hat
*/
public function setShowOuter($showOuter = true) {
if (is_bool($showOuter)) {
$this->showOuter = $showOuter;
return true;
} else {
return false;
}
}

/** Setzt den Wert, ob Link der aktuellen Seite gezeigt werden soll
*
* @access public
* @param (bool) $showActiveLink Wenn true, dann wird der Link der aktuellen Seite angezeigt
* @return (bool) Gibt false zurueck, wenn $showActiveLink keinen gueltigen Wert hat
*/
public function setShowActiveLink($showActiveLink = true) {
if (is_bool($showActiveLink)) {
$this->showActiveLink = $showActiveLink;
return true;
} else {
return false;
}
}

/** Setzt den Wert, ob Links fuer Zurueck/Weiter gezeigt werden sollen
*
* @access public
* @param (bool) $showNextPrev Wenn true, dann werden Links fuer Zurueck/Weiter angezeigt
* @return (bool) Gibt false zurueck, wenn $showNextPrev keinen gueltigen Wert hat
*/
public function setShowNextPrev($showNextPrev = true) {
if (is_bool($showNextPrev)) {
$this->showNextPrev = $showNextPrev;
return true;
} else {
return false;
}
}

/** Setzt den Wert, ob Links fuer Anfang/Ende gezeigt werden sollen
*
* @access public
* @param (bool) $showFirstLast Wenn true, dann werden Links fuer Anfang/Ende angezeigt
* @return (bool) Gibt false zurueck, wenn $showFirstLast keinen gueltigen Wert hat
*/
public function setShowFirstLast($showFirstLast = true) {
if (is_bool($showFirstLast)) {
$this->showFirstLast = $showFirstLast;
return true;
} else {
return false;
}
}

/** Setzt den Wert, ob ein einzelner Link gezeigt werden sollen
*
* @access public
* @param (bool) $showSingleLink Wenn true, wird auch bei nur einer Seite ein Link zurueckgegeben, sonst nichts
* @return (bool) Gibt false zurueck, wenn $showSingleLink keinen gueltigen Wert hat
*/
public function setShowSingleLink($showSingleLink = false) {
if (is_bool($showSingleLink)) {
$this->showSingleLink = $showSingleLink;
return true;
} else {
return false;
}
}

/** Gibt Zahl zu zeigender Ergebnisse pro Seite zurueck
*
* @access public
* @return (int) Zahl zu zeigender Ergebnisse pro Seite
*/
public function getEntriesPerPage() {
return $this->entriesPerPage;
}

/** Gibt (eventuell korrigierte) Zahl der aktuellen Seite zurueck
*
* @access public
* @return (int) (eventuell korrigierte) Zahl der aktuellen Seite
*/
public function getActivePage() {
return $this->activePage;
}

/** Zeigt den Wert aller Variablen an
*
* @access public
*/
public function dump() {
$width = 30;
$vars = array (
‘activePage’,
‘delimiter1’,
‘delimiter2’,
‘delimiter3’,
‘delimiter4’,
‘entries’,
‘entriesPerPage’,
‘linkActiveBracketLeft’,
‘linkActiveBracketRight’,
‘linkActiveMore’,
‘linkActiveText’,
‘linkBracketLeft’,
‘linkBracketRight’,
‘linkCount’,
‘linkCountSurround’,
‘linkFirstLastMore’,
‘linkFirstText’,
‘linkHref’,
‘linkLastText’,
‘linkMore’,
‘linkNextPrevMore’,
‘linkNextText’,
‘linkPrevText’,
‘linkText’,
‘pageFirst’,
‘pageLast’,
‘pageNext’,
‘pagePrev’,
‘showActiveLink’,
‘showContinuous’,
‘showCount’,
‘showFirstLast’,
‘showNextPrev’,
‘showOuter’,
‘showSingleLink’,
‘stepsNextPrev’
);

echo “<pre>\n”;

for ($i = 0; $i < count($vars); $i++) {
$temp = $this->$vars[$i];

if (is_bool($temp)) {
$temp = $temp ? ‘true’ : ‘false’;
}

echo ‘$’ . str_pad($vars[$i], $width, ‘ ‘, STR_PAD_RIGHT) . ” = $temp\n”;
}

if (is_array($this->links)) {
echo ‘$links = ‘;
print_r ($this->links);

echo ‘$links = Array’ . “\n(\n”;

for ($i = 0; $i < count($this->links); $i++) {
echo ” [$i] => ” . htmlentities($this->links[$i]) . “\n”;
}

echo “)\n”;
} else {
echo ‘$’ . str_pad(‘links’, $width, ‘ ‘, STR_PAD_RIGHT) . ” = $this->links\n”;

echo ‘$’ . str_pad(‘links’, $width, ‘ ‘, STR_PAD_RIGHT) . ‘ = ‘
. htmlentities(str_replace(‘<a href’, “\n <a href”, $this->links)) . “\n”;
}

echo “</pre>\n”;
}

// Wer hier Werte setzt, der sollte sicher sein, dass sie richtig sind, geprueft werden sie nicht!
// Also lieber die dafuer vorgesehenen Methoden nutzen.

//////////////////////////////////////////////////
// Erforderliche Variablen
//////////////////////////////////////////////////
/** Zahl der aktuellen Seite (Seite 1 hat Wert $this->numberFirstPage)
*
* @access private
* @var (int)
*/
private $activePage = 0;

/** Welchen Wert soll die erste Seite haben?
*
* @access private
* @var (int)
*/
private $numberFirstPage = 1;

/** Anzahl aller Eintraege
*
* @access private
* @var (int)
*/
private $entries = 0;

/** Eintraege, die pro Seite gezeigt werden sollen
*
* @access private
* @var (int)
*/
private $entriesPerPage = 3;

/** URI zur Datei, plus Variablen, fuer Links
*
* @access private
* @var (string)
*/
private $linkHref = ”;

//////////////////////////////////////////////////
// Optionale Variablen
//////////////////////////////////////////////////
/** Trennzeichen, siehe ‘Variablen fuer Links’
*
* @access private
* @var (string)
*/
private $delimiter1 = ‘ – ‘;

/**
*
* @access private
* @var (string)
*/
private $delimiter2 = ‘ – ‘;

/** Trennzeichen, siehe ‘Variablen fuer Links’
*
* @access private
* @var (string)
*/
private $delimiter3 = ‘ – ‘;

/** Trennzeichen, siehe ‘Variablen fuer Links’
*
* @access private
* @var (string)
*/
private $delimiter4 = ‘ … ‘;

/** Text vor aktivem Link, siehe ‘Variablen fuer Links’
*
* @access private
* @var (string)
*/
private $linkActiveText = ”;

/** Zeichen vor aktivem Link, siehe ‘Variablen fuer Links’
*
* @access private
* @var (string)
*/
private $linkActiveBracketLeft = ‘[‘;

/** Zeichen hinter aktivem Link, siehe ‘Variablen fuer Links’
*
* @access private
* @var (string)
*/
private $linkActiveBracketRight = ‘]’;

/** Zusaetzliche Angaben zum aktiven Link, siehe ‘Variablen fuer Links’
*
* @access private
* @var (string)
*/
private $linkActiveMore = ”;

/** Zeichen vor nicht-aktiven Links, siehe ‘Variablen fuer Links’
*
* @access private
* @var (string)
*/
private $linkText = ”;

/** Zeichen vor nicht-aktiven Links, siehe ‘Variablen fuer Links’
*
* @access private
* @var (string)
*/
private $linkBracketLeft = ”;

/** Zeichen hinter nicht-aktiven Links, siehe ‘Variablen fuer Links’
*
* @access private
* @var (string)
*/
private $linkBracketRight = ”;

/** Zusaetzliche Angaben zu nicht-aktiven Links, siehe ‘Variablen fuer Links’
*
* @access private
* @var (string)
*/
private $linkMore = ”;

/** Text fuer ‘Weiter’ (naechste Seite), siehe ‘Variablen fuer Links’
*
* @access private
* @var (string)
*/
private $linkNextText = ‘Weiter’;

/** Text fuer ‘Zurueck’ (vorherige Seite), siehe ‘Variablen fuer Links’
*
* @access private
* @var (string)
*/
private $linkPrevText = ‘Zurück’;

/** Zusaetzliche Angaben zu Links ‘Weiter’ und ‘Zurueck’, siehe ‘Variablen fuer Links’
*
* @access private
* @var (string)
*/
private $linkFirstLastMore = ”;

/** Text fuer ‘Anfang’ (erste Seite), siehe ‘Variablen fuer Links’
*
* @access private
* @var (string)
*/
private $linkFirstText = ‘Anfang’;

/** Text fuer ‘Ende’ (letzte Seite), siehe ‘Variablen fuer Links’
*
* @access private
* @var (string)
*/
private $linkLastText = ‘Ende’;

/** Zusaetzliche Angaben zu Links ‘Anfang’ und ‘Ende’, siehe ‘Variablen fuer Links’
*
* @access private
* @var (string)
*/
private $linkNextPrevMore = ”;

/** Anzahl Links, die nebeneinander gezeigt werden, siehe ‘Variablen fuer Links’
*
* @access private
* @var (int)
*/
private $showCount = 3;

/** Alle Links zeigen ja/nein, siehe ‘Variablen fuer Links’
*
* @access private
* @var (bool)
*/
private $showContinuous = false;

/** Aeussere Links zeigen ja/nein, siehe ‘Variablen fuer Links’
*
* @access private
* @var (bool)
*/
private $showOuter = true;

/** ‘Weiter’ und ‘Zurueck’ zeigen ja/nein, siehe ‘Variablen fuer Links’
*
* @access private
* @var (bool)
*/
private $showNextPrev = true;

/** ‘Anfang’ und ‘Ende’ zeigen ja/nein, siehe ‘Variablen fuer Links’
*
* @access private
* @var (bool)
*/
private $showFirstLast = true;

/** Link der aktuellen Seite zeigen ja/nein, siehe ‘Variablen fuer Links’
*
* @access private
* @var (bool)
*/
private $showActiveLink = true;

/** Wenn nur eine Seite, Link zeigen ja/nein, siehe ‘Variablen fuer Links’
*
* @access private
* @var (bool)
*/
private $showSingleLink = false;

/** Um wie viele Seiten Weiter/Zurueck springen soll
*
* @access private
* @var (bool)
*/
private $stepsNextPrev = 1;

//////////////////////////////////////////////////
// Voll und ganz interne Variablen
//////////////////////////////////////////////////
/** Anzahl aller Links
*
* @access private
* @var (int)
*/
private $linkCount = 0;

/** Anzahl der Links, die den aktuellen umgeben
*
* @access private
* @var (int)
*/
private $linkCountSurround = 0;

/** Seitenzahl fuer vorherige Seite
*
* @access private
* @var (int)
*/
private $pagePrev = 0;

/** Seitenzahl fuer naechste Seite
*
* @access private
* @var (int)
*/
private $pageNext = 0;

/** Seitenzahl fuer erste Seite
*
* @access private
* @var (int)
*/
private $pageFirst = 0;

/** Seitenzahl fuer letzte Seite
*
* @access private
* @var (int)
*/
private $pageLast = 0;

/** Array aller Links, String mit Links bei Uebergabe
*
* @access private
* @var (mixed)
*/
private $links = array ();
}

/*
//////////////////////////////////////////////////
// Ein paar (alle?) Beispiele
//////////////////////////////////////////////////
echo “<html><body bgcolor=’white’ style=’margin:5px; font-size:0.8em; font-family:verdana;’>\n”;
$activePage = !empty($_GET[‘page’]) ? $_GET[‘page’] : 0;
$PAGES=54;

echo ‘alle, mit aktivem und mit grossen (5 Seiten) Spruengen<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowContinuous(true);
$blaettern->setShowOuter(false);
$blaettern->setShowActiveLink(true);
$blaettern->setStepsNextPrev(5);
echo $blaettern->create().”<br>\n”;

echo ‘<br>3 Links – innere, mit aktivem und grossen (3 Seiten) Spruengen<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowCount(3);
$blaettern->setShowContinuous(false);
$blaettern->setShowOuter(false);
$blaettern->setShowActiveLink(true);
$blaettern->setStepsNextPrev(3);
echo $blaettern->create().”<br>\n”;

echo ‘<br>Aktuelle Seite und Eintraege pro Seite fuer obige Links<br>’;
echo ‘Active page: ‘.$blaettern->getActivePage().’, Eintraege pro Seite: ‘.$blaettern->getEntriesPerPage().”<br>\n”;

echo ‘<hr>’;
echo ‘<br>alle, mit aktivem<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowCount(3);
$blaettern->setShowContinuous(true);
$blaettern->setShowOuter(false);
$blaettern->setShowActiveLink(true);
echo $blaettern->create().”<br>\n”;

echo ‘<br>alle, ohne aktivem<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowCount(3);
$blaettern->setShowContinuous(true);
$blaettern->setShowOuter(false);
$blaettern->setShowActiveLink(false);
echo $blaettern->create().”<br>\n”;

echo ‘<br>alle, mit aktivem<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowCount(4);
$blaettern->setShowContinuous(true);
$blaettern->setShowOuter(false);
$blaettern->setShowActiveLink(true);
echo $blaettern->create().”<br>\n”;

echo ‘<br>alle, ohne aktivem<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowCount(4);
$blaettern->setShowContinuous(true);
$blaettern->setShowOuter(false);
$blaettern->setShowActiveLink(false);
echo $blaettern->create().”<br>\n”;

echo ‘<br>alle, mit aktivem<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowCount(5);
$blaettern->setShowContinuous(true);
$blaettern->setShowOuter(false);
$blaettern->setShowActiveLink(true);
echo $blaettern->create().”<br>\n”;

echo ‘<br>alle, ohne aktivem<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowCount(5);
$blaettern->setShowContinuous(true);
$blaettern->setShowOuter(false);
$blaettern->setShowActiveLink(false);
echo $blaettern->create().”<br>\n”;

echo ‘<hr>’;
echo ‘<br>3 Links – innere, mit aktivem<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowCount(3);
$blaettern->setShowContinuous(false);
$blaettern->setShowOuter(false);
$blaettern->setShowActiveLink(true);
echo $blaettern->create().”<br>\n”;

echo ‘<br>3 Links – innere, ohne aktivem<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowCount(3);
$blaettern->setShowContinuous(false);
$blaettern->setShowOuter(false);
$blaettern->setShowActiveLink(false);
echo $blaettern->create().”<br>\n”;

echo ‘<br>4 Links – innere, mit aktivem<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowCount(4);
$blaettern->setShowContinuous(false);
$blaettern->setShowOuter(false);
$blaettern->setShowActiveLink(true);
echo $blaettern->create().”<br>\n”;

echo ‘<br>4 Links – innere, ohne aktivem<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowCount(4);
$blaettern->setShowContinuous(false);
$blaettern->setShowOuter(false);
$blaettern->setShowActiveLink(false);
echo $blaettern->create().”<br>\n”;

echo ‘<br>5 Links – innere, mit aktivem<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowCount(5);
$blaettern->setShowContinuous(false);
$blaettern->setShowOuter(false);
$blaettern->setShowActiveLink(true);
echo $blaettern->create().”<br>\n”;

echo ‘<br>5 Links – innere, ohne aktivem<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowCount(5);
$blaettern->setShowContinuous(false);
$blaettern->setShowOuter(false);
$blaettern->setShowActiveLink(false);
echo $blaettern->create().”<br>\n”;

echo ‘<hr>’;
echo ‘<br>3 Links – aeussere, mit aktivem<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowCount(3);
$blaettern->setShowContinuous(false);
$blaettern->setShowOuter(true);
$blaettern->setShowActiveLink(true);
echo $blaettern->create().”<br>\n”;

echo ‘<br>3 Links – aeussere, ohne aktivem<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowCount(3);
$blaettern->setShowContinuous(false);
$blaettern->setShowOuter(true);
$blaettern->setShowActiveLink(false);
echo $blaettern->create().”<br>\n”;

echo ‘<br>4 Links – aeussere, mit aktivem<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowCount(4);
$blaettern->setShowContinuous(false);
$blaettern->setShowOuter(true);
$blaettern->setShowActiveLink(true);
echo $blaettern->create().”<br>\n”;

echo ‘<br>4 Links – aeussere, ohne aktivem<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowCount(4);
$blaettern->setShowContinuous(false);
$blaettern->setShowOuter(true);
$blaettern->setShowActiveLink(false);
echo $blaettern->create().”<br>\n”;

echo ‘<br>5 Links – aeussere, mit aktivem<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowCount(5);
$blaettern->setShowContinuous(false);
$blaettern->setShowOuter(true);
$blaettern->setShowActiveLink(true);
echo $blaettern->create().”<br>\n”;

echo ‘<br>5 Links – aeussere, ohne aktivem<br>’;
$blaettern=new blaettern($activePage, $PAGES);
$blaettern->setLinkHref($_SERVER[‘PHP_SELF’].’?page=’);
$blaettern->setShowCount(5);
$blaettern->setShowContinuous(false);
$blaettern->setShowOuter(true);
$blaettern->setShowActiveLink(false);
echo $blaettern->create().”<br>\n”;
*/
?>

Posted in Dev
Scroll To Top