Modul :: NavigationUniversell

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Modul :: NavigationUniversell

Beitrag von derSteffen » Mi 18. Jul 2012, 17:54

Hallo Rene,

das habe ich schon probiert, aber bei meine Änderungen wurden die Inhalte gar nicht ausgeben.

Habe jetzt in meine nOutput die Zeil mal zu Testzwecken abgeändert:

Code: Alles auswählen

$aQnavigation->maskNormal(1, '<a href="{link}" title="{name1}">{name3}{name1}</a>');
Also soll später mein {name3} die css-Klasse werden!

Ich habe den einen Teil um Name3 erweitert, aber in der Ausgabe wird weder {name3} ausgeschrieben noch etwas anderes

Code: Alles auswählen

if ($this->isActive($next) & !empty ($this->maskActive[$type]) & !empty ($this->maskActive[$type])) {
				$returnValue .= $this->beforeSelected[$type];
				$returnValue .= str_replace('{sub}', $sub, str_replace('{name3}', $name3, str_replace('{name2}', $name2, str_replace('{name1}', $name1, str_replace('{link}', $link, ($sub == '') ? ($this->maskActive[$type]) : ($this->maskActiveSub[$type]))))));
			}
Oder darf das nicht mit dem Replace gemacht werden?

MfG Steffen

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Modul :: NavigationUniversell

Beitrag von Spider IT » Mi 18. Jul 2012, 19:10

Doch, eigentlich schon.
Was genau wird denn ausgegeben, der Text {name3} oder gar nichts?
Wenn gar nichts, hast du die PHP-Variable $name3 auch richtig gesetzt?

Gruß
René

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Gelöst = IDCAT ausgeben

Beitrag von derSteffen » Do 19. Jul 2012, 07:34

Mhm ...

also ein Teil-Erfolg!

Anbei ein weiteres Beispiel, wie man die aktuelle IDCAT ausgeben kann (diese kann man dann ja auch als CSS verwenden und manipulieren):

Output-Beispiel:

Code: Alles auswählen

{css}
Klasse:

Ändere

Code: Alles auswählen

} else {
				$name1 = $this->navigationTree[$parentId][$next]['name'];
				$name2 = '';	
			}
In

Code: Alles auswählen

} else {
				$name1 = $this->navigationTree[$parentId][$next]['name'];
				$name2 = '';
				$css = $next;	
			}
Ändere

Code: Alles auswählen

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]))));
			}
In

Code: Alles auswählen

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('{css}', $css, 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('{css}', $css, 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('{css}', $css, str_replace('{link}', $link, $this->maskNormal[$type])))));
			}
MfG Steffen

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Gelöst = Name als CSS

Beitrag von derSteffen » Do 19. Jul 2012, 08:14

Anbei die Änderungen, wie man den Menüname zweiten Platzhalter für CSS-KLasse verwendne kann.

Dabei wird die CSS wie folgt manipuliert:
- Keine Leerzeichen,
- keine Sonderzeichen (erweiterbar),
- alles Kleinschreibung,
- es werden nur die ersten 7 Buchstaben ausgegeben.

Somit kann man bei einer Menüsruktur, welche immer wieder kommt - also immer die gleiche Menüpunkte hat - anhand des Menünamen, bzw. in diesem Fall jetzt des CSS-Erweiterung, auf bestimmte Menüpunkte individuelle CSS-Formatierungen vornehmen.

Basierend von meinen Post darüber muss jetzt nur noch das

Aus der Original-Klasse:

Code: Alles auswählen

} else {
            $name1 = $this->navigationTree[$parentId][$next]['name'];
            $name2 = '';   
         }
In das geändert werden:

Code: Alles auswählen

} else {
				$name1 = $this->navigationTree[$parentId][$next]['name'];
				$name2 = '';
				$css = $this->navigationTree[$parentId][$next]['name'];								
				$ersetzemal = array("ß", " ", "ü", "&", "ä", "ö", "Ä", "Ö", "Ü", "?", "!");
				$css = html_entity_decode(strip_tags(str_replace($ersetzemal, "", urldecode($css))));
				$css = strtolower($css);
				$css = substr($css, 0, 7);
				
			}
Bzw., wer schon die Änderung aus dem erst Post übernommen hat das suchen und ersetzen:

Code: Alles auswählen

    } else {
                $name1 = $this->navigationTree[$parentId][$next]['name'];
                $name2 = '';
                $css = $next;   
             }
ACHTUNG: Es muss natürlich auch (wie bereits im Post darüber schon beschrieben)
Aus der Original-Klasse:

Code: Alles auswählen

    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]))));
             }
In das geändert werden:

Code: Alles auswählen

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('{css}', $css, 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('{css}', $css, 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('{css}', $css, str_replace('{link}', $link, $this->maskNormal[$type])))));
			}
Gerne auch Verbesserungsvorschläge

MfG Steffen

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Modul :: NavigationUniversell

Beitrag von Spider IT » Do 19. Jul 2012, 08:18

Hallo Steffen,

wenn du die idcat als ID eines HTML-Elements nutzen möchtest, musst du einen Buchstaben voranstellen, sonst ist das nicht valide (ID-Werte müssen mit einem Buchstaben anfangen).

Du kannst aber auch (für deine Variable $name3) die Funktion capiStrReplaceDiacritics() zusammen mit str_replace() für die Leerstellen nutzen:

Code: Alles auswählen

} else {
				$name1 = $this->navigationTree[$parentId][$next]['name'];
				$name2 = '';
				$name3 = capiStrReplaceDiacritics(str_replace(' ', '-', $name1), $encoding[$lang]);	
			}
Damit erhälst du sowas wie der Alias.

Gruß
René

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Modul :: NavigationUniversell

Beitrag von derSteffen » Do 19. Jul 2012, 09:46

Hallo René,

ah .. ja das ist natürlich hübscher! Das kann nur ein Profi wissen ;-)

PS: In meinen letzte nbeiden Post hatte ich statt $name3 jetzt $css geschrieben :-)

Vielen Dank für den Tipp!

MfG Steffen

stefkey
Beiträge: 556
Registriert: Mi 19. Okt 2005, 16:10
Wohnort: Heidelberg
Kontaktdaten:

Re: Modul :: NavigationUniversell

Beitrag von stefkey » Mo 17. Sep 2012, 00:17

Hallo,

der Downloadlink aus dem 1. Post geht leider nicht mehr. Einen alternativen Link habe ich nicht gefunden. Gibt es das Modul zum download oder muss ich es aus zahlreichen Posts zusammenstricken? Ich hab halt nicht viel Ahnung und denke ein Downloadlink wäre hilfreich.

Grüße,
stefkey

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Modul :: NavigationUniversell

Beitrag von Spider IT » Mo 17. Sep 2012, 07:59

Hallo,

der Code steht doch gleich nach dem Downloadlink in 2 Code-Boxen, mit eine Beschreibung was zu machen ist.
Lesen bildet! (sorry, manchmal rutscht mir das raus)

Gruß
René

stefkey
Beiträge: 556
Registriert: Mi 19. Okt 2005, 16:10
Wohnort: Heidelberg
Kontaktdaten:

Re: Modul :: NavigationUniversell

Beitrag von stefkey » Di 18. Sep 2012, 23:46

Manchmal muss es einfach auch mal wieder gesagt werden! DANKE! Ich habs nun eingebaut und kämpfe mich durch!
sorry... ich hatte es zuerst mal versucht mit den Angaben auf der ersten Seite hier, leider ohne Erfolg - es war keine Navi zu sehen. Daher mein verzweifelter Hilferuf nach mehr (vollständigen) Infos. Nach deiner Antwort wusste ich dann das es irgendwie gehen MUSS und ich biss mich fest solange bis es klappt. Danke und Grüße...

stefkey
Beiträge: 556
Registriert: Mi 19. Okt 2005, 16:10
Wohnort: Heidelberg
Kontaktdaten:

Re: Modul :: NavigationUniversell

Beitrag von stefkey » Mi 19. Sep 2012, 14:40

Hallo nochmal,

hmm - folgendes Problemchen: Ich habe die vertikale Navigation per CSS mit background-color hinterlegt.
Wenn nun keine Subnavigation vorhanden ist (keine Unterkategorien) gibts trotzdem ein klein wenig background-color. Das Modul schreibt auch ohne Navi ein <ul> Tag und da hier die Farbe + ein padding eingestellt ist habe ich diesen Effekt. Gibts es eine Stelle in der atelierq.navigation.class.inc.php wo man den <ul> - Tag generieren kann ohne das er im Modulcode steht, sodass dieser Tag auch nur ausgegeben wird wenn tatsächlich auch eine Unternavigation da ist?

Code: Alles auswählen

    <?php


    /**
    * @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 <= 3; $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 || c.idfrontendpermission 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 AND c.idlang = b.idlang AND plugin ='category') " .
          "LEFT JOIN {$cfg['tab']['frontendgroupmembers']} AS d ON c.idfrontendgroup = d.idfrontendgroup " .
          "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]} " .
          "   ) " .
          "   AND (" .
          "      d.idfrontenduser = {$user} " .
          "      OR d.idfrontenduser IS NULL" .
          "   )" .
          "");

          $this->navigationTree = array ();

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

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

             for ($i = 0; $i <= 3; $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 = '';
             }

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

             if ($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 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 <= 3; $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);
       }

       function isNumeric($parameter) {
          return !preg_match("/[^0-9]/", $parameter);
       }
    }

    ?>

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Modul :: NavigationUniversell

Beitrag von Spider IT » Mi 19. Sep 2012, 14:58

Wie sieht denn der Modul-Output aus, hast du da separate Ausgaben mit und ohne Subnavi?
Im Beispiel auf der ersten Seite des Threads ist das glaube ich so drin (insgesamt 4 Zeilen für normal, normal mit sub, active und active mit sub).

Gruß
René

stefkey
Beiträge: 556
Registriert: Mi 19. Okt 2005, 16:10
Wohnort: Heidelberg
Kontaktdaten:

Re: Modul :: NavigationUniversell

Beitrag von stefkey » Mi 19. Sep 2012, 15:08

es soll nur eine Navigation erscheinen wenn es Unterkategorieen gibt. Wenn keine Unterkategorie da ist soll an der Stelle auch nichts erscheinen, also alles weiß bleiben. Dort an dieser Stelle gibt es dann keine Navigation - auch nicht für höhere Ebenen.
Der Modulcode sieht so aus:

Code: Alles auswählen

<?php

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

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


/*
* Ausgabe 4. Stufe
*/
$aQnavigation->between(3, '');
$aQnavigation->maskNormal(3, '<li><a href="{link}" class="nav_4th">{name1}</a></li>');
$aQnavigation->maskNormalSub(3, '<li><a href="{link}" class="nav_4thsub">{name1}</a></li>{sub}');
$aQnavigation->maskSelected(3, '<li><a href="{link}" class="nav_4thaktiv">{name1}</a></li>');
$aQnavigation->maskSelectedSub(3, '<li><a href="{link}" class="nav_4thsubaktiv">{name1}</a><ul>{sub}</ul></li>');

/*
* Ausgabe 3. Stufe
*/
$aQnavigation->before(2, '<ul>');
$aQnavigation->after(2, '</ul>');
$aQnavigation->between(2, '');
$aQnavigation->maskNormal(2, '<li><a href="{link}" class="nav_3rd">{name1}</a></li>');
$aQnavigation->maskNormalSub(2, '<li><a href="{link}" class="nav_3rdsub">{name1}</a></li>{sub}');
$aQnavigation->maskSelected(2, '<li><a href="{link}" class="nav_3rdaktiv">{name1}</a></li>');
$aQnavigation->maskSelectedSub(2, '<li><a href="{link}" class="nav_3rdsubaktiv">{name1}</a><ul>{sub}</ul></li>');
$aQnavigation->setSub(2, $aQnavigation->showNavigation(3));

/*
* hier erfolgt die ausgabe an den browser
*/
echo $aQnavigation->showNavigation(2);
?> 




Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Modul :: NavigationUniversell

Beitrag von Spider IT » Mi 19. Sep 2012, 16:01

Versuch mal anstatt

Code: Alles auswählen

$aQnavigation->setSub(2, $aQnavigation->showNavigation(3));
folgendes:

Code: Alles auswählen

$sub = $aQnavigation->showNavigation(3);
if (strlen($sub)) {
    $aQnavigation->setSub(2, $sub);
}
Dadurch müsste eigentlich das Modul die richtige Vorlage wählen, also die ohne sub wenn keine Unterebenen existieren.

Gruß
René

stefkey
Beiträge: 556
Registriert: Mi 19. Okt 2005, 16:10
Wohnort: Heidelberg
Kontaktdaten:

Re: Modul :: NavigationUniversell

Beitrag von stefkey » Mi 19. Sep 2012, 16:48

hat leider nichts geändert. Der HTML Code zeigt an der Problemstellen nach wie vor:

Code: Alles auswählen

<div id="left">
     <div id="subnavigation">
         <ul> </ul>
    </div>
Warum schreibt das Modul denn "<ul> </ul>" wenn es keine Unternavi gibt?

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Modul :: NavigationUniversell

Beitrag von Spider IT » Do 20. Sep 2012, 09:25

Ist das die GENAUE Ausgabe?
Steht da tatsächlich ein Leerzeichen in dem ul?
Wenn ja, dann ändere das nochmal zu

Code: Alles auswählen

if (strlen($sub) > 1) {
Damit gibst du eine Mindestlänge vor (kannst du auch weiter hochsetzen).

Gruß
René

Gesperrt