Seite 1 von 1

Artikelliste und aktiven Link kennzeichnen

Verfasst: Fr 22. Jun 2007, 18:18
von senghufu
Hallo zusammen,
ich nutze eine Artikelliste als Navigation.
Ich möchte gerne dass der Link der momentan aktiven Seite anders gekennzeichnet ist als die anderen Links.

Könnte mir bitte jemand helfen?
Danke im voraus

Hier der Output des verwendeten Moduls:

Code: Alles auswählen

<?php

class articleList {

   /**
    * Konstruktor der Klasse.
    * @param Integer  Primärschlüssel der Artikelkategorie.
    */
   function articleList($myIdCat) {

      global $client, $lang, $idcat;

      $this->myIdCat = $myIdCat;

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

      $this->db = new DB_Contenido();
   }

   /**
    * Setzt den vor der Artikelliste auszugebenden HTML-Code.
    * @param String  HTML-Code, der vor der Artikelliste ausgegeben werden
    * soll.
    */
   function setBefore($before) {

      $this->before = $before;
   }

   /**
    * Setzt den nach der Artikelliste auszugebenden HTML-Code.
    * @param String  HTML-Code, der nach der Artikelliste ausgegeben werden
    * soll.
    */
   function setAfter($after) {

      $this->after = $after;
   }

   /**
    * Setzt das Template (respektive die Maske) für die Ausgabe eines Teasers.
    * Für die Ausgabe wird der Titel sowie die Artikelbeschreibung verwendet.
    * @param String  Template für die Asugabe des Teasers. Folgende Platzhalter
    * sind vorgesehen {title} für den Titel, {teaser} für die
    * Artikelbeschreibung, {idcat} für die Artikelkategorie sowie {idart} für
    * die Artikelidentifikation, {link} für die Artikelreferenzierung und
    * {created} für das Erstellungsdatum.
    */
   function setTeaserMask($mask) {

      $this->mask = $mask;
   }

   /**
    * Gibt die Artikelliste zurück. Die Ausgabe an den Browser muss dann über
    * ein echo oder ein print erfolgen.
    * @param String  Sortierkriterium. Zur Auswahl stehen: 'created'
    * (Erstellungsdatum), 'modified' (Aktualisierungsdatum), 'sorted'
    * (Contenido-Sortierkriterium), 'alphabetical' (alphabetisch nach Titel).
    * @param Boolean  True für aufsteigende Sortierung, false für absteigend.
    * @param Integer  Maximale Anzahl Artikel, die angezeigt werden sollen.
    * Wird 0 angegeben, werden alle Artikel ausgegeben.
    */
   function getArticleList($sortOrder, $asc, $maxArticles = 0) {

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

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

      /*
       * Artikel aus der Datenbank lesen
       */
      $articles = $this->getArticles($this->myIdCat, $this->lang, $sortCriteria, $maxArticles);

      /*
       * Rückgabewert initialisieren
       */
      $returnValue = '';

      if (!empty($articles)) {
         $returnValue = $this->before;

         foreach ($articles as $article) {
            if ($article['online'] == 1) {
               $mask = $this->mask;
               if ($article['redirect'] != '0') {
                  $article['link'] = $article['redirect'];
               }
               foreach ($article as $part => $content) {
                  $mask = str_replace('{'.$part.'}',$content,$mask);
               }
               $returnValue .= $mask;
            }
         }

         $returnValue .= $this->after;
      }

      return $returnValue;
   }

   function getArticles($idcat, $idlang, $sortCriteria, $limit) {

      global $cfg;

      /*
       * Initialisierung des Rückgabewertes
       */
      $returnValue = array();

      /*
       * Setzen der Abfragelimiten
       */
      if ($limit != 0) {
         $limit = "LIMIT 0, $limit";
      } else {
         $limit = '';
      }

      /*
       * Absetzen des Queries.
       */
      $this->db->query("" .
            "SELECT " .
            "   b.idart, " .
            "   b.title, " .
            "   b.summary, " .
            "   b.created, " .
            "   b.lastmodified, " .
            "   b.artsort, " .
            "   b.redirect_url, " .
            "   b.online, " .
            "   DATE_FORMAT(b.created, '%d.%m.%y') as erstellungsdatum, " .
            "   DATE_FORMAT(b.lastmodified, '%d.%m.%y') as aktualisierungsdatum " .
            "FROM {$cfg['tab']['cat_art']} as a " .
            "LEFT JOIN {$cfg['tab']['art_lang']} as b ON a.idart = b.idart " .
            "LEFT JOIN {$cfg['tab']['cat_lang']} as c ON a.idcat = c.idcat " .
            "WHERE " .
            "   a.idcat = $idcat " .
            "   AND b.idlang = {$this->lang} " .
            "ORDER BY " .
            "   $sortCriteria " .
            "$limit" .
            "");

      while ($this->db->next_record()) {

         $returnValue[] = array(

            'teasertitle'=>$this->db->f('title'),
            'teaser'=>$this->db->f('summary'),
            'idcat'=>$idcat,
            'idart'=>$this->db->f('idart'),
            'link'=>'front_content.php?idcat='.$idcat.'&idart='.$this->db->f('idart'),
            'redirect'=>$this->db->f('redirect_url'),
            'online'=>$this->db->f('online'),
            'created'=>$this->db->f('erstellungsdatum'));
      }

      return $returnValue;
   }

}

$articleList = new articleList("CMS_VALUE[1]");
$articleList->setBefore('');
$articleList->setAfter('');
$articleList->setTeaserMask('

      <a href="{link}" class="{klasse}">{teasertitle}</a>

');
echo $articleList->getArticleList('sorted', true);
?>

Re: Artikelliste und aktiven Link kennzeichnen

Verfasst: Fr 29. Jun 2007, 09:34
von emergence
denke das es so gehen sollte...
ist eine möglichkeit... zwar keine saubere lösung, aber naja...

Code: Alles auswählen

      while ($this->db->next_record()) { 

         $returnValue[] = array( 

            'teasertitle'=>$this->db->f('title'), 
            'teaser'=>$this->db->f('summary'), 
            'idcat'=>$idcat, 
            'idart'=>$this->db->f('idart'), 
            'link'=>'front_content.php?idcat='.$idcat.'&idart='.$this->db->f('idart'), 
            'redirect'=>$this->db->f('redirect_url'), 
            'online'=>$this->db->f('online'), 
            'created'=>$this->db->f('erstellungsdatum')); 
      } 
ersetzen durch

Code: Alles auswählen

      global $idart; // get current idart
      
      while ($this->db->next_record()) { 

         $returnValue[] = array( 

            'teasertitle'=>$this->db->f('title'), 
            'teaser'=>$this->db->f('summary'), 
            'idcat'=>$idcat, 
            'idart'=>$this->db->f('idart'), 
            'link'=>'front_content.php?idcat='.$idcat.'&idart='.$this->db->f('idart'), 
            'redirect'=>$this->db->f('redirect_url'), 
            'online'=>$this->db->f('online'),
            'klasse'=> (($idart == $this->db->f('idart')) ? "on" : "off"),
            'created'=>$this->db->f('erstellungsdatum')); 
      } 
nicht getestet...

Verfasst: Fr 29. Jun 2007, 10:05
von senghufu
Ja, super - klappt.
Vielen Dank

Verfasst: Sa 18. Okt 2008, 20:05
von stefkey
Hallo senghuhu,

bei mir wird kein output erzeugt. Sollte das Modul auch mit 4.8.8 laufen?

Grüße,
stefkey