neues modul :: pageTurning (Blätterfunktion)

mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf » Do 26. Jan 2006, 10:19

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();
?>
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams

mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf » Fr 27. Jan 2006, 12:22

keiner der ein wenig input geben kann wie man die ausgabe splitted?
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams

rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Beitrag von rezeptionist » Fr 27. Jan 2006, 12:26

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
greets

mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf » Fr 27. Jan 2006, 13:04

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 ;)
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams

rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Beitrag von rezeptionist » Fr 27. Jan 2006, 13:09

die 3 wra nur ein beispiel aber ich denke der "einsprungpunkt" sollte die aktuelle Position sein :wink:
greets

mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf » Fr 27. Jan 2006, 13:21

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
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams

rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Beitrag von rezeptionist » Fr 27. Jan 2006, 13:28

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
greets

mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf » Fr 27. Jan 2006, 13:36

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
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams

nicnac
Beiträge: 326
Registriert: Do 6. Jan 2005, 15:21
Wohnort: Bln
Kontaktdaten:

Beitrag von nicnac » Fr 27. Jan 2006, 16:54

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.
Gruß nicnac
---------------
arbeite seit Contenido Version 4.4.5 mit dem System, ca. 30 Websites mit Contenido umgesetzt auf domainfactory, Strato und 1und1.

rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Beitrag von rezeptionist » Fr 27. Jan 2006, 16:55

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
greets

mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf » Fr 27. Jan 2006, 16:57

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 " .
               "");
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams

mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf » Fr 27. Jan 2006, 17:04

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();
?>
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams

nicnac
Beiträge: 326
Registriert: Do 6. Jan 2005, 15:21
Wohnort: Bln
Kontaktdaten:

Beitrag von nicnac » Fr 27. Jan 2006, 17:28

ich roll mit ;-)

danke schon mal, ich werde es gleich mal einbauen...
Gruß nicnac
---------------
arbeite seit Contenido Version 4.4.5 mit dem System, ca. 30 Websites mit Contenido umgesetzt auf domainfactory, Strato und 1und1.

mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf » Sa 28. Jan 2006, 21:27

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();
?>
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams

mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf » Mi 22. Feb 2006, 18:36

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
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams

Gesperrt