Modul :: NavigationUniversell

netzteil
Beiträge: 13
Registriert: Di 11. Sep 2007, 13:15
Wohnort: Essen
Kontaktdaten:

Beitrag von netzteil »

funzt das modul einklich in 4.8.7.?
--
Freundliche Gruesse,
Netzteil - Udo Marx
http://www.netzteil.com/session
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

absolut. ich habe es in gebrauch.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
netzteil
Beiträge: 13
Registriert: Di 11. Sep 2007, 13:15
Wohnort: Essen
Kontaktdaten:

Beitrag von netzteil »

Hallo Kummer,

ich komme leider mit meinem Ansinnen nicht weiter.
Ob Du mal so nett bist, da drauf zu schauen?

idcat für Start ist '1'.

Das Modul erzeugt keine Ausgabe.
Die Klasse liegt richtig in /includes als 'class.navigation.inc.php'

Hier der Modulcode (eigentlich auch korrekt?):
<?php
cInclude('frontend', 'includes/class.navigation.inc.php');

$cApiClient = new cApiClient($client);
$aQnavigation = new aQnavigation($cApiClient->getProperty('navigation', 'idcat_servicenavigation'));

$aQnavigation->between(2, '');
$aQnavigation->maskNormal(2, '<div><a target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskSelected(2, '<div><a target="_self" href="{link}">›{name1}</a></div>');
$aQnavigation->maskNormalSub(2, '<div><a target="_self" href="{link}">{name1}</a>{sub}</div>');
$aQnavigation->maskSelectedSub(2, '<div><a target="_self" href="{link}">›{name1}</a>{sub}</div>');

$aQnavigation->between(1, '');
$aQnavigation->maskNormal(1, '<div><a target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskNormalSub(1, '<div><a target="_self" href="{link}">{name1}</a></div>{sub}');
$aQnavigation->maskSelected(1, '<div><a target="_self" href="{link}">›{name1}</a></div>');
$aQnavigation->maskSelectedSub(1, '<div><a target="_self" href="{link}">›{name1}</a></div>{sub}');

$aQnavigation->setSub(1, $aQnavigation->showNavigation(1));

echo $aQnavigation->showNavigation(1);
?>

Hier das errorlog:[03-Sep-2008 10:38:10] /cms/front_content.php?idart=93 MySQL error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OR a.parentid = -1OR a.parentid = -1OR a.parentid = -1 ) AND ( d.idfro' at line 1
SELECT DISTINCT a.idcat, a.parentid, a.preid, a.postid, a.parentid, b.name, b.idlang, IF (b.visible = 1 && (b.public = 1 || c.idfrontendpermission IS NOT NULL), 1, 0) AS visible FROM nrwd_cat AS a LEFT JOIN nrwd_cat_lang AS b ON a.idcat = b.idcat LEFT JOIN nrwd_frontendpermissions AS c ON (c.item = b.idcatlang AND c.idlang = b.idlang AND plugin ='category') LEFT JOIN nrwd_frontendgroupmembers AS d ON c.idfrontendgroup = d.idfrontendgroup WHERE a.idclient = 1 AND ( a.parentid = OR a.parentid = -1OR a.parentid = -1OR a.parentid = -1 ) AND ( d.idfrontenduser = 0 OR d.idfrontenduser IS NULL )
[03-Sep-2008 10:38:10] /cms/front_content.php?idart=93 next_record called with no query pending in Module ID 27.
--
Freundliche Gruesse,
Netzteil - Udo Marx
http://www.netzteil.com/session
MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Beitrag von MyAccount »

Besteht die Möglichkeit ein "/" am Ende aller Kategorie-Links zu setzen? Oder einfach immer auch ein artikelname.html in den Link einzubauen?
speedmaster
Beiträge: 59
Registriert: Mi 18. Apr 2007, 18:43
Kontaktdaten:

Reiternavigation

Beitrag von speedmaster »

Hallo zusammen,

erst einmal ein dickes Lob an den Entwickler für dieses tolle Modul, das ich super zum laufen gebracht habe.

Nun meine Frage, ist es möglich mit diesem Modul eine Reiternavigation so wie hier http://clagnut.com/sandbox/csstabs/?writingtext=csstabs zu realisieren?

Bin leider noch nicht soweit mit css und php das ich so etwas alleine schaffe.
Kann mir hier jemand helfen? Wäre super.
:?:
MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Beitrag von MyAccount »

Hallo speedmaster,

ja, das geht. Im Output des Moduls steht sowas hier:
$aQnavigation->between(1, '');
$aQnavigation->maskNormal(1, '<div><a target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskSelected(1, '<div><a target="_self" href="{link}">›{name1}</a></div>');

$aQnavigation->between(0, '');
$aQnavigation->maskNormal(0, '<div><a target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskNormalSub(0, '<div><a target="_self" href="{link}">{name1}</a></div>{sub}');
$aQnavigation->maskSelected(0, '<div><a target="_self" href="{link}">›{name1}</a></div>');
$aQnavigation->maskSelectedSub(0, '<div><a target="_self" href="{link}">›{name1}</a></div>{sub}');
Da machst Du dann anstelle der divs eben Deine Listenverschachtelungen. Die 0 in der Klammer ist die oberste Navigationsebene, die 1 die nächste, usw...
speedmaster
Beiträge: 59
Registriert: Mi 18. Apr 2007, 18:43
Kontaktdaten:

Beitrag von speedmaster »

Hallo MyAccount,

danke für die rasche Antwort. Wenn ich es richtig verstehe, sollte das ganze also so aussehen:

Code: Alles auswählen

$aQnavigation->between(1, '');
$aQnavigation->maskNormal(1, '<li><a target="_self" href="{link}">{name1}</a></li>');
$aQnavigation->maskSelected(1, '<li><a target="_self" href="{link}">›{name1}</a></li>');

$aQnavigation->between(0, '');
$aQnavigation->maskNormal(0, '<li><a target="_self" href="{link}">{name1}</a></li>');
$aQnavigation->maskNormalSub(0, '<li><a target="_self" href="{link}">{name1}</a></li>{sub}');
$aQnavigation->maskSelected(0, '<li><a target="_self" href="{link}">›{name1}</a></li>');
$aQnavigation->maskSelectedSub(0, '<li><a target="_self" href="{link}">›{name1}</a></li>{sub}');
Ist das korrekt? Falls ja, wie steure ich jetzt das Aussehen korrekt per CSS?
MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Beitrag von MyAccount »

Ne, leider nicht korrekt. Du musst Dir mal ansehen, wie Listen aufgebaut sind. Bei selfhtml z.B.

In etwa so, aber ohne Garantie:

Code: Alles auswählen

$aQnavigation->between(2, ''); 
$aQnavigation->maskNormal(2, '<li class="closedfolder"><a href="{link}">{name1}</a></li>' . "\n"); 
$aQnavigation->maskNormalSub(2, '<li class="openedfolder"><a href="{link}">{name1}</a><ul>{sub}</ul></li>' . "\n");
$aQnavigation->maskSelected(2, '<li class="openedfolder active"><a href="{link}">{name1}</a></li>' . "\n");
$aQnavigation->maskSelectedSub(2, '<li class="openedfolder"><a href="{link}">{name1}</a><ul>{sub}</ul></li>' . "\n");

$aQnavigation->between(1, ''); 
$aQnavigation->maskNormal(1, '<li class="closedfolder"><a href="{link}">{name1}</a></li>' . "\n"); 
$aQnavigation->maskNormalSub(1, '<li class="openedfolder"><a href="{link}">{name1}</a><ul>{sub}</ul></li>' . "\n");
$aQnavigation->maskSelected(1, '<li class="openedfolder"><a href="{link}">{name1}</a></li>' . "\n");
$aQnavigation->maskSelectedSub(1, '<li class="openedfolder"><a href="{link}">{name1}</a><ul>{sub}</ul></li>' . "\n");
$aQnavigation->setSub(1, $aQnavigation->showNavigation(2));
Dann kannst Du den Rest mit class="" und CSS machen.

Code: Alles auswählen

ul li {blalbla}
ul li li {blablab}
KAT
Beiträge: 4
Registriert: Do 23. Okt 2008, 14:48
Kontaktdaten:

Beitrag von KAT »

Hallo miteinander, hallo Andreas.
Ich bin neu hier und habe gleich ein Problemchen: bei dieser Zweifelsohne genialen Navigation bekomme ich leider nur eine Ausgabe bis zur Ebene 4. Danach tut sich leider nichts mehr, wird einfach nicht angezeigt. Hier mal der Modulcode:

Code: Alles auswählen

<?php

cInclude('frontend', 'includes/atelierq.navigation.class.inc.php');

$cApiClient = new cApiClient($client);
$aQnavigation = new aQnavigation($cApiClient->getProperty('navigation', 'idcat_mainnavigation'));

/* 
 * Ausgabe 6. Navigationsebene 
 */
$aQnavigation->between(5, '');
$aQnavigation->maskNormal(5, '<div class="navi"><a class="navileft_passive" style="padding-left:10px;" target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskSelected(5, '<div class="navi"><a class="navileft_active" style="padding-left:10px;" target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskSelectedSub(5, '<div class="navi"><a class="navileft_open" style="padding-left:10px;" target="_self" href="{link}">{name1}</a></div>');

/* 
 * Ausgabe 5. Navigationsebene
 */
$aQnavigation->between(4, '');
$aQnavigation->maskNormal(4, '<div class="navi"><a class="navileft_passive" style="padding-left:10px;" target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskSelected(4, '<div class="navi"><a class="navileft_active" style="padding-left:10px;" target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskSelectedSub(4, '<div class="navi"><a class="navileft_open" style="padding-left:10px;" target="_self" href="{link}">{name1}</a></div>{sub}');
$aQnavigation->setSub(4, $aQnavigation->showNavigation(5));

/* 
 * Ausgabe 4. Navigationsebene
 */
$aQnavigation->between(3, '');
$aQnavigation->maskNormal(3, '<div class="navi"><a class="navileft_passive" style="padding-left:10px;" target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskSelected(3, '<div class="navi"><a class="navileft_active" style="padding-left:10px;" target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskSelectedSub(3, '<div class="navi"><a class="navileft_open" style="padding-left:10px;" target="_self" href="{link}">{name1}</a></div>{sub}');
$aQnavigation->setSub(3, $aQnavigation->showNavigation(4));

/* 
 * Ausgabe 3. Navigationsebene
 */
$aQnavigation->between(2, '');
$aQnavigation->maskNormal(2, '<div class="navi"><a class="navileft_passive" style="padding-left:10px;" target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskSelected(2, '<div class="navi"><a class="navileft_active" style="padding-left:10px;" target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskSelectedSub(2, '<div class="navi"><a class="navileft_open" style="padding-left:10px;" target="_self" href="{link}">{name1}</a></div>{sub}');
$aQnavigation->setSub(2, $aQnavigation->showNavigation(3));

/* 
 * Ausgabe 2. Navigationsebene
 */
$aQnavigation->between(1, '');
$aQnavigation->maskNormal(1, '<div class="navi"><a class="navileft_passive" style="padding-left:10px;" target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskSelected(1, '<div class="navi"><a class="navileft_active" style="padding-left:10px;" target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskSelectedSub(1, '<div class="navi"><a class="navileft_open" style="padding-left:10px;" target="_self" href="{link}">{name1}</a></div>{sub}');
$aQnavigation->setSub(1, $aQnavigation->showNavigation(2));

echo $aQnavigation->showNavigation(1);

?>
Vielleich kann mir da jemand unter die Arme greifen? ich danke Euch schonmal allen ganz herzlich.

Lieber Gruß

KAT
KAT
Beiträge: 4
Registriert: Do 23. Okt 2008, 14:48
Kontaktdaten:

Gelöst: Anzeige von mehr als x Nvigationsebenen

Beitrag von KAT »

Hallo nochmal.
Ich habe Hilfe von jemandem erhalten, der das Problem scheinbar auch hatte. - Und es funktioniert: alle Ebenen werden jetzt angezeigt.

Die Lösung stammt wohl von Kummer selbst, wurde hier aber nicht gepostet.
Somit will ich das mal nachholen, das Problem scheinen ja mehrere Leute zu haben. (Admins: falls nicht gewünscht, bitte löschen)

Mein Modulcode von oben war korrekt, die atelierq.navigation.class.inc.php musste folgendermaßen aussehen:

Code: Alles auswählen

<?php 


/** 
 * navigationUniversell (aQnavigation) 
 * @version $Id: atelierq.navigation.class.inc.php 617 2008-03-07 15:13:46Z atelierq $ 
 * @author Andreas Kummer 
 * @copyright Copyright &copy; 2007 atelierQ 
 */ 

class aQnavigation { 

   /** 
    * Konstruktor der Klasse. 
    * @param Integer  Prim?rschl?ssel der Startkategorie. 
    */ 
   function aQnavigation($startId) { 

      global $client, $lang, $idcat, $db; 

      $this->startId = $startId; 

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

      $this->idcat = (isset ($_GET['pretend'])) ? ($_GET['pretend']) : ($idcat); 

      $this->before = ''; 
      $this->beforeEach = ''; 
      $this->between = ''; 
      $this->after = ''; 

      $this->excludeItemsStartingWith = '__'; 

      $this->db = $db; 

      $this->setStartIds(); 

      $this->getNavigation(); 
   } 

   /** 
    * Auslesen der Navigationsstruktur aus der Datenbank. 
    */ 
   function getNavigation() { 

      global $cfg, $auth; 

      if ($this->startId != $this->id[0]) { 
         /* 
          * Wenn die StartId nicht identisch ist mit der h?chsten Ebene der 
          * aktuell selektierten Kategorie, dann liegt die gew?hlte Kategorie 
          * folgerichtig ausserhalb des f?r die Navigation gew?hlten Baumes. 
          * In diesem Fall ist nur die Hauptnavigation einzublenden. 
          */ 
         $this->id[0] = $this->startId; 
         for ($i = 1; $i <= 4; $i++) { 
            $this->id[$i] = -1; 
         } 
      } 

      if ($auth->auth['uid'] == '' || !$this->isNumeric($auth->auth['uid'])) { 
         /* 
          * Login nicht erfolgt 
          */ 
         $user = 0; 
      } else { 
         /* 
          * Benutzer ist eingeloggt 
          */ 
         $user = $auth->auth['uid']; 
      } 

      $this->db->query("" . 
      "SELECT DISTINCT " . 
      "a.idcat, " . 
      "a.parentid, " . 
      "a.preid, " . 
      "a.postid, " . 
      "a.parentid, " . 
      "b.name, " . 
      "b.idlang, " . 
      "IF (b.visible = 1 && (b.public = 1 || d.idfrontenduser IS NOT NULL), 1, 0) AS visible " . 
      "FROM {$cfg['tab']['cat']} AS a " . 
      "LEFT JOIN {$cfg['tab']['cat_lang']} AS b ON a.idcat = b.idcat " . 
      "LEFT JOIN {$cfg['tab']['frontendpermissions']} AS c ON ((c.item = b.idcatlang OR c.item = '__GLOBAL__') AND c.idlang = b.idlang AND plugin ='category') " . 
      "LEFT JOIN {$cfg['tab']['frontendgroupmembers']} AS d ON c.idfrontendgroup = d.idfrontendgroup AND d.idfrontenduser = {$user} " . 
      "WHERE " . 
      "   a.idclient = {$this->client} " . 
      "   AND (" . 
      "      a.parentid = {$this->id[0]} " . 
      "      OR a.parentid = {$this->id[1]} " . 
      "      OR a.parentid = {$this->id[2]} " . 
      "      OR a.parentid = {$this->id[3]} " . 
      "      OR a.parentid = {$this->id[4]} " . 
      "   ) " . 
      ""); 

      $this->navigationTree = array (); 

      $this->firstId[0] = 0; 
      $this->firstId[1] = 0; 
      $this->firstId[2] = 0; 
      $this->firstId[3] = 0; 
      $this->firstId[4] = 0; 

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

         for ($i = 0; $i <= 4; $i++) { 
            if (($this->firstId[$i] == 0 && $this->db->f('parentid') == $this->id[$i] && $this->db->f('preid') == 0 && $this->db->f('idlang') == $this->lang) || ($this->firstId[$i] == 0 && $this->db->f('parentid') == $this->id[$i] && $this->db->f('preid') == 0 && $this->db->f('idlang') == null)) { 
               $this->firstId[$i] = $this->db->f('idcat'); 
            } 
         } 
         /* 
          * Das Einf?gen in den Navigationsbaum darf nur erfolgen, wenn noch kein Eintrag existiert 
          * oder - wenn bereits einer existiert - der neue Eintrag der aktuell gew?hlten Sprache 
          * entspricht. 
          */ 
         if (!isset ($this->navigationTree[$this->db->f('parentid')][$this->db->f('idcat')]) || $this->db->f('idlang') == $this->lang) { 
            $this->navigationTree[$this->db->f('parentid')][$this->db->f('idcat')] = array ( 
               'preid' => $this->db->f('preid' 
            ), 'postid' => $this->db->f('postid'), 'visible' => $this->db->f('visible'), 'name' => $this->db->f('name'), 'idlang' => $this->db->f('idlang')); 
         } 
      } 

   } 

   /** 
    * Ausgabe der Navigation an die Standardausgabe. 
    * @param String  Navigationstyp 
    */ 
   function showNavigation($type, $next = -1) { 

      static $first; 
      static $output = array ( 
         false, 
         false, 
         false, 
         false, 
         false, 
         false, 
         false 
      ); 

      $returnValue = ""; 

      if ($next == 0) { 
         if ($output[$type]) { 
            return $this->after[$type]; 
         } else { 
            return false; 
         } 
      } 

      if ($next == -1) { 
         $returnValue .= $this->before[$type]; 
         $next = $this->firstId[$type]; 
         $first[$type] = true; 
      } 

      $parentId = $this->id[$type]; 

      $link = 'front_content.php?idcat=' . $next; 

      if ($this->navigationTree[$parentId][$next]['visible'] == 1 && $this->navigationTree[$parentId][$next]['idlang'] == $this->lang && $this->isVisble($this->navigationTree[$parentId][$next]['name'])) { 
         if (!$first[$type]) { 
            $returnValue .= $this->between[$type]; 
         } 

         if (strstr($this->navigationTree[$parentId][$next]['name'], '$$$') == true) { 
            $name = explode('$$$', $this->navigationTree[$parentId][$next]['name']); 
            $name1 = $name[0]; 
            $name2 = $name[1]; 
         } else { 
            $name1 = $this->navigationTree[$parentId][$next]['name']; 
            $name2 = ''; 
         } 
if ($name1 == "Tabelle" || $name1 == "Spiepläne" ) 
$link .= "\" target=\"_blank"; 
#$name1 = $name1."\" target=\"_blank"; 

         $sub = (isset ($this->sub[$type])) ? ($this->sub[$type]) : (''); 

         if ($this->isActive($next) & !empty ($this->maskActive[$type]) & !empty ($this->maskActive[$type])) { 
            $returnValue .= $this->beforeSelected[$type]; 
            $returnValue .= str_replace('{sub}', $sub, str_replace('{name2}', $name2, str_replace('{name1}', $name1, str_replace('{link}', $link, ($sub == '') ? ($this->maskActive[$type]) : ($this->maskActiveSub[$type]))))); 
         } 
         elseif ($this->isSelected($next)) { 
            $returnValue .= $this->beforeSelected[$type]; 
            $returnValue .= str_replace('{sub}', $sub, str_replace('{name2}', $name2, str_replace('{name1}', $name1, str_replace('{link}', $link, ($sub == '') ? ($this->maskSelected[$type]) : ($this->maskSelectedSub[$type]))))); 
         } else { 
            $returnValue .= $this->beforeEach[$type]; 
            $returnValue .= str_replace('{sub}', $sub, str_replace('{name2}', $name2, str_replace('{name1}', $name1, str_replace('{link}', $link, $this->maskNormal[$type])))); 
         } 

         $first[$type] = false; 
         $output[$type] = true; 
      } 
      elseif (!$output && $this->navigationTree[$parentId][$next]['postid'] == 0) { 
         /* 
          * Die Navigation enth?lt nichts. 
          */ 
      } 

      return $returnValue . $this->showNavigation($type, $this->navigationTree[$parentId][$next]['postid']); 
   } 

   function setExcludeStart($start) { 
      $this->excludeItemsStartingWith = $start; 
   } 

   function isVisble($name) { 
      if (substr($name, 0, strlen($this->excludeItemsStartingWith)) == $this->excludeItemsStartingWith) { 
         return false; 
      } 
      return true; 
   } 

   /** 
    * Ausgabe vor der Navigation 
    * @param String  Ausgabe vor der Navigation. 
    */ 
   function before($level, $text) { 
      $this->before[$level] = $text; 
   } 

   /** 
    * Ausgabe vor jedem Eintrag 
    * @param String  Ausgabe vor jedem Eintrag. 
    */ 
   function beforeEach($level, $text) { 
      $this->beforeEach[$level] = $text; 
   } 

   /** 
    * Ausgabe vor jedem selektierten Menueintrag 
    * @param String  Ausgabe vor jedem selektierten Menueintrag. 
    */ 
   function beforeSelected($level, $text) { 
      $this->beforeSelected[$level] = $text; 
   } 

   /** 
    * Ausgabe zwischen zwei Hauptmenupunkten 
    * @param String  Ausgabe zwischen zwei Hauptmenupunkten. 
    */ 
   function between($level, $text) { 
      $this->between[$level] = $text; 
   } 

   /** 
    * Ausgabe nach der Navigation 
    * @param String  Ausgabe nach der Navigation. 
    */ 
   function after($level, $text) { 
      $this->after[$level] = $text; 
   } 

   function maskNormal($level, $text) { 
      $this->maskNormal[$level] = $text; 
   } 

   function maskNormalSub($level, $text) { 
      $this->maskNormalSub[$level] = $text; 
   } 

   function maskSelected($level, $text) { 
      $this->maskSelected[$level] = $text; 
   } 

   function maskSelectedSub($level, $text) { 
      $this->maskSelectedSub[$level] = $text; 
   } 

   function maskActive($level, $text) { 
      $this->maskActive[$level] = $text; 
   } 

   function maskActiveSub($level, $text) { 
      $this->maskActiveSub[$level] = $text; 
   } 

   function setSub($level, $content) { 
      $this->sub[$level] = $content; 
   } 

   /** 
    * Gibt das Level der Kategorie zur?ck. 
    * @param Integer  Prim?rschl?ssel der Kategorie. 
    * @return Integer Level der spezifizierten Kategorie. 
    */ 
   function getLevel($idcat) { 

      global $cfg; 

      if (empty ($idcat)) { 
         return 0; 
      } 

      $this->db->query("" . 
      "SELECT level FROM {$cfg['tab']['cat_tree']} " . 
      "WHERE " . 
      "   idcat = $idcat" . 
      ""); 
      if ($this->db->next_record()) { 
         return $this->db->f('level'); 
      } else { 
         return 0; 
      } 
   } 

   /** 
    * Gib die Tiefe relativ zum Hauptmenu an. 
    * @param Integer  Prim?rschl?ssel der Kategorie 
    * @return Integer Level relativ zum Hauptmenu 
    */ 
   function getNetLevel($idcat) { 

      return $this->getLevel($idcat) - $this->getLevel($this->startId); 
   } 

   /** 
    * Ermittlung des jeweils ersten Kategorieeintrages jeder Ebene. Die 
    * Speicherung dieser Daten erfolgt in das Klassenattribut id. 
    */ 
   function setStartIds() { 

      $id = $this->idcat; 

      $level = $this->getNetLevel($id); 
      $this->id[$level] = $id; 

      while ($level > 0) { 
         $this->id[$level -1] = $this->getParentId($id); 
         $id = $this->id[$level -1]; 
         $level = $this->getNetLevel($id); 
      } 

      if (empty ($this->id)) { 
         $this->id[0] = $this->startId; 
      } 
      for ($i = 1; $i <= 4; $i++) { 
         if (empty ($this->id[$i])) { 
            $this->id[$i] = -1; 
         } 
      } 
      ksort($this->id); 
   } 

   /** 
    * Ermittlung des Elternelementes der Kategorie mit dem Prim?rschl?ssel 
    * idcat 
    * @param Integer  Prim?rschl?ssel des Kindelementes, dessen Elternelement 
    * ermittelt werden soll. 
    * @return Integer Prim?rschl?ssel des Elternelementes. 
    */ 
   function getParentId($idcat) { 

      global $cfg; 

      $this->db->query("" . 
      "SELECT parentid FROM {$cfg['tab']['cat']} " . 
      "WHERE " . 
      "   idcat = $idcat " . 
      ""); 
      if ($this->db->next_record()) { 
         return $this->db->f('parentid'); 
      } else { 
         return 0; 
      } 
   } 

   /** 
    * Anzeige, ob eine Navigationsebene Elemente enth?lt oder nicht. 
    * @param Integer  Navigationsstufe. 
    * @return Boolean True, wenn die Navigationsstufe leer ist (keine Elemente 
    * enh?lt). Sonst false. 
    */ 
   function navigationEmpty($level) { 

      if ($this->firstId[$level] == 0) { 
         return true; 
      } 

      return false; 
   } 

   /** 
    * Anzeige, ob eine Kategorie selektiert ist oder nicht. Eine Kategorie gilt 
    * als selektiert, wenn sie die aktuelle Kategorie ist oder ein direktes 
    * oder indirektes Elternelement der aktuellen Kategorie. 
    * @param Integer  Prim?rschl?ssel der Kategorie, deren Status gefragt ist. 
    * @return Boolean True, wenn die gefragte Kategorie mit der aktuellen 
    * Kategorie ?bereinstimmt oder ein direktes oder indirektes Elternelement 
    * der aktuellen Kategorie darstellt. 
    */ 
   function isSelected($idcat) { 

      return in_array($idcat, $this->id); 
   } 

   /** 
    * Anzeige, ob es sich bei der Kategorie um die aktive Kategorie handelt oder nicht. 
    * @param Integer Prim?rschl?ssel der Kategorie, deren Status gefragt ist. 
    * @return Boolean True, wenn die gefragte Kategorie aktiv ist. 
    */ 
   function isActive($idcat) { 

      return $idcat == $GLOBALS['idcat']; 
   } 

   /** 
    * Die Funktion gibt true zur?ck, wenn der ?bergene String ausschliesslich aus nummerischen Ziffern besteht. 
    * @param String parameter String, der gepr?ft werden soll. 
    * @return Boolean True, wenn der ?bergebene String ausschliesslich aus nummerischen Ziffern besteht. 
    */ 
   function isNumeric($parameter) { 
      return !preg_match("/[^0-9]/", $parameter); 
   } 
} 

/** 
 * externalContent (atqExternalContent) 
 * 
 * @version 1.0.0 
 * @author Andreas Kummer 
 * @copyright Copyright &copy; 2007, atelierQ kummer 
 */ 

class atqExternalContent { 

   function atqExternalContent($content, & $db) { 

      global $lang; 

      if (!is_object($db)) { 
         $this->db = new DB_Contenido(); 
      } else { 
         $this->db = $db; 
      } 

      $this->content = $content; 
      $this->lang = $lang; 

   } 

   function getHTML($index, $idart) { 

      global $cfg; 

      $this->db->query("" . 
      "SELECT c.value FROM {$cfg['tab']['art_lang']} AS b " . 
      "LEFT JOIN {$cfg['tab']['content']} AS c ON b.idartlang = c.idartlang " . 
      "LEFT JOIN {$cfg['tab']['type']} AS d ON c.idtype = d.idtype " . 
      "WHERE " . 
      "   b.idart = {$idart} " . 
      "   AND b.idlang = {$this->lang} " . 
      "   AND d.type = 'CMS_HTML' " . 
      "   AND c.typeid = $index " . 
      ""); 

      if ($this->db->next_record()) { 
         return urldecode($this->db->f('value')); 
      } 

      return ''; 
   } 

   function getOutput() { 

      $pattern = "|<a[\w\s]*href\s*=\s*\"[^\"]*idart=([0-9]*)[^>]*>\s*foreignContent\s*([0-9]*)\s*</a>|i"; 
      preg_match_all($pattern, $this->content, $match, PREG_PATTERN_ORDER); 

      for ($i = 0; $i < count($match[0]); $i++) { 

         $idart = (int) $match[1][$i]; 
         $index = (int) $match[2][$i]; 

         if ($match[2][$i] == '') { 
            $index = 1; 
         } 

         if ($idart > 0 && $index > 0) { 
            $this->content = str_replace($match[0][$i], $this->getHTML($index, $idart), $this->content); 
         } 
      } 

      return $this->content; 
   } 
} 


?> 
Lieber Gruß an alle und danke an Pepe G. für die Hilfe.

KAT
Dino23
Beiträge: 38
Registriert: Fr 13. Aug 2004, 15:13
Kontaktdaten:

Beitrag von Dino23 »

Hallo Community,
super tolles Modul!

Ich habe eine Frage.
Wie kann ich das erste und das letzte Element herausfinden?

Mein Menu hat am Anfang und am Ende runde Ecken und somit brauche ich da jeweils andere CSS Klassen für aktiv und inaktiv um ein anderes BG Bild zu laden wie für die anderen Elemente.

Wäre klasse wenn mir da jemand helfen könnte.

Vielen Dank!
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

gelöst. (hoffe ich mindestens...)
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
Ninerian
Beiträge: 16
Registriert: Mi 8. Okt 2008, 12:49
Kontaktdaten:

Keine Submenüs

Beitrag von Ninerian »

Hallo,

ich hab gerade das Modul ausprobiert, weil ich eine Listennavigation mit
Dropdown-Menüs erstellen will.
Nun funktioniert die Anzeige der Hauptpunkte wunderbar, aber leider werden die Submenüs nicht eingebunden.
Der Quelltext zeigt nur

<div id="navi">
<ul id="main_nav">
<li><a class="active" href="front_content.php?idcat=2">Unternehmen</a</li>
<li><a href="front_content.php?idcat=44">Aktuelles</a></li>
<li><a href="front_content.php?idcat=3">QS-Politik</a></li>
<li><a href="front_content.php?idcat=4">Wärmebehandlung</a></li>
<li><a href="front_content.php?idcat=5">Werkstoffprüfung</a></li>
<li><a href="front_content.php?idcat=6">Zusatzangebote</a></li>
</ul>
</div>

Mein Outputcode sieht so aus:

<?php

cInclude('frontend', 'includes/atelierq.navigation.class.inc.php');
$cApiClient = new cApiClient($client);
$aQnavigation = new aQnavigation($cApiClient->getProperty('navigation', 'idcat_hauptnavigation'));

// Ausgabe 1. Stufe
$aQnavigation->before( 1, '\n<ul id="sub_nav">\n');
$aQnavigation->after( 1, '\n</ul>\n');
$aQnavigation->between( 1, '');
$aQnavigation->maskNormal( 1, '\n<li><a href="{link}">{name1}</a></li>' );
$aQnavigation->maskSelectedSub(1, '\n<li class="more open"><a href="{link}" class="active">{name1}</a>{sub}</li>' );


$aQnavigation->before(0,'<ul id="main_nav">');
$aQnavigation->between(0, '');
$aQnavigation->after(0,'</ul>');
$aQnavigation->maskNormal(0, '<li><a href="{link}">{name1}</a></li>');
$aQnavigation->maskNormalSub(0, '<li><a href="{link}" class="sub">{name1}</a></li>');
$aQnavigation->maskSelected(0, '<li><a href="{link}" class="activ">{name1}</a></li>');
$aQnavigation->maskSelectedSub(0, '<li><a href="{link}" class="activ">{name1}</a></li>');


/*
* hier erfolgt die ausgabe an den browser
*/
$aQnavigation->setSub(0, $aQnavigation->showNavigation(1));
echo $aQnavigation->showNavigation(0);
?>

Ich hab in der Datenbank nachgeschaut, und die Oberpunkte haben idcat 1 und die Submenüs idcat2.
Im HTML-Code steht:
<div id="navi">
<container id="1" name="Navigation" types="Navigation" mode="optional" default="Hauptnavigation">Hauptnavigation</container>
</div>

Und dem Mandanten habe ich die Hauptnavigation mit idcat 1 zugewiesen.

Warum findet er die Untermenüs nicht?

Ich hoffe auf Hilfe.

Ninerian
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

dieses modul ist auch nicht für dropdowns geschaffen worden. bei dropdowns ist der ansatz komplett anders. dazu kannst du z.b. eine sitemap verwenden.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
Ninerian
Beiträge: 16
Registriert: Mi 8. Okt 2008, 12:49
Kontaktdaten:

Beitrag von Ninerian »

Aber ich kann doch mit dem Modul die Links als Liste ausgeben lassen oder?
Dementsprechende Beispiele sind in diesem Thread ja schon genannt worden.
Ich will ja nur das, die Ausgabe so aussieht:

<ul>
<li>menupunkt1</li>
<ul>
<li>untermenupunkt1</li>
<li>untermenupunkt2</li>
<li>untermenupunkt3</li>
<li>untermenupunkt4</li>
</ul>
<li>menupunkt2</li>
<li>menupunkt3</li>
<li>menupunkt4</li>
</ul>

Alles andere kann ich ja dann mit dem CSS lösen.
Ich kann mir nicht vorstellen, das sowas nicht gehen soll.

Auf jedenfall, schreibt der bei meinem Code nicht die Untermenüs als html-code raus. Also was habe ich vergessen?
Gesperrt