Hauptnavi 3geteilt (gelöst dank emergence!)

Dinkel
Beiträge: 565
Registriert: Di 22. Mär 2005, 14:52
Kontaktdaten:

Beitrag von Dinkel » So 23. Apr 2006, 20:09

hab ich gelesen, ja ;) aber das macht mir doch gewisse Probleme:

Code: Alles auswählen

In Kombination mit fummeln im Modul solltest Du dann dahinterkommen können.
selbstentwickelte Module:
Downloads und Infos zu den Modulen: gibt es hier.
Modul: Forum | Version 0.9 | getestet: 4.6.24 MR, 4.8.11, 4.8.11 AMR
Modul: Galleriffic | Version: 0.3.4 BETA | getestet: 4.8.11, 4.8.11 AMR, 4.8.12, 4.8.12 AMR
Modul: Metadata | Version: 2.0 | getestet: 4.9.7, 4.9.7 AMR
Modul: Slider Gallery | Version: 1.0 | getestet: 4.9.12 AMR
Modul: Up- & Download | Version: 4.1 | getestet: 4.9.12 AMR

korben
Beiträge: 1
Registriert: Di 2. Mai 2006, 14:48
Wohnort: Hamburg
Kontaktdaten:

Re: Hauptnavi 3geteilt (gelöst dank emmergence!)

Beitrag von korben » Do 4. Mai 2006, 10:14

raoulkimba hat geschrieben:Warning: Invalid argument supplied for foreach() in /serverpfad/cms/front_content.php(792) : eval()'d code on line 827
Hi,
hatte das selbe Problem bei frischer Installation der 4.6.8 und Einfügen der Module HauptNav1, HauptNav2 und HauptNav3-5 aus dem Startposting von mvf.
Probleme macht das angehängte &idart= in der URL, was im Originalmodul Hauptnavigation nicht vorkommt, da auch nicht nötig für die Navigation (dafür gibt es ja im Backend die "Startseite"-Funktion für die einzelnen Kategorien). Hier wurden zudem fehlerhafte idarts eingetragen, was dann zum Fehler führte.

Die nötigen Änderungen zur Beseitigung des Fehlers:

HauptNav1:
keine Änderung nötig

HauptNav2:

Code: Alles auswählen

105: $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat'])); //.'&idart='.$data['idart']));
HauptNav3-5:

Code: Alles auswählen

129: $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat'])); //.'&idart='.$data['idart']));
147: $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat'])); //.'&idart='.$data['idart'])); 
164: $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat'])); //.'&idart='.$data['idart'])); 
Damit tritt der Fehler dann nur noch auf der Startseite auf, wenn front_content.php ganz ohne Parameter aufgerufen wird. Dieses Problem beseitigt man durch Einfügen von $thirdLevel = array(); an folgender Stelle ($navitems wird so in HauptNav1 initialisiert, $thirdLevel jedoch nicht):

HauptNav3-5:

Code: Alles auswählen

$thirdLevel = array();  //inserted

/* -mvfbof- fetch third level array -> $thirdLevel */ 
Grüße von der Elbe,
Korben

bundeswehr_soldat
Beiträge: 7
Registriert: Mi 21. Jun 2006, 07:35
Kontaktdaten:

Beitrag von bundeswehr_soldat » Do 27. Jul 2006, 14:06

Habe das Modul erfolgreich eingebaut habe aber Probleme, da ich eine bestimmte CSS-Datei benutzen muss.
Die templates hab ich angepaßt nur ist mein Problem jetzt noch folgendes:
Die Struktur in HTML sollte nachher so aussehen:

Code: Alles auswählen

<li class="open">Link
  <ul>
    <li>Link</li>
    <li>Link</li>
  </ul>
</li>
wie bekomm ich das hin?
Dafür muss ich ja nicht nur die templates ändern, oder?
jetzt sieht es bei mir so aus:

Code: Alles auswählen

<li class="open">Link</li>
  <li>Link</li>
  <li>Link</li>

joergsart
Beiträge: 34
Registriert: Do 19. Mai 2005, 23:48
Wohnort: Hamburg
Kontaktdaten:

Tipp - Navigationsebenen 3-5 geteilt

Beitrag von joergsart » Mi 2. Aug 2006, 11:26

Ich möchte natürlich niemanden davon abhalten, sich in PHP weiter zu bilden und das Menü noch weiter zu teilen.

Eine schnelle und unkomplizierte Lösung ist es, in den weiteren Ebenen einfach den Template-Verweis herauszunehmen, wodurch keine Ausgabe der entsprechenden Naviebene erfolgt. Nicht elegant, aber wer es unter Zeitdruck dringend braucht und das Standardmenü mit weiteren horizontalen Ebenen 3-5 braucht...

Code: Alles auswählen

<?php 
/********************************************* 
* CONTENIDO MODUL - OUTPUT 
* 
* Modulname  :  Hauptnavigation 
* Author(s)  :  Jan Lengowski, Andreas Lindner, 4fb 
* Copyright  :  Contenido - four for business, Andreas Lindner 
* Created    :  12-08-2005 
* Modifier   :  Oliver Simon, simon-oliver.com 
* Modified   :  27-11-2005 
* Modifier   :  Guido Unger (mvf), 'contenido'.funjumping.de 
* Modified   :  16-01-2005 
* Changes    :  included 'startidartlang' for compatibility with stese's mr_464_org 
                modification to extract 3rd-5th level for seperat display 
**********************************************/ 

/* Include Template Class */ 
include_once($cfg["path"]["contenido"] . 'classes/class.template.php'); 

/** 
 * Array storing alle the 
 * navigation data 
 */ 
$navitems = array(); 

/* Template Instance */ 
$tpl = new Template; 

$sql = "SELECT 
            A.idcat, 
            C.name, 
          C.public, 
             C.idcatlang, 
             C.startidartlang 
        FROM 
            ".$cfg["tab"]["cat_tree"]." AS A, 
            ".$cfg["tab"]["cat"]." AS B, 
            ".$cfg["tab"]["cat_lang"]." AS C 
        WHERE 
            A.idcat     = B.idcat   AND 
            B.idcat     = C.idcat   AND 
            B.idclient  = '$client' AND 
            C.idlang    = '$lang'   AND 
            C.visible   = '1'       AND 
            B.parentid  = '$sel_idcat' 
        ORDER BY 
            A.idtree"; 

$db->query($sql); 

while ( $db->next_record() ) { 

        /* Check for external redirects... */ 
        $sql = "SELECT 
                    a.external_redirect AS ext, 
                    a.idartlang AS idartlang 
                FROM 
                    ".$cfg["tab"]["art_lang"]." AS a, 
                    ".$cfg["tab"]["cat_art"]." AS b, 
                    ".$cfg["tab"]["cat"]." AS c 
                WHERE 
                    b.idcat     = '".$db->f("idcat")."' AND 
                    c.idclient  = '".$client."' AND 
                    c.idcat     = b.idcat AND 
                    a.idart     = b.idart AND 
                    a.idlang    = '".$lang."'"; 

        $db2->query($sql); 
        #$db2->next_record(); 
      $flag = false; 
      while ($db2->next_record()&&!$flag) { 
           if (isStartArticle($db2->f("idartlang"), $db->f("idcat"), $lang)) 
           { 
            $flag = true; 
               $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank'; 
      
               $navitems[$db->f("idcat")] = array("idcat"  => $db->f("idcat"), 
                                                  "name"   => $db->f("name"), 
                                                  "idart"      => $db->f("startidartlang"), 
                                                  "public" => $db->f("public"), 
                                            "idcatlang" => $db->f("idcatlang"), 
                                                  "target" => $target); 
           } 
      } 
} 

/* Create Navigation Array */ 
if(($sel_idcat=='')||($sel_idcat=='0')){ 
    $cApiClient = new cApiClient($client); 
    $sel_idcat = $cApiClient->getProperty('navigation', 'idcat_homepage'); 
} 

nav($sel_idcat); 

$thirdLevel = array();  //inserted 

/* -mvfbof- fetch third level array -> $thirdLevel */ 
foreach ($navitems as $key => $data) { 

   if (checkCatPermission($data['idcatlang'],$data['public'])) { 

                  if (is_array($data['sub'])) { 
                        $thirdLevel = $data['sub']; 
                    } 

    } // end if 
} // end foreach 

/* -mvfeof- fetch third level */ 


/* Start Output buffer */ 
ob_start(); 

foreach ($thirdLevel as $key => $data) { // -mvf $thirdLevel statt $navitems 

   if (checkCatPermission($data['idcatlang'],$data['public'])) { 

       /* 2. Navigation level */ 
       if (is_array($data['sub'])) {  // -mvf überbrückt die 2. ebene 

          /* 3. Navigation level */ 
                  if (is_array($data['sub'])) { 
                      foreach ($data['sub'] as $key => $data) { 
                     if (checkCatPermission($data['idcatlang'],$data['public'])) { 
                             $tpl->reset(); 
                             $tpl->set('d', 'NAME',  $data['name']); 
                             $tpl->set('d', 'TARGET', $data['target']); 
                             $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat'])); //.'&idart='.$data['idart']));
                             $tpl->next(); 
       
                             if ($idcat == $data['idcat']) { 
                                 $tpl->generate('');          // leer!
                        }elseif(is_array($data['sub'])){ 
                             $tpl->generate('');              // leer!
                             } else { 
                                 $tpl->generate('');          // leer!
                             } 

                             /* 4. Navigation level */ 
                           if (is_array($data['sub'])) { 
                               foreach ($data['sub'] as $key => $data) { 
                              if (checkCatPermission($data['idcatlang'],$data['public'])) { 
                                      $tpl->reset(); 
                                      $tpl->set('d', 'NAME',  $data['name']); 
                                      $tpl->set('d', 'TARGET', $data['target']); 
                                      $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat'])); //.'&idart='.$data['idart'])); 
                                      $tpl->next(); 
                                      if ($idcat == $data['idcat']) { 
                                          $tpl->generate('templates/navfourth_on.html'); 
                                 }elseif(is_array($data['sub'])){ 
                                      $tpl->generate('templates/navfourth_open.html'); 
                                      } else { 
                                          $tpl->generate('templates/navfourth_off.html'); 
                                      } 

                                      /* 5. Navigation level */ 
                                    if (is_array($data['sub'])) { 
                                        foreach ($data['sub'] as $key => $data) { 
                                       if (checkCatPermission($data['idcatlang'],$data['public'])) { 
                                               $tpl->reset(); 
                                               $tpl->set('d', 'NAME',  $data['name']); 
                                               $tpl->set('d', 'TARGET', $data['target']); 
                                               $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat'])); //.'&idart='.$data['idart'])); 
                                               $tpl->next(); 
                                               if ($idcat == $data['idcat']) { 
                                                   $tpl->generate('');            // leer!
                                               } else { 
                                                   $tpl->generate('');            // leer!
                                               } 
                                          } // end if 
                                        } // end foreach 
                                    } // end if 
                                 } // end if 
                               } // end foreach 
                           } // end if 
                        } // end if 
                      } // end foreach 
                  } // end if 
               } // end if 

    } // end if 
} // end foreach 

/* Read out buffer */ 
$html = ob_get_contents(); 

/* Clean buffer */ 
ob_end_clean(); 

/* Output buffer-contents */ 
echo $html; 


?>

Grüße in die Runde,
explizit noch mal an emergence und Herrn B, die hier im Forum neben vielen anderen einen guten job machen - selbst bei über 35 Grad![/code

#ayshe
Beiträge: 445
Registriert: Do 25. Mär 2004, 10:04
Kontaktdaten:

html nur ausgeben, wenn inhalte da sind

Beitrag von #ayshe » Di 12. Sep 2006, 15:13

Hallo Leutz,

ich verwende das 3-geteilte Hauptnav-Modul und bei mir funktioniert es auch reibungslos. Ich habe es dahingehend umgebaut, dass die Links als Listitems ausgegeben werden. Nun ist es aber so, dass das Modul immer auch die Listen-Tags auswirft, wenn keine Subnavigation gebildet wird.

Mal konkreter:
Ich habe ein Menü, für das es bis zu zwei Untermenüs gibt. Aber manchmal hat die 1. Ebene kein Untermenü. In diesem Fall habe ich dann im Quelltext-Output dennoch

Code: Alles auswählen

<ul></ul>
stehen, ohne irgendwelche Listitems dazwischen (weil es ja keine Sub-Navi-Ebene gibt). Das ist aber nicht XHTML-valide.

Deshalb suche ich eine Möglichkeit, die <ul>-Tags nur dann auszugeben, wenn sie auch wirklich benötigt werden. Mein Modul-Output der 2. Ebene sieht zur Zeit so aus:

Code: Alles auswählen

<?php
/********************************************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname     :     Hauptnavigation
* Author(s)   :     Jan Lengowski, Andreas Lindner, 4fb
* Copyright   :     Contenido - four for business, Andreas Lindner
* Created     :     12.08.2005
* Modifier   :   Oliver Simon, simon-oliver.com
* Modified   :   27.11.2005
*********************************************************************/

/* Include Template Class */
include_once($cfg["path"]["contenido"] . 'classes/class.template.php');

/**
 * Array storing alle the
 * navigation data
 */
$navitems = array();

/* Template Instance */
$tpl = new Template;

$sql = "SELECT
            A.idcat,
            C.name,
          C.public,
             C.idcatlang,
             C.startidartlang
        FROM
            ".$cfg["tab"]["cat_tree"]." AS A,
            ".$cfg["tab"]["cat"]." AS B,
            ".$cfg["tab"]["cat_lang"]." AS C
        WHERE
            A.idcat     = B.idcat   AND
            B.idcat     = C.idcat   AND
            B.idclient  = '$client' AND
            C.idlang    = '$lang'   AND
            C.visible   = '1'       AND
            B.parentid  = '$sel_idcat'
        ORDER BY
            A.idtree";

$db->query($sql);
echo "<ul>";
while ( $db->next_record() ) {

        /* Check for external redirects... */
        $sql = "SELECT
                    a.external_redirect AS ext,
                    a.idartlang AS idartlang
                FROM
                    ".$cfg["tab"]["art_lang"]." AS a,
                    ".$cfg["tab"]["cat_art"]." AS b,
                    ".$cfg["tab"]["cat"]." AS c
                WHERE
                    b.idcat     = '".$db->f("idcat")."' AND
                    c.idclient  = '".$client."' AND
                    c.idcat     = b.idcat AND
                    a.idart     = b.idart AND
                    a.idlang    = '".$lang."'";

        $db2->query($sql);
        #$db2->next_record();
      $flag = false;
      while ($db2->next_record()&&!$flag) {
           if (isStartArticle($db2->f("idartlang"), $db->f("idcat"), $lang))
           {
            $flag = true;
               $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
     
               $navitems[$db->f("idcat")] = array("idcat"  => $db->f("idcat"),
                                                  "name"   => $db->f("name"),
                                                  "idart"      => $db->f("startidartlang"),
                                                  "public" => $db->f("public"),
                                            "idcatlang" => $db->f("idcatlang"),
                                                  "target" => $target);
           }
      }
}

/* Create Navigation Array */
if(($sel_idcat=='')||($sel_idcat=='0')){
    $cApiClient = new cApiClient($client);
    $sel_idcat = $cApiClient->getProperty('navigation', 'idcat_homepage');
}

nav($sel_idcat);

/* Start Output buffer */

ob_start();
foreach ($navitems as $key => $data) {

   if (checkCatPermission($data['idcatlang'],$data['public'])) {
       /* 2. Navigation level */
       if (is_array($data['sub'])) 

{
           foreach ($data['sub'] as $key => $data) {
            if (checkCatPermission($data['idcatlang'],$data['public'])) {
                  $tpl->reset();
                  $tpl->set('d', 'NAME',  $data['name']);
                  $tpl->set('d', 'TARGET', $data['target']);
                  $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat'])); //.'&idart='.$data['idart']));
                  $tpl->next();
                  if ($idcat == $data['idcat']) {
                      $tpl->generate('templates/navsecond_on.html',0,0);
               }elseif(is_array($data['sub'])){
                    $tpl->generate('templates/navsecond_open.html',0,0);
                  } else {
                      $tpl->generate('templates/navsecond_off.html',0,0);
                  }

               } // end if
           } // end foreach
          } // end if

    } // end if
} // end foreach
echo "</ul>";

/* Read out buffer */
$html = ob_get_contents();

/* Clean buffer */
ob_end_clean();

/* Output buffer-contents */
echo $html;
?>
Ich rufe also vor der while-Schleife das Start-Tag auf und beende die Liste nach dem letzten "for each".

Kann man da eine Funktion ergänzen, um mein Ziel zu erreichen?

silicone
Beiträge: 299
Registriert: Di 15. Mär 2005, 10:33
Kontaktdaten:

Beitrag von silicone » Mi 13. Sep 2006, 16:00

Hallo # ayshe,

hast du schon eine Lösung?
Habe ein ähnliches Problem (hier).

Gruß
Thomas

#ayshe
Beiträge: 445
Registriert: Do 25. Mär 2004, 10:04
Kontaktdaten:

Beitrag von #ayshe » Do 14. Sep 2006, 13:52

Hallo,

ich konnte mit Hilfe von Dodger77 das Problem lösen. Er schreibt dazu:
Dodger77 hat geschrieben:ich habe die <ul> und </ul> an die richtigen Stellen geschoben und die
Abfrage für die Unterkategorien etwas verändert. Vorher wurde geprüft,
ob ein Array vorliegt, nun muss dieses Array auch Elemente beinhalten.
Die Teile 2 und 3 sind angepasst und liegen hier als gezipptes xml bereit:
http://www.rot65.de/material/3geteilte_hauptnavi.zip

Danke an Dodger77 für die schnelle Hilfe und Dein Einverständnis, den modifizierten Code zu veröffentlichen.

Gruß,
Ayshe

Contenider
Beiträge: 503
Registriert: Do 6. Apr 2006, 01:40
Kontaktdaten:

Beitrag von Contenider » Di 7. Nov 2006, 04:35

Kurze Frage: Ist dieses Modul bereits von jemandem mit der 4.6.15 getestet worden? Wenn ja, mit welchem Ergebnis?
Ειμαστε στη μεση απο κατι...

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Di 7. Nov 2006, 07:53

Maron Chatzifrantzis hat geschrieben:Kurze Frage: Ist dieses Modul bereits von jemandem mit der 4.6.15 getestet worden? Wenn ja, mit welchem Ergebnis?
Bei mir funktioniert die letzte Fassung mit der 4.6.15 (Post von #ayshe).

ClemensSchnitzler
Beiträge: 137
Registriert: Di 17. Aug 2004, 12:32
Kontaktdaten:

CSS-Gestaltung funktioniert nicht

Beitrag von ClemensSchnitzler » Di 27. Feb 2007, 07:58

Ich habe mich entschieden die geteilte Navigation von #ayshe einzubauen. Diese soll nun komplett per CSS gestaltet werden. Hiermit habe ich meine Probleme.

#ayshe hatte ein Problem mit <ul> </ul> müssen diese Tags zur CSS-Gestaltung aus dem Modul-Output hierfür gelöscht werden, oder können diese ohne Probleme zu verursachen darin verbleiben?

Fakt bei mir ist, dass Ebene 2 bei mir zwar angezeigt wird, aber in keinster Weise die gewünschte Gestaltung übernommen wird.

Vielen Dank für Eure Hilfe

Clemens

ClemensSchnitzler
Beiträge: 137
Registriert: Di 17. Aug 2004, 12:32
Kontaktdaten:

Lösung gefunden aber nicht horizontal

Beitrag von ClemensSchnitzler » Di 27. Feb 2007, 08:27

Nachdem ich nun mehrere Stunden davor verbracht habe und meine Frage gepostet habe bin ich auf die Lösung gekommen. Die Gestaltung wird nun übernommen. Die Tags <ul> </ul> sind nicht zwingend notwendig.

Trotzdem noch eine Frage: Die 2. Ebene der Navigation soll nun Horizontal verlaufen. Hierfür habe ich noch keine Lösung. Sie wird mir nur Vertikal angezeigt. Muss ich das ganze in eine Tabelle verpacken? Ich wollte das Ganze nach Möglichkeit ohne Tabellen realisieren.

Viele Grüße Clemens

silicone
Beiträge: 299
Registriert: Di 15. Mär 2005, 10:33
Kontaktdaten:

Beitrag von silicone » Di 27. Feb 2007, 08:34

Deine <li>s der 2. Ebene brauchen ein "float:left;"

andreasb
Beiträge: 212
Registriert: Fr 10. Dez 2004, 02:48
Wohnort: Fernwald
Kontaktdaten:

Beitrag von andreasb » Mo 10. Dez 2007, 02:03

Hallo!

Ich nutze diese Navigation und bräuchte ebenfalls die dritte Ebene.
Allerdings soll dabei die zweite Ebene nicht angezeigt werden.
Ich habe also Links im Content-Bereich, die auf die zweite Ebene verweisen.

Bin ich auf einem Artikel der zweiten Ebene, dann soll lediglich die dritte angezeigt werden.

Habe den Code hier einmal eingefügt, die dritte Ebene wird auch angezeigt, nur die Links sind falsch. Das ganze unter 4.6.15.

Eine Idee?

Danke!

Gesperrt