[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
[Erledigt] Navigation, einzelne Ebenen getrennt auflisten - 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
Sascha
Beiträge: 27
Registriert: 3. Jan 2008, 00:06

[Erledigt] Navigation, einzelne Ebenen getrennt auflisten

3. Jan 2008, 00:21

Zwar könnte man bei meinem Problem auch das Beispiel mit einer horizontalen und vertikalen Navigation durchkauen, wobei die obere die 1te Ebene kennzeichnet und die Untere (wenn Unterkategorien vorhanden) die 2te Ebene darstellt.

Doch in meinen Fall habe ich auf der linken Seite die Hauptnavigation welche die Kategorien als Links anzeigen soll und auf der rechten Seite (meiner Webseite) die Unterkategorien der aktuell geöffneten Kategorie.

Ich hoffe bis hier habe ich den Aufbau und die Gliederung von Redaxo richtig interpretieren können. Doch mein Problem ist das ich es nicht habe, sondern gerne hätte.

Aufbau:
  • Folgender Code befindet sich auf der linken Seite meiner Webseite und soll die erste Ebene also die Hauptkategorien darstellen. Womit ich auch keine Problem habe, habe einfach den diesen Beispielcode angepasst.

    Code: Alles auswählen

    <?php		
    foreach (OOCategory::getRootCategories() as $lev1):
    	if($lev1->isOnline()):
    		echo '<a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
    	endif;
    endforeach;
    ?>
    Auf der rechten Seite befindet sich dieser Code, der die 2te Ebene darstellen soll. Also die Unterkategorien. Da ich die getChildren Befehle noch nicht kenne war ich vorsichtig und hab nur die Ausgabe von Ebene 1 entfernt. Aber das Ziel wurde "teils" erreicht.

    Code: Alles auswählen

    <?php		
    foreach (OOCategory::getRootCategories() as $lev1):
    	if($lev1->isOnline()):
    		$lev1Size = sizeof($lev1->getChildren());
    		if($lev1Size != "0"):
    			foreach ($lev1->getChildren() as $lev2):
    
    				if ($lev2->isOnline()):
    					echo '<a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
    				endif;
    			endforeach;
    		endif;
    	endif;
    
    endforeach;
    ?>
Nun habe ich nur das Problem das er anscheinend von allen Hauptkategorien die Unterkategorien auf der rechten Navigation abbildet. Wobei ich nur die aktive auslesen lassen wollte. (wenn vorhanden)

Ich habe die anderen Navigations-Beispiele versucht zu verstehen, aber da klappte es noch weniger.

Wisst ihr was ich falsch mache? Ich habe leider keine ausführliche Dokumentation darüber gefunden wie die dynamische Menügenerierung arbeitet.

Vielen Dank fürs Lesen und entschuldigt die Unannehmlichkeiten.
Zuletzt geändert von Sascha am 5. Jan 2008, 13:48, insgesamt 1-mal geändert.

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

3. Jan 2008, 10:39

Hej,

Hier der Code für dein Navigationstemplate.

Code: Alles auswählen

<?php
$path = explode("|",$this->getValue("path").$this->getValue('article_id')."|");
$path1 = $path[1];
$path2 = $path[2];

$navLeft = '';
$navRight = '';

foreach (OOCategory::getRootCategories(true) as $lev1) {
	$navLeft .= '<a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
	
	
	if ($lev1->getId() == $path1 AND sizeof($lev1->getChildren(true) != '0') {
	
		foreach ($lev1->getChildren(true) as $lev2) {
			$navRight .= '<a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
		}
	
	}
}
?>
Dieses Template musst du in dein Standardtemplate einbinden. Dort wor die Navis ausgegeben werden soll, schreibst du

Code: Alles auswählen

<?php print $navLeft; ?>
<?php print $navRight; ?>
vg Thomas

Benutzeravatar
Sascha
Beiträge: 27
Registriert: 3. Jan 2008, 00:06

3. Jan 2008, 18:17

Ich hab den Code ausprobiert, nur kommt dann folgende Fehlermeldung:
Parse error: syntax error, unexpected '{' in C:\xampp\htdocs\redaxo\include\classes\class.rex_article.inc.php(609) : eval()'d code on line 13
Bezogen auf die 13'te Zeile im Code:

Code: Alles auswählen

if ($lev1->getId() == $path1 AND sizeof($lev1->getChildren(true) != '0') {
Was mich auch interessieren würde, gibt es kein Dokument oder Wiki der nach und nach erklärt wie sich eine Navigation aufbaut und wie sie funktioniert? Ich erkenne zwar schon die Schleifen, aber mit den Variablen und Voraussetzungen für Redaxo kenne ich mich nicht aus.

Natürlich ist es einfach die Hilfe von euch einfach zu kopieren und einzufügen, doch wenn man es selber versteht entlastet man zum einen euch die wissen wie es funktioniert und kann später anderen auch damit helfen, wenn man dahinter gestiegen ist.

Benutzeravatar
Sascha
Beiträge: 27
Registriert: 3. Jan 2008, 00:06

3. Jan 2008, 18:38

Hab den Fehler gefunden, es fehlte eine Klammer. (blau makiert)
if ($lev1->getId() == $path1 AND sizeof($lev1->getChildren(true) != '0')) {
Trotzdem wenn wer Quellen hat wo das Verhalten und der Aufbau von Navigationen etwas besser erklärt wird, würde ich mich freuen. Beispiele sind natürlich toll, aber für den höheren Erfolg von Redaxo wäre solch Dokumentierung mehr als sinnvoll.

Ich mach jetzt erstmal meine Seite fertig und wenn sich bis dahin nichts findet heißt es wohl probieren, anstatt zu studieren.

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

3. Jan 2008, 21:48

Hej,

du hast schon den Punkt ganz oben "Doku" gesehen?

Da sind alle Methoden aufgeschrieben die auch in einer Navigation verwendet werden.

vg Thomas

Benutzeravatar
Sascha
Beiträge: 27
Registriert: 3. Jan 2008, 00:06

4. Jan 2008, 13:54

Ich habe sehr lange gezögert hier überhaupt nachzufragen, da ich dachte das man dies über die Doku/Wiki erfahren würde. Doch das habe ich nicht, also Frage ich hier.
C1.02 Navigation

Externe Links
  • Selbstverständlich und danach hab ich nicht gesucht.
Interne Links, manuell definiert
  • Auch selbsterklärend und verständlich, das wollte ich aber auch nicht wissen.
Interne Links, dynamisch erzeugt
  • Hier wird es interessant, wie baut sich ein dynamischer Link auf. Die Möglichkeiten werden genannt, also kommen wir zum Aufbau. Oh keine Beschreibung für den Aufbau, sondern ein Verweis auf die Beispiele? Gut, vielleicht erfährt man da mehr.
Doch gefunden habe ich nur die genannten Beispiele welche aber nur fertige Templates ohne große Erklärung hinterließen und wohl hoffen das die meisten nur Kopieren und Einfügen oder Redaxo weiterhin zu abschreckend ist, das nur voll ausgelernte PHP-Nutzer sich die Frage stellen würden.

Ich lerne im Moment PHP und verstehe auch schon die Schleife, aber nicht wie er zum Beispiel weiß das er in Kategorie-Ebene 1 oder 2 sich befindet und diese ausgeben muss. Ich hab versucht es zu verändern, aber das hatte nicht funktioniert oder immer das falsche Ausgegeben.

Von daher fragte ich hier und sollte es sowas noch nicht geben seht es als Vorschlag an das ein erfahrener Redaxo-Nutzer mit PHP Erfahrungen vielleicht ein kleines Dokument beschreibt, was den Aufbau einer einfachen 2 Ebenen Naviation dokumentiert. So das auch PHP Anfänger und Unerfahrene den Aufbau und die Generierung verstehen lernen.

Aber keine Sorge dein Code funktioniert, auch wenn ich nur die Hälfe davon verstanden habe. Das einzige was ich mit einbauen konnte war die Aktiv Abfrage.

Code: Alles auswählen

<?php
$path = explode("|",$this->getValue("path").$this->getValue('article_id')."|");
$path1 = $path[1];
$path2 = $path[2];

$navLeft = '';
$navRight = '';

foreach (OOCategory::getRootCategories(true) as $lev1) {
	if ($lev1->getId() == $path1) {

		$navLeft .= '<a class="active" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
} else {
		$navLeft .= '<a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
		
}

	if ($lev1->getId() == $path1 AND sizeof($lev1->getChildren(true) != '0')) {
   	foreach ($lev1->getChildren(true) as $lev2) {
	
	if ($lev2->getId() == $path2) {
	$navRight .= '<a class= "active" href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
} else {
	$navRight .= '<a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
			}
		}
	}
}
?>
Nur als Anfänger halt verstehe ich z.b. folgende Punkte nicht und würde gerne wissen wie diese funktionieren, was sie bewirken. Darum suchte ich nach einer etwas besser dokumentierten Navigation.
explode("|",$this->getValue("path").$this->getValue('article_id')."|");
Folgend nur das was fett markiert wurde.
foreach (OOCategory::getRootCategories(true) as $lev1) {

if ($lev1->getId() == $path1 AND sizeof($lev1->getChildren(true) != '0')) {

foreach ($lev1->getChildren(true) as $lev2) {

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

4. Jan 2008, 20:25

Hej,

das was du suchst findest du hier:

http://www.redaxo.de/44-0-c6-00-object- ... ework.html

Sorry hatte nicht gesehen, dass das momentan noch nicht in die 4er Version kopiert wurde.

vg Thomas

Benutzeravatar
Sascha
Beiträge: 27
Registriert: 3. Jan 2008, 00:06

5. Jan 2008, 13:47

Super vielen Dank, meine Fragen sind somit beantwortet. Mit den Sachen kann ich etwas anfangen.

harzteufel
Beiträge: 46
Registriert: 9. Jul 2007, 15:43
Wohnort: bei Berlin

12. Feb 2008, 13:13

Hallo, ich habe jetzt folgenden Code:

Code: Alles auswählen

<?php
$path = explode("|",$this->getValue("path").$this->getValue('article_id')."|");
$path1 = $path[1];
$path2 = $path[2];

$navLeft = '';
$navRight = '';

foreach (OOCategory::getRootCategories(true) as $lev1) {
   $navLeft .= '<ul id="navlist"><li><a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a></li></ul>';
   
   
   if ($lev1->getId() == $path1 AND sizeof($lev1->getChildren(true) != '0')) {
   
      foreach ($lev1->getChildren(true) as $lev2) {
         $navRight .= '<ul id="sublist"><li><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a></li></ul>';
      }
   
   }
}
?>
...und möchte aber, anstatt der zweiten Kategorieebene, lieber gleich die dort befindlichen Artikel als "navRight" angezeigt bekommen. Hat jemand ne Idee, wie ich dies umsetze? Bin leider auch noch nicht so vertraut damit... Besten Dank!

Zurück zu „Allgemeines [R4]“