Seite 2 von 3

Verfasst: Do 26. Jan 2006, 10:19
von mvf
ich habe hier mal (m)eine version ohne startartikel - ohne garantie :?

di geschichte mit der teilung ist doch ne gröbere sache :( input immernoch herzlich willkommen ;)

Code: Alles auswählen

<?php
/**
  * $Revision: 1.12 $
  * $Source: D:/cvs/cvsrepo/test/PPI_Nade/module/pageTurning/output.php,v $
  * $Date: 2005/11/29 18:36:15 $
  */

/**
 * pageTurning
 * @author Andreas Kummer
 * @copyright Copyright &copy; 2005 w3concepts AG
 */
 
if (!class_exists('pageTurning')) {

   class pageTurning {

      /**
       * Konstruktor der Klasse.
       * @param String  Ordnungsprinzip (sorted, alphabetical, created,
       * modified).
       * @param Boolean  True = ASC, False = DESC
       */
      function pageTurning($sortCriteria, $asc = true) {

         global $client, $lang, $idcat, $cfg, $idart;

         $this->client = $client;
         $this->lang = $lang;
         $this->idcat = $idcat;
         $this->cfg = $cfg;
         $this->idart = $idart;

         $this->before('<div>');
         $this->after('</div>');
         $this->between(' | ');
         $this->first('');
         $this->last('');
         $this->aClass('');
         $this->aStyle('text-decoration:none;');
         $this->aStyleSelected('font-weight:bold;');
         $this->previousPage('<<<');
         $this->nextPage('>>>');

         $this->db = new DB_Contenido();

         $this->readArticles($sortCriteria, $asc);
      }

      /**
       * Setzt den Text für den ersten Eintrag.
       * @param String  Text für den ersten Eintrag.
       */
      function first($text) {

         $this->first = $text;
      }

      /**
       * Setzt den Text für den letzten Eintrag.
       * @param String  Text für den letzten Eintrag.
       */
      function last($text) {

         $this->last = $text;
      }

      /**
       * Setzt den HTML-Code, der vor der Blätteranzeige ausgegeben wird.
       * @param String  HTML-Code, der vor der Blätteranzeige ausgegen werden
       * wird.
       */
      function before($text) {

         $this->before = $text;
      }

      /**
       * Setzt den HTML-Code, der nach der Blätteranzeige ausgegeben werden
       * wird.
       * @param String  HTML-Code, der nach der Blätteranzeige ausgegeben
       * werden wird.
       */
      function after($text) {

         $this->after = $text;
      }

      /**
       * Setzt den Text, der zwischen zwei Seitenzahlen ausgegeben werden
       * wird.
       * @param String  Text, der zwischen zwei Seitenzahlen ausgegeben werden
       * wird.
       */
      function between($text) {

         $this->between = $text;
      }

      /**
       * Setzt den Klassennamen, der für die Links zu verwenden ist.
       * @param String  Klassenname, der den Links zuzuordnen ist.
       */
      function aClass($name) {

         $this->aClass = $name;
      }

      function aStyle($style) {

         $this->aStyle = $style;
      }

      function aStyleSelected($style) {

         $this->aStyleSelected = $style;
      }

      function previousPage($text) {

         $this->previousPage = $text;
      }

      function nextPage($text) {

         $this->nextPage = $text;
      }

      /**
       * Liest die Artikel der aktuellen Kategorie ein.
       * @param String  Ordnungsprinzip.
       * @param Boolean  True = aufsteigend, False = absteigend
       */
      function readArticles($sortCriteria, $asc) {

         /*
          * Ordnungsprinzip fest legen
          */
         $order = ($asc) ? ('ASC') : ('DESC');

         /*
          * Sortierkriterium fest legen
          */
         switch ($sortCriteria) {
            case 'created':
               $sortOrder = 'b.created '.$order;
               break;
            case 'modified':
               $sortOrder = 'b.lastmodified '.$order;
               break;
            case 'sorted':
               $sortOrder = 'b.artsort '.$order.', b.title '.$order;
               break;
            case 'alphabetical':
               $sortOrder = 'b.title '.$order;
               break;
            default:
               $sortOrder = 'b.lastmodified '.$order;
         }

         /*
          * Absetzen des Queries.
          */
         $this->db->query("" .
               "SELECT " .
               "   b.idart " .
               "FROM {$this->cfg['tab']['cat_art']} as a, " .
               "{$this->cfg['tab']['cat_lang']} as c " .
               "LEFT JOIN {$this->cfg['tab']['art_lang']} as b ON a.idart = b.idart " .
               "WHERE " .
               "   a.idcat = {$this->idcat} " .
               "   AND b.idlang = {$this->lang} " .
               "   AND b.online = 1 " .
               "   AND a.idcat = c.idcat " .
               "   AND b.idartlang != c.startidartlang " .
               "ORDER BY " .
               "   $sortOrder " .
               "");

         while ($this->db->next_record()) {
            $this->articles[] = $this->db->f('idart');
         }
      }
      


      /**
       * Gibt die Blätterleiste an die Standardausgabe aus.
       */
      function show() {

         if (empty($this->articles) || count($this->articles) == 1) {
            return false;
         }

         /*
          * Ermittlung der aktuellen Position
          */
         $position = array_search ($this->idart,$this->articles);

         $startPosition = ($this->first != '') ? (1) : (0);
         $endPosition = ($this->last != '') ? (count($this->articles) - 1) : (count($this->articles));

         /*
          * Ausgabe Previous
          */
         if ($position > 0) {
            $previous = $position - 1;
            echo $this->before.'<a href="front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[$previous].'&lang='.$this->lang.'&client='.$this->client.'" class="'.$this->aClass.'">'.$this->previousPage.'</a>&nbsp;&nbsp;&nbsp;';
         } else {
            echo $this->before;
         }

         if ($this->first != '') {
            /*
             * Ausgabe Link auf die erste Seite
             */
            echo '<a href="front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[0].'&lang='.$this->lang.'&client='.$this->client.'" class="'.$this->aClass.'">'.$this->first.'</a>';
         }



         for ($i = $startPosition; $i < $endPosition; $i++) {
            $seite = $i + 1;

                        if ($i > 0) {
                           echo $this->between;
                        }
                        $style = ' style="'.$this->aStyle;
                        if ($i == $position) {
                           $style .= $this->aStyleSelected;
                        }
                        $style .= '"';
                        echo '<a href="front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[$i].'&lang='.$this->lang.'&client='.$this->client.'" class="'.$this->aClass.'"'.$style.'>'.$seite.'</a>';

            }



         if ($this->last != '') {
            /*
             * Ausgabe Link auf die letzte Seite
             */
            echo $this->between.'<a href="front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[count($this->articles)-1].'&lang='.$this->lang.'&client='.$this->client.'" class="'.$this->aClass.'">'.$this->last.'</a>';
         }

         /*
          * Ausgabe Next
          */
         if ($position < count($this->articles) - 1) {
            $next = $position + 1;
            echo '&nbsp;&nbsp;&nbsp;<a href="front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[$next].'&lang='.$this->lang.'&client='.$this->client.'" class="'.$this->aClass.'">'.$this->nextPage.'</a>'.$this->after;
         } else {
            echo $this->after;
         }

      }
   }
}

// Klasseninstantiierung
$pageTurning = new pageTurning('created');

// Angabe der zu verwendenden A-Klasse (für die Links)
$pageTurning->aClass('');

// Styleangabe für alle Links
$pageTurning->aStyle('text-decoration:underline;');

// Styleangabe für den aktuellen Artikel
$pageTurning->aStyleSelected('font-weight:bold; color:red;');

// Anzeige für vorige Seite
$pageTurning->previousPage('<<< ');

// Anzeige nächste Seite
$pageTurning->nextPage(' >>>');

// Alternativausgabe für die erste Seite (anstatt 1)
$pageTurning->first(' FirstPage &nbsp;&nbsp;');

// Alternativausgabe für die letzte Seite
$pageTurning->last('&nbsp;&nbsp; LastPage ');

// Ausgabe vor der Blätterleiste
$pageTurning->before('<div width="559px" align="center" style="padding:20px;">');

// Ausgabe zwischen zwei Seitenzahlen
$pageTurning->between('&nbsp;');

// Ausgabe nach der Blätterleiste
$pageTurning->after('</div>');

// Ausgabe an den Browser
$pageTurning->show();
?>

Verfasst: Fr 27. Jan 2006, 12:22
von mvf
keiner der ein wenig input geben kann wie man die ausgabe splitted?

Verfasst: Fr 27. Jan 2006, 12:26
von rezeptionist
ich denke der ansatzpunkt sollte der sein das du dir die aktuelle position genauer anschaust und versuchst ihr zu sagen das sie 3 Seiten davor und 3 danach anzeigt

hab mir jetzt nicht so den kopf damit gemacht wie aber ich denke das wäre der richtige weg

Verfasst: Fr 27. Jan 2006, 13:04
von mvf
hallo rezeptionist

nun ich denke mit 3 vor 3 zurück ist es nicht ganz getan :?
ziel ist es eine umsetzung wie hier im board herzubringen, etwas umfangreicher, aber ich bleibe dran ;)

Verfasst: Fr 27. Jan 2006, 13:09
von rezeptionist
die 3 wra nur ein beispiel aber ich denke der "einsprungpunkt" sollte die aktuelle Position sein :wink:

Verfasst: Fr 27. Jan 2006, 13:21
von mvf
wie gesagt die teilung erste3 .... mitte3 ... letzte 3 habe ich jier local schon, und weiter oben im thrad steht ja auch der code für die vorstufe erste3 ... alle ... letzte3, interessant widr es bei den übergängen

aber ich glaube wir ähneln uns was den biss angeht ;) das wird wohl auch noch zu packen sein. nd wenn die pageturning funktion eine teilng in abhängigkeit von der menge der atikel selbst vornimmt, plus startartikel ein aus, dann wäre das doch die perfekte universelle blätterfunktion :D

Verfasst: Fr 27. Jan 2006, 13:28
von rezeptionist
ich denke das bringt die Zeit die ich aber im moment zu wenig habe aber ich sage es mal so wenn jeder nur ne kleinigkeit beiträgt dann wird das schon

Verfasst: Fr 27. Jan 2006, 13:36
von mvf
rezeptionist hat geschrieben:... wenn jeder nur ne kleinigkeit beiträgt dann wird das schon
correct !!! ;)

startartikel ein aus funzt schon, muss nur noch im output integriert werden, aber das ist reines doing, insofern ... hands on und weiter im text ;)

melde mich wieder wennich denke dass ich neuen input benötige

merci derweilen

Verfasst: Fr 27. Jan 2006, 16:54
von nicnac
mvf hat geschrieben: startartikel ein aus funzt schon, muss nur noch im output integriert werden,
wäre das vielleicht schon möglich?
bitte, bitte....

das ist nämlich genau das, was mir noch fehlt.

Verfasst: Fr 27. Jan 2006, 16:55
von rezeptionist
nicnac hat geschrieben:
mvf hat geschrieben: startartikel ein aus funzt schon, muss nur noch im output integriert werden,
wäre das vielleicht schon möglich?
bitte, bitte....

das ist nämlich genau das, was mir noch fehlt.
ähm diese Seite ganz oben glaub ich hat mvf den code gepostet

Verfasst: Fr 27. Jan 2006, 16:57
von mvf
um den startartikel zunächst mal generell auszuschliessen und die sortorder auf lastmodified zu setzen habe ich die DB-abfrage wie folgt geändert:

Code: Alles auswählen

         /*
          * Absetzen des Queries.
          */
         $this->db->query("" .
               "SELECT " .
               "   b.idart " .
               "FROM {$this->cfg['tab']['cat_art']} as a, " .
               "{$this->cfg['tab']['cat_lang']} as c " .
               "LEFT JOIN {$this->cfg['tab']['art_lang']} as b ON a.idart = b.idart " .
               "WHERE " .
               "   a.idcat = {$this->idcat} " .
               "   AND b.idlang = {$this->lang} " .
               "   AND b.online = 1 " .
               "   AND a.idcat = c.idcat " .
               "   AND b.idartlang != c.startidartlang " .
               "ORDER BY " .
               "   b.lastmodified DESC " .
               "");

Verfasst: Fr 27. Jan 2006, 17:04
von mvf
rezeptionist hat geschrieben:ähm diese Seite ganz oben glaub ich hat mvf den code gepostet
correct ;)

und auch auf die gefahr hin, dass es hier zieeeeeeeemlich lang wird, mal meine weiteren hirnexkremente

wahrscheinlich gehe ich ziemlich umständlich an die geschichte ran, aber es gibt da doch einige möglichkeiten um des korrekt und universell abzubilden, also bau ich erst mal einfache if abfragen und teste durch

mit sicherheit geht des viel eleganter aber ... jeda wia 'r koa ... rookie style ;) bin für jeden input wirklich dankbar ;)

vieleicht sollte ich ja auch mal ein wneig mit den augen rollen :roll: und ganz lieb BITTE BITTE sagen um die cracks auf den plan zu rufen

Code: Alles auswählen

<?php
/**
  * $Revision: 1.12 $
  * $Source: D:/cvs/cvsrepo/test/PPI_Nade/module/pageTurning/output.php,v $
  * $Date: 2005/11/29 18:36:15 $
  */

/**
 * pageTurning
 * @author Andreas Kummer
 * @copyright Copyright &copy; 2005 w3concepts AG
 */
 
if (!class_exists('pageTurning')) {

   class pageTurning {

      /**
       * Konstruktor der Klasse.
       * @param String  Ordnungsprinzip (sorted, alphabetical, created,
       * modified).
       * @param Boolean  True = ASC, False = DESC
       */
      function pageTurning($sortCriteria, $asc = true) {

         global $client, $lang, $idcat, $cfg, $idart;

         $this->client = $client;
         $this->lang = $lang;
         $this->idcat = $idcat;
         $this->cfg = $cfg;
         $this->idart = $idart;

         $this->before('<div>');
         $this->after('</div>');
         $this->between(' | ');
         $this->first('');
         $this->last('');
         $this->aClass('');
         $this->aStyle('text-decoration:none;');
         $this->aStyleSelected('font-weight:bold;');
         $this->previousPage('<<<');
         $this->nextPage('>>>');

         $this->db = new DB_Contenido();

         $this->readArticles($sortCriteria, $asc);
      }

      /**
       * Setzt den Text für den ersten Eintrag.
       * @param String  Text für den ersten Eintrag.
       */
      function first($text) {

         $this->first = $text;
      }

      /**
       * Setzt den Text für den letzten Eintrag.
       * @param String  Text für den letzten Eintrag.
       */
      function last($text) {

         $this->last = $text;
      }

      /**
       * Setzt den HTML-Code, der vor der Blätteranzeige ausgegeben wird.
       * @param String  HTML-Code, der vor der Blätteranzeige ausgegen werden
       * wird.
       */
      function before($text) {

         $this->before = $text;
      }

      /**
       * Setzt den HTML-Code, der nach der Blätteranzeige ausgegeben werden
       * wird.
       * @param String  HTML-Code, der nach der Blätteranzeige ausgegeben
       * werden wird.
       */
      function after($text) {

         $this->after = $text;
      }

      /**
       * Setzt den Text, der zwischen zwei Seitenzahlen ausgegeben werden
       * wird.
       * @param String  Text, der zwischen zwei Seitenzahlen ausgegeben werden
       * wird.
       */
      function between($text) {

         $this->between = $text;
      }

      /**
       * Setzt den Klassennamen, der für die Links zu verwenden ist.
       * @param String  Klassenname, der den Links zuzuordnen ist.
       */
      function aClass($name) {

         $this->aClass = $name;
      }

      function aStyle($style) {

         $this->aStyle = $style;
      }

      function aStyleSelected($style) {

         $this->aStyleSelected = $style;
      }

      function previousPage($text) {

         $this->previousPage = $text;
      }

      function nextPage($text) {

         $this->nextPage = $text;
      }

      /**
       * Liest die Artikel der aktuellen Kategorie ein.
       * @param String  Ordnungsprinzip.
       * @param Boolean  True = aufsteigend, False = absteigend
       */
      function readArticles($sortCriteria, $asc) {

         /*
          * Ordnungsprinzip fest legen
          */
         $order = ($asc) ? ('ASC') : ('DESC');

         /*
          * Sortierkriterium fest legen
          */
         switch ($sortCriteria) {
            case 'created':
               $sortOrder = 'b.created '.$order;
               break;
            case 'modified':
               $sortOrder = 'b.lastmodified '.$order;
               break;
            case 'sorted':
               $sortOrder = 'b.artsort '.$order.', b.title '.$order;
               break;
            case 'alphabetical':
               $sortOrder = 'b.title '.$order;
               break;
            default:
               $sortOrder = 'b.lastmodified '.$order;
         }



         /*
          * Absetzen des Queries.
          */
         $this->db->query("" .
               "SELECT " .
               "   b.idart " .
               "FROM {$this->cfg['tab']['cat_art']} as a, " .
               "{$this->cfg['tab']['cat_lang']} as c " .
               "LEFT JOIN {$this->cfg['tab']['art_lang']} as b ON a.idart = b.idart " .
               "WHERE " .
               "   a.idcat = {$this->idcat} " .
               "   AND b.idlang = {$this->lang} " .
               "   AND b.online = 1 " .
               "   AND a.idcat = c.idcat " .
               "   AND b.idartlang != c.startidartlang " .
               "ORDER BY " .
               "   b.lastmodified DESC " .
               "");

         while ($this->db->next_record()) {
            $this->articles[] = $this->db->f('idart');
         }
      }
      


      /**
       * Gibt die Blätterleiste an die Standardausgabe aus.
       */
      function show() {

         if (empty($this->articles) || count($this->articles) == 1) {
            return false;
         }

         /*
          * Ermittlung der aktuellen Position
          */
         $position = array_search ($this->idart,$this->articles);

         $startPosition = ($this->first != '') ? (1) : (0);
         $endPosition = ($this->last != '') ? (count($this->articles) - 1) : (count($this->articles));

         /*
          * Ausgabe Previous
          */
         if ($position > 0) {
            $previous = $position - 1;
            echo $this->before.'<a href="front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[$previous].'&lang='.$this->lang.'&client='.$this->client.'" class="'.$this->aClass.'">'.$this->previousPage.'</a>&nbsp;&nbsp;&nbsp;';
         } else {
            echo $this->before;
         }

         if ($this->first != '') {
            /*
             * Ausgabe Link auf die erste Seite
             */
            echo '<a href="front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[0].'&lang='.$this->lang.'&client='.$this->client.'" class="'.$this->aClass.'">'.$this->first.'</a>';
         }

/*******************************************************************************
* ist die anzahl der artikel <=6 wird immer die komplette anzahl ausgegeben bsp. "  <<< 1 2 3 4 5 6 >>>  "
*******************************************************************************/

         if ($endPosition <=6) {

             for ($i = $startPosition; $i < $endPosition; $i++) {
                $seite = $i + 1;

                            if ($i > 0) {
                               echo $this->between;
                            }
                            $style = ' style="'.$this->aStyle;
                            if ($i == $position) {
                               $style .= $this->aStyleSelected;
                            }
                            $style .= '"';
                            echo '<a href="front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[$i].'&lang='.$this->lang.'&client='.$this->client.'" class="'.$this->aClass.'"'.$style.'>'.$seite.'</a>';

                }

          }

/*******************************************************************************
* ist die anzahl der artikel >10 
* dann ausgabe bsp. "  <<< 1 2 3  ...  5 6 7 ... 9 10 11 >>>  "
*******************************************************************************/

     if ($endPosition >10 && ($position >4 || $position >$endPosition-5)) {

             for ($i = $startPosition; $i < 3; $i++) {
                $seite = $i + 1;

                            if ($i > 0) {
                               echo $this->between;
                            }
                            $style = ' style="'.$this->aStyle;
                            if ($i == $position) {
                               $style .= $this->aStyleSelected;
                            }
                            $style .= '"';
                            echo '<a href="front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[$i].'&lang='.$this->lang.'&client='.$this->client.'" class="'.$this->aClass.'"'.$style.'>'.$seite.'</a>';

                }  
       

echo ' ... ';

             for ($i = $startPosition; $i < $endPosition; $i++) {
                $seite = $i + 1;

                            if ($i > 0) {
                               echo $this->between;
                            }
                            $style = ' style="'.$this->aStyle;
                            if ($i == $position) {
                               $style .= $this->aStyleSelected;
                            }
                            $style .= '"';
                            echo '<a href="front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[$i].'&lang='.$this->lang.'&client='.$this->client.'" class="'.$this->aClass.'"'.$style.'>'.$seite.'</a>';

                }

echo ' ... ';

            for ($i = $endPosition - 3 ; $i < $endPosition; $i++) {
                $seite = $i + 1;

                            if ($i > 0) {
                               echo $this->between;
                            }
                            $style = ' style="'.$this->aStyle;
                            if ($i == $position) {
                               $style .= $this->aStyleSelected;
                            }
                            $style .= '"';
                            echo '<a href="front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[$i].'&lang='.$this->lang.'&client='.$this->client.'" class="'.$this->aClass.'"'.$style.'>'.$seite.'</a>';

                }

          } else {
          
/*******************************************************************************
* ist die anzahl der artikel >6 und
* aktuelle position <2 oder oder grösser end position -3 
* dann ausgabe bsp. "  <<< 1 2 3  ...  5 6 7 >>>  "
*******************************************************************************/

     if ($endPosition >6 && ($position <2 || $position >$endPosition-3)) {

         for ($i = $startPosition; $i < 3; $i++) {
            $seite = $i + 1;

                        if ($i > 0) {
                           echo $this->between;
                        }
                        $style = ' style="'.$this->aStyle;
                        if ($i == $position) {
                           $style .= $this->aStyleSelected;
                        }
                        $style .= '"';
                        echo '<a href="front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[$i].'&lang='.$this->lang.'&client='.$this->client.'" class="'.$this->aClass.'"'.$style.'>'.$seite.'</a>';

            }         

echo ' ... ';



         for ($i = $endPosition - 3 ; $i < $endPosition; $i++) {
            $seite = $i + 1;

                        if ($i > 0) {
                           echo $this->between;
                        }
                        $style = ' style="'.$this->aStyle;
                        if ($i == $position) {
                           $style .= $this->aStyleSelected;
                        }
                        $style .= '"';
                        echo '<a href="front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[$i].'&lang='.$this->lang.'&client='.$this->client.'" class="'.$this->aClass.'"'.$style.'>'.$seite.'</a>';

            }


          }
          
//*******************************************************************************

        }
         
         if ($this->last != '') {
            /*
             * Ausgabe Link auf die letzte Seite
             */
            echo $this->between.'<a href="front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[count($this->articles)-1].'&lang='.$this->lang.'&client='.$this->client.'" class="'.$this->aClass.'">'.$this->last.'</a>';
         }

         /*
          * Ausgabe Next
          */
         if ($position < count($this->articles) - 1) {
            $next = $position + 1;
            echo '&nbsp;&nbsp;&nbsp;<a href="front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[$next].'&lang='.$this->lang.'&client='.$this->client.'" class="'.$this->aClass.'">'.$this->nextPage.'</a>'.$this->after;
         } else {
            echo $this->after;
         }

echo '<br />-- bof test --<br /><br />';         
echo '$startPosition: ' . $startPosition;
echo '<br />';
echo '$endPosition: ' . $endPosition;
echo '<br />';
print_r($this->articles);
echo '<br /><br />-- eof test --<br />';


      }
   }
}

// Klasseninstantiierung
$pageTurning = new pageTurning('created');

// Angabe der zu verwendenden A-Klasse (für die Links)
$pageTurning->aClass('');

// Styleangabe für alle Links
$pageTurning->aStyle('text-decoration:underline;');

// Styleangabe für den aktuellen Artikel
$pageTurning->aStyleSelected('font-weight:bold; color:red;');

// Anzeige für vorige Seite
$pageTurning->previousPage('<<< ');

// Anzeige nächste Seite
$pageTurning->nextPage(' >>>');

// Alternativausgabe für die erste Seite (anstatt 1)
// $pageTurning->first(' FirstPage &nbsp;&nbsp;');

// Alternativausgabe für die letzte Seite
// $pageTurning->last('&nbsp;&nbsp; LastPage ');

// Ausgabe vor der Blätterleiste
$pageTurning->before('<div width="559px" align="center" style="padding:20px;" class="pageTurning">');

// Ausgabe zwischen zwei Seitenzahlen
$pageTurning->between('&nbsp;');

// Ausgabe nach der Blätterleiste
$pageTurning->after('</div>');

// Ausgabe an den Browser
$pageTurning->show();
?>

Verfasst: Fr 27. Jan 2006, 17:28
von nicnac
ich roll mit ;-)

danke schon mal, ich werde es gleich mal einbauen...

Verfasst: Sa 28. Jan 2006, 21:27
von mvf
all credits for modification go to stese (polycoder)

vielen lieben DANK

hier eine version mit startartikel disabled in der sql und sortorder lastmodified auch hardcodiert in der sql

das ganze spilttet die navi je nach anzahl artikel geau wie grosse threads hier im board

Code: Alles auswählen

<?php
/**
  * $Revision: 1.12 $
  * $Source: D:/cvs/cvsrepo/test/PPI_Nade/module/pageTurning/output.php,v $
  * $Date: 2005/11/29 18:36:15 $
  */

/**
 * pageTurning
 * @author Andreas Kummer
 * modified by Stefan Seifarth 2006 - www.polycoder.de
 * @copyright Copyright &copy; 2005 w3concepts AG
 */

// include html element
cInclude("classes","class.htmlelements.php");

if (!class_exists('pageTurning')) {
   
   class pageTurning {
      
      /**
       * Konstruktor der Klasse.
       * @param String  Ordnungsprinzip (sorted, alphabetical, created,
       * modified).
       * @param Boolean  True = ASC, False = DESC
       */
      function pageTurning($sortCriteria, $asc = true) {
         
         global $client, $lang, $idcat, $cfg, $idart;
         
         $this->client = $client;
         $this->lang = $lang;
         $this->idcat = $idcat;
         $this->cfg = $cfg;
         $this->idart = $idart;
         
         $this->before('<div>');
         $this->after('</div>');
         $this->between(' | ');
         $this->first('');
         $this->last('');
         $this->aClass('');
         $this->aStyle('text-decoration:none;');
         $this->aStyleSelected('font-weight:bold;');
         $this->previousPage('<<<');
         $this->nextPage('>>>');
         $this->fullPages = 10;
         
         $this->db = new DB_Contenido();
         
         $this->readArticles($sortCriteria, $asc);
      }
      
      /**
       * Setzt den Text für den ersten Eintrag.
       * @param String  Text für den ersten Eintrag.
       */
      function first($text) {
         
         $this->first = $text;
      }
      
      /**
       * Setzt den Text für den letzten Eintrag.
       * @param String  Text für den letzten Eintrag.
       */
      function last($text) {
         
         $this->last = $text;
      }
      
      /**
       * Setzt den HTML-Code, der vor der Blätteranzeige ausgegeben wird.
       * @param String  HTML-Code, der vor der Blätteranzeige ausgegen werden
       * wird.
       */
      function before($text) {
         
         $this->before = $text;
      }
      
      /**
       * Setzt den HTML-Code, der nach der Blätteranzeige ausgegeben werden
       * wird.
       * @param String  HTML-Code, der nach der Blätteranzeige ausgegeben
       * werden wird.
       */
      function after($text) {
         
         $this->after = $text;
      }
      
      /**
       * Setzt den Text, der zwischen zwei Seitenzahlen ausgegeben werden
       * @param Integer  maximale Seitenanzahl ohne Leerschritte ( ... ) um
       * zu lange Seitenliste zu verhindern
       */
      function fullPages($pages) {
         
         $this->fullPages = (int)$pages;
      }
      
      /**
       * Setzt den Klassennamen, der für die Links zu verwenden ist.
       * @param String  Klassenname, der den Links zuzuordnen ist.
       */
      function aClass($name) {
         
         $this->aClass = $name;
      }
      
      function aStyle($style) {
         
         $this->aStyle = $style;
      }
      
      function aStyleSelected($style) {
         
         $this->aStyleSelected = $style;
      }
      
      function previousPage($text) {
         
         $this->previousPage = $text;
      }
      
      function nextPage($text) {
         
         $this->nextPage = $text;
      }
      
      /**
       * Anzahl der Seiten ab wann Seitenzahlen ausgeblendet werden
       * wird.
       * @param String  Text, der zwischen zwei Seitenzahlen ausgegeben werden
       * wird.
       */
      function between($text) {
         
         $this->between = $text;
      }
      
      
      /**
       * Liest die Artikel der aktuellen Kategorie ein.
       * @param String  Ordnungsprinzip.
       * @param Boolean  True = aufsteigend, False = absteigend
       */
      function readArticles($sortCriteria, $asc) {
         
         /*
          * Ordnungsprinzip fest legen
          */
         $order = ($asc) ? ('ASC') : ('DESC');
         
         /*
          * Sortierkriterium fest legen
          */
         switch ($sortCriteria) {
            case 'created':
               $sortOrder = 'b.created '.$order;
               break;
            case 'modified':
               $sortOrder = 'b.lastmodified '.$order;
               break;
            case 'sorted':
               $sortOrder = 'b.artsort '.$order.', b.title '.$order;
               break;
            case 'alphabetical':
               $sortOrder = 'b.title '.$order;
               break;
            default:
               $sortOrder = 'b.created '.$order;
         }
         
         /*
          * Absetzen des Queries.
          */
         $this->db->query("" .
               "SELECT " .
               "   b.idart " .
               "FROM {$this->cfg['tab']['cat_art']} as a, " .
               "{$this->cfg['tab']['cat_lang']} as c " .
               "LEFT JOIN {$this->cfg['tab']['art_lang']} as b ON a.idart = b.idart " .
               "WHERE " .
               "   a.idcat = {$this->idcat} " .
               "   AND b.idlang = {$this->lang} " .
               "   AND b.online = 1 " .
               "   AND a.idcat = c.idcat " .
               "   AND b.idartlang != c.startidartlang " .
               "ORDER BY " .
               "   b.lastmodified DESC " .
               "");
         
         while ($this->db->next_record()) {
            $this->articles[] = $this->db->f('idart');
         }
      }
      
      /**
       * Gibt die Blätterleiste an die Standardausgabe aus.
       */
      function show() {
         
         global $sess;
         
         if (empty($this->articles) || count($this->articles) == 1) {
            return false;
         }
         
         // initialisierung der HTML-API für Links
         $oLink = new cHTMLLink();
         
         /*
          * Ermittlung der aktuellen Position
          */
         $position = array_search ($this->idart,$this->articles);
         
         /*
          * Ausgabe Previous
          */
         if ($position > 0) {
            $previous = $position - 1;
            
            // URL Settings
            $oLink->setLink($sess->url('front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[$previous].'&lang='.$this->lang.'&client='.$this->client ));
            $oLink->setContent($this->previousPage);
            $oLink->setClass($this->aClass);
            

            echo $this->before.$oLink->toHTML().$this->between;
            
         } else {
            echo $this->before;
         }
         
         if ($this->first != '') {
            /*
             * Ausgabe Link auf die erste Seite
             */
            $oLink->setLink($sess->url('front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[0].'&lang='.$this->lang.'&client='.$this->client ));
            $oLink->setContent($this->first);
            $oLink->setClass($this->aClass);
            
            echo $oLink->toHTML();
         }
         
         $startPosition = ($this->first != '') ? (1) : (0);
         $endPosition = ($this->last != '') ? (count($this->articles) - 1) : (count($this->articles));
         
         
         
         // Wenn weniger als 10 Seiten dann alles komplett ausgeben
         if ( $endPosition <= 10 ) {
            
            
            for ($i = $startPosition; $i < $endPosition; $i++) {
               $seite = $i + 1;
               if ($i > 0) {
                  echo $this->between;
               }
               $style = $this->aStyle;
               if ($i == $position) {
                  $style .= $this->aStyleSelected;
               }
               
               $oLink->setLink($sess->url('front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[$i].'&lang='.$this->lang.'&client='.$this->client ));
               $oLink->setContent($seite);
               $oLink->setClass($this->aClass);
               $oLink->setStyle($style);
               
               echo $oLink->toHTML();
            }
            
            
         // Mehr als 10 Seiten, dann erste 3, letzte 3 sowie aktuelle Seite +/- 1
         } else {
            
            // Array für Zwischenpufferung
            $arr_links = array();
            
            for ($i = $startPosition; $i < $endPosition; $i++) {
               
               // checke ob aktuelle seite im darstellungsbereich liegt
               if ( $i <= ($startPosition + 2)  ||
                    ( $i == $position || $i == $position - 1 || $i == $position + 1 ) ||
                    $i >= ($endPosition - 3 )
               ) {
                  
                  $seite = $i + 1;
                              
                  $style = $this->aStyle;
                  if ($i == $position) {
                     $style .= $this->aStyleSelected;
                  }
                  
                  $oLink->setLink($sess->url('front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[$i].'&lang='.$this->lang.'&client='.$this->client ));
                  $oLink->setContent($seite);
                  $oLink->setClass($this->aClass);
                  $oLink->setStyle($style);
               
                  $arr_links[] = $oLink->toHTML();
                  
                  
               } else {
                  // Hier soll nix drinn stehen
                  $arr_links[] = "[[empty]]";
               }
            }
            
            // suche nach aufeinanderfolgenden leer feldern und entferne diese
            $int_value = false;
            for ( $i = 0; $i < count($arr_links); $i++) {
               
               if ( $arr_links[$i] == "[[empty]]" && $int_value == false ) {
                  $int_value = true;
               } else if ( $arr_links[$i] == "[[empty]]" && $int_value == true ) {
                  $arr_links[$i] = false;
               } else if ($arr_links[$i] != "[[empty]]" && $int_value == true) {
                  $int_value = false;
                  
               }
            }

            $arr_links = array_filter($arr_links);
               
            
            $str_navigation = implode($this->between, $arr_links);
            //print $str_navigation;
            echo str_replace("[[empty]]", "&nbsp;...&nbsp;", $str_navigation);
            
         }
         
         if ($this->last != '') {
            /*
             * Ausgabe Link auf die letzte Seite
             */
            $oLink->setLink($sess->url('front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[count($this->articles)-1].'&lang='.$this->lang.'&client='.$this->client ));
            $oLink->setContent($this->last);
            $oLink->setClass($this->aClass);
            
               
            echo $this->between.$oLink->toHTML();
         }
         
         /*
          * Ausgabe Next
          */
         if ($position < count($this->articles) - 1) {
            $next = $position + 1;
            
            $oLink->setLink($sess->url('front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[$next].'&lang='.$this->lang.'&client='.$this->client ));
            $oLink->setContent($this->nextPage);
            $oLink->setStyle("dext-decoration:none");
        
            
            echo $this->between.$oLink->toHTML().$this->after;
         } else {
            echo $this->after;
         }
      }
   }
}

// Klasseninstantiierung
$pageTurning = new pageTurning('created');

// Angabe der zu verwendenden A-Klasse (für die Links)
$pageTurning->aClass('');

// Styleangabe für alle Links
$pageTurning->aStyle('text-decoration:underline;');

// Styleangabe für den aktuellen Artikel
$pageTurning->aStyleSelected('font-weight:bold; color:red;');

// Anzeige für vorige Seite
$pageTurning->previousPage('<<< ');

// Anzeige nächste Seite
$pageTurning->nextPage(' >>>');

// Alternativausgabe für die erste Seite (anstatt 1)
// $pageTurning->first(' FirstPage &nbsp;&nbsp;');

// Alternativausgabe für die letzte Seite
// $pageTurning->last('&nbsp;&nbsp; LastPage ');

// Ausgabe vor der Blätterleiste
$pageTurning->before('<div width="559px" align="center" style="padding:20px;" class="pageTurning">');

// Ausgabe zwischen zwei Seitenzahlen
$pageTurning->between('&nbsp;');

// Ausgabe nach der Blätterleiste
$pageTurning->after('</div>');

// Ausgabe an den Browser
$pageTurning->show();
?>

Verfasst: Mi 22. Feb 2006, 18:36
von mvf
bei problemen mit id="m ... bei der XHTML Validierung bitte hier gucken

http://contenido.org/forum/viewtopic.php?p=72589#72589

und wie immer dank an stese :D