[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Navi-Template (3 Ebenen / Online True) von der REDAXO-Seite - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Benutzeravatar
svenalbert
Beiträge: 1308
Registriert: 24. Nov 2005, 17:21
Wohnort: Clausthal-Zellerfeld / lower saxony
Kontaktdaten: ICQ Website

Navi-Template (3 Ebenen / Online True) von der REDAXO-Seite

8. Dez 2005, 19:44

3 Ebenen / Online True ...
Stellt bis zu 3 Ebenen dar. Kategorien müssen online sein. Darstellung der Unterkategorie nur, wenn die Oberkategorie aktiv ist.
Eigentlich wollte ich fragen, ob es so eine Navigation schon gibt. Hab dann aber nochmal genau gelesen und hab die ja dann gefunden.

Meine Frage: Brauch ich da Ergänzungen für das CSS-File oder nicht?
Ich glaube (so beim grob drüber weg schauen) wird .menu und .submenu gebraucht.


Danke.
Sven

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

8. Dez 2005, 19:56

Hej Sven,

mehr brauchst du bei dieser Navigation wirklich nicht. Also a.menu bzw a.submenu reicht um die links zu formatieren.

mir fällt aber auf, das dies eine unschöne navigation ist. sie wird nur mit a-tags ausgegeben und nicht als liste. des weiteren hast du keinen bezug auf den aktuellen link.

wer hat die bloss unter downloads veröffentlicht ? :-)

thomas

Benutzeravatar
svenalbert
Beiträge: 1308
Registriert: 24. Nov 2005, 17:21
Wohnort: Clausthal-Zellerfeld / lower saxony
Kontaktdaten: ICQ Website

9. Dez 2005, 01:02

Ein gewisser Herr von blumbeet - web.studio *G*


Gibt es sowas in der Art ein bißchen moderner? Die Aufteilung in horizontale und vertikale Navi ist ja im Prinzip schon das gleiche in anders. ^^

Mich "stören" ein wenige die Menüpunkte im untermenu, das könnten ja teilweise recht viele werden um von Anfang an, dabei zu stehen.



Sven

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

9. Dez 2005, 01:08

Hej Sven,

ich bastel dir gern ne Navi. Was sollte sie alles können?

- welche art? hori und verti oder nur vertikal?
- nur Cats die Online sind?
- wann sollen die unterpunkte scheinen? immer da oder erst nach klick auf den jeweiligen oberpunkt?
- ...

vg thomas

Benutzeravatar
svenalbert
Beiträge: 1308
Registriert: 24. Nov 2005, 17:21
Wohnort: Clausthal-Zellerfeld / lower saxony
Kontaktdaten: ICQ Website

9. Dez 2005, 01:41

Gut, im ICQ antworteste nicht, dann schreib ich doch noch kurz hier.


Also in der 3.1 Demo sind ja die zwei Navigationen dabei.

Einmal die sowohl horizontal als auch vertikal ist, und die die nur vertikal ist.
Bei der ersten, kommen erst bei nem Klick auf die Kategorie die enthaltenen Kategorien.

Wenn das auch für ein rein vertikales Menü gehen würde, daß dann halt die Subkategorien unter der Oberkategorie auftauchen, das wär genial. Und die nächste Oberkategorie würde dann halt ganz normal darunter stehen.


kurz:
- nur verti
- nur online
- erst nach klick auf oberpunkt


Sven

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

9. Dez 2005, 02:07

- 3 Ebenen,
- Navigation als ul-Liste,
- nur Online,
- Kind-Kategorie wird angezeigt nach Klick auf Eltern-Kategorie

Code: Alles auswählen

<?php
// EXPLODE PATH
$PATH = explode("|",$this->getValue("path").$this->getValue("article_id")."|");

// GET CURRENTS
$path1 = $PATH[1];
$path2 = $PATH[2];
$path3 = $PATH[3];


/* START 1st level categories */
$nav .= '<ul class="nav1st">';
foreach (OOCategory::getRootCategories() as $lev1) {
		
	if ($lev1->isOnline(true)):
		if ($lev1->getId() == $path1) {
			$nav .= '<li class="active"><a class="current" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
		}
		// 2nd level - no active link
		else {
			$nav .= '<li><a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
		}
			
		// 1st level had categories? -> go on 
		$lev1Size = sizeof($lev1->getChildren());
	
		if ($lev1->getId() == $path1) {
			if ($lev1Size != "0") {
				$nav .= '<ul class="nav2nd">';

				// START 2nd level categories 
				foreach ($lev1->getChildren() as $lev2):
					if ($lev2->isOnline(true)) {
						// 2nd level - active link
						if ($lev2->getId() == $path2) {
							$nav .= '<li class="active"><a class="current" href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
						}
						// 2nd level - no active link
						else {
							$nav .= '<li><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
						}
						
						// 2nd level had categories? -> go on 
						$lev2Size = sizeof($lev2->getChildren());
	
						if ($lev2->getId() == $path2) {
							if ($lev2Size != "0") {
								$nav .= '<ul class="nav3rd">';

								// START 3rd level categories 
								foreach ($lev2->getChildren() as $lev3):
									if ($lev3->isOnline(true)) {
										// 3rd level - active link
										if ($lev3->getId() == $path3) {
											$nav .= '<li class="active"><a class="current" href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>';
										}
										// 3rd level - no active link
										else {
											$nav .= '<li><a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>';
										}
									}
								endforeach;
								// END 3rd level categories 
		
								$nav .= '</ul>';
							} // END by if ($lev2Size != "0"):
						}
						$nav .= '</li>';
					}
				endforeach;
				// END 2nd level categories 
		
				$nav .= '</ul>';
			} // END by if ($lev1Size != "0"):
		}
		$nav .= '</li>';

	endif; // END by if ($lev1->isOnline()) 
}
$nav .= '</ul>';
// END 1st level categories 

print $nav;
?>
vg Thomas

Benutzeravatar
svenalbert
Beiträge: 1308
Registriert: 24. Nov 2005, 17:21
Wohnort: Clausthal-Zellerfeld / lower saxony
Kontaktdaten: ICQ Website

9. Dez 2005, 16:12

Funktioniert spitze.

Hab's mir jetzt noch so angepaßt, daß ich es im Demo-template anstatt der vertikalen Navi nutzen kann.


Danke nochmal.



EDIT:
Kannst Du vielleicht ganz fix (du scheinst da schneller zu sein) den Pfadaufbau für den Breadcrumb-Pfad mit einbauen.

hawk
Beiträge: 15
Registriert: 5. Dez 2005, 15:36
Kontaktdaten: ICQ

12. Dez 2005, 12:38

hi,
also das Template mit 2 Ebenen funktioniet bei mir. Nur kom ich bei diesem nicht weiter.
3 Ebenen also:

hallo
- hallo2 (unterpunkt hallo)
- hallo 3 (unterpunkt hallo2)

wären für mich auch interessant aber mit dem obigen Code funktioniert das bei mir nicht.
mfg hawk

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

12. Dez 2005, 12:51

Hej Hawk,

ich verstehe deine Anforderungen an der Navi nicht ganz. Die Unterkatrgorien werden bei diesem Code erst angezeigt, wenn man auf die Kategorie geklickt hat.

Thomas

hawk
Beiträge: 15
Registriert: 5. Dez 2005, 15:36
Kontaktdaten: ICQ

12. Dez 2005, 13:03

hi, ja war mein Fehler - ich wage es kaum zu sagen - aber ich hab vergessen, die Ebene3 Kategorie Online zu aktivieren :)
Die Unterkatrgorien werden bei diesem Code erst angezeigt, wenn man auf die Kategorie geklickt hat.
und das solls ja auch.

Danke für die schnelle Antwort auf diese dumme Frage! :)


--------------------------
Doch noch was:

und zwar wie mach ich das, dass die 3te Ebene im Sitemap übernommen wird? und das breadcrumb nicht nur die Startseite anzeigt?
mfg hawk

Benutzeravatar
svenalbert
Beiträge: 1308
Registriert: 24. Nov 2005, 17:21
Wohnort: Clausthal-Zellerfeld / lower saxony
Kontaktdaten: ICQ Website

12. Dez 2005, 16:26

beim breadcrumb kann ich die helfen, ich hab es soweit gebracht, daß es den pfad mitnimmt.

bei der sitemap mußt du sicherlich das modul erweitern. aber bis zu level 3 bin ich bisher noch nicht gekommen.

Code: Alles auswählen

<?php
// EXPLODE PATH
$PATH = explode("|",$this->getValue("path").$this->getValue("article_id")."|");

// GET CURRENTS
$path1 = $PATH[1];
$path2 = $PATH[2];
$path3 = $PATH[3];


/* START 1st level categories */
$navLeftCol .= '<ul class="nav1st">';
foreach (OOCategory::getRootCategories() as $lev1) {
      
   if ($lev1->isOnline(true)):
      if ($lev1->getId() == $path1) {
         $navLeftCol .= '<li class="active"><a class="current" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
         if ($lev1->getId() != "1") {
            $sitePath .= ' ›› <a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
         }
         $titlePath .= ' >> '.$lev1->getName();
      }
      // 2nd level - no active link
      else {
         $navLeftCol .= '<li><a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
      }
         
      // 1st level had categories? -> go on
      $lev1Size = sizeof($lev1->getChildren());
   
      if ($lev1->getId() == $path1) {
         if ($lev1Size != "0") {
            $navLeftCol .= '<ul class="nav2nd">';

            // START 2nd level categories
            foreach ($lev1->getChildren() as $lev2):
               if ($lev2->isOnline(true)) {
                  // 2nd level - active link
                  if ($lev2->getId() == $path2) {
                     $navLeftCol .= '<li class="active"><a class="current" href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                     $sitePath .= ' ›› <a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                     $titlePath .= ' >> '.$lev2->getName();
                  }
                  // 2nd level - no active link
                  else {
                     $navLeftCol .= '<li><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                  }
                  
                  // 2nd level had categories? -> go on
                  $lev2Size = sizeof($lev2->getChildren());
   
                  if ($lev2->getId() == $path2) {
                     if ($lev2Size != "0") {
                        $navLeftCol .= '<ul class="nav3rd">';

                        // START 3rd level categories
                        foreach ($lev2->getChildren() as $lev3):
                           if ($lev3->isOnline(true)) {
                              // 3rd level - active link
                              if ($lev3->getId() == $path3) {
                                 $navLeftCol .= '<li class="active"><a class="current" href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>';
                                 $sitePath .= ' ›› <a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a>';
                                 $titlePath .= ' >> '.$lev3->getName();
                              }
                              // 3rd level - no active link
                              else {
                                 $navLeftCol .= '<li><a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>';
                              }
                           }
                        endforeach;
                        // END 3rd level categories
      
                        $navLeftCol .= '</ul>';
                     } // END by if ($lev2Size != "0"):
                  }
                  $navLeftCol .= '</li>';
               }
            endforeach;
            // END 2nd level categories
      
            $navLeftCol .= '</ul>';
         } // END by if ($lev1Size != "0"):
      }
      $navLeftCol .= '</li>';

   endif; // END by if ($lev1->isOnline())
}
$navLeftCol .= '</ul>';
// END 1st level categories 

if ($REX['CUR_CLANG'] == 1) $breadcrumb = 'You are here ›› <a href="index.php?clang=1">Home</a> '.$sitePath;
else $breadcrumb = 'Sie sind hier ›› <a href="index.php">Startseite</a> '.$sitePath;

// print $navLeftCol;
?> 

hawk
Beiträge: 15
Registriert: 5. Dez 2005, 15:36
Kontaktdaten: ICQ

12. Dez 2005, 17:25

Hi, svenalbert. Danke, das mit dem Breadcrumb funzt einwandfrei mit dem geposteten Code!

Ich hab das mit dem Sitemap hinbekommen:

Code: Alles auswählen

 <?php

echo '<ul class="sitemap1st">';
foreach (OOCategory::getRootCategories() as $lev1):
	$catId = $lev1->getId();

	
	if($lev1->isOnline()):
	
		$lev1Size = sizeof($lev1->getChildren());
		
		print '<li><a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';

		$lev1Size = sizeof($lev1->getChildren());
		if($lev1Size != "0"):
			echo '<ul class="sitemap2nd">';
			foreach ($lev1->getChildren() as $lev2):

			if ($lev2->isOnline()):
			print '<li><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a></li>';
			endif;
			endforeach;

                                                echo '<ul class="sitemap3nd">';
			foreach ($lev2->getChildren() as $lev3):

			if ($lev3->isOnline()):
			print '<li><a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>';
			endif;
                             		endforeach;
			echo '</ul>';

		echo '</ul>';
				
		endif;
	     echo '</li>';		
	endif;
endforeach;
echo '</ul>';

?>

bei mir funzt das..
mfg hawk

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: Vielen Dank

30. Jan 2006, 09:04

Hej,
brans hat geschrieben:Vielen Dank für diese wunderbare Navigation.
DaNichtFür
brans hat geschrieben:Du hast mir als Redaxo-Anfänger damit wirklich sehr geholfen.
Das ist schön zu hören und freut uns natürlich
brans hat geschrieben:Könntest du sie nicht noch in den Downloads zur Verfügung stellen, damit man sie leichter finden kann?
Sollte erledigt sein.

vg Thomas

andre.5tz
Beiträge: 33
Registriert: 28. Nov 2005, 22:20

30. Jan 2006, 13:31

Hallo,

ich schließe mich mal dem Dank von Brans an und kann das nur bestätigen. Der Dank gilt natürlich allen Redaxo-Entwicklern und Helfern :)

Zur Navigation, ich habe festgestellt, dass bei vorhandenen offline-geschalteten Kategorien im Quelltext ein <ul></ul> erzeugt wird, so dass der Validator meckert. Daher habe ich nach einigen Tests die Zeilen

Code: Alles auswählen

$nav .= '<ul class="nav2nd">';
verschoben - scheint zu funktionieren.

Die entsprechenden Zeilen sind mit

//*****Zeile <ul... auskommentiert und verschoben
//*****Zeile <ul... nach Prüfung der Kategorie online-true wieder eingefügt

kommentiert.

Vielleicht hilft es ja weiter.

LG
André

Code: Alles auswählen

<?php

// EXPLODE PATH
$PATH = explode("|",$this->getValue("path").$this->getValue("article_id")."|");

// GET CURRENTS
$path1 = $PATH[1];
$path2 = $PATH[2];
$path3 = $PATH[3];

/* START 1st level categories */
$nav .= '<ul class="nav1st">';
foreach (OOCategory::getRootCategories() as $lev1) {
      
   if ($lev1->isOnline(true)):
      if ($lev1->getId() == $path1) {
         $nav .= '<li class="active"><a class="current" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
      }
      // 2nd level - no active link
      else {
         $nav .= '<li><a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
      }
         
      // 1st level had categories? -> go on
      $lev1Size = sizeof($lev1->getChildren());
   
      if ($lev1->getId() == $path1) {
         if ($lev1Size != "0") {
//*****Zeile <ul... auskommentiert und verschoben
           //$nav .= '<ul class="nav2nd">';

            // START 2nd level categories
            foreach ($lev1->getChildren() as $lev2):
               if ($lev2->isOnline(true)) {
//*****Zeile <ul... nach Prüfung der Kategorie online-true wieder eingefügt
                  $nav .= '<ul class="nav2nd">';
                  // 2nd level - active link
                  if ($lev2->getId() == $path2) {
                     $nav .= '<li class="active"><a class="current" href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                  }
                  // 2nd level - no active link
                  else {
                     $nav .= '<li><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                  }
                  
                  // 2nd level had categories? -> go on
                  $lev2Size = sizeof($lev2->getChildren());
   
                  if ($lev2->getId() == $path2) {
                     if ($lev2Size != "0") {
//*****Zeile <ul... auskommentiert und verschoben
                       //$nav .= '<ul class="nav3rd">';

                        // START 3rd level categories
                        foreach ($lev2->getChildren() as $lev3):
                           if ($lev3->isOnline(true)) {
//*****Zeile <ul... nach Prüfung der Kategorie online-true wieder eingefügt
                               $nav .= '<ul class="nav3rd">';
                              // 3rd level - active link
                              if ($lev3->getId() == $path3) {
                                 $nav .= '<li class="active"><a class="current" href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>';
                              }
                              // 3rd level - no active link
                              else {
                                 $nav .= '<li><a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>';
                              }
                           }
                        endforeach;
                        // END 3rd level categories
//*****</ul> wenn die 2. Ebene Online ist - if ... und }
                        if ($lev3->isOnline(true)) {
                        $nav .= '</ul>';
                        }
                     } // END by if ($lev2Size != "0"): && ($lev3->isOnline(true))
                  }
                  $nav .= '</li>';
               }
            endforeach;
            // END 2nd level categories

//*****</ul> wenn die 2. Ebene Online ist - if ... und }
            if ($lev2->isOnline(true)) {
      
            $nav .= '</ul>';
            }
         } // END by if ($lev1Size != "0"): && ($lev2->isOnline(true))
      }
      $nav .= '</li>';

   endif; // END by if ($lev1->isOnline())
}
$nav .= '</ul>';
// END 1st level categories

// print $nav;
?>

Benutzeravatar
svenalbert
Beiträge: 1308
Registriert: 24. Nov 2005, 17:21
Wohnort: Clausthal-Zellerfeld / lower saxony
Kontaktdaten: ICQ Website

30. Jan 2006, 13:41

hatte das problem auch schon.

ich habe es so gelöst:

das hier:

Code: Alles auswählen

      $lev1Size = sizeof($lev1->getChildren()); 
geändert auf:

Code: Alles auswählen

		$lev1Size = sizeof($lev1->getChildren(TRUE));
dann funktioniert das nur bei kategorien, die online gestellt sind.

Zurück zu „Allgemeines [R3]“