[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Links zweiter Ebene nur, wenn erste Ebene aufgerufen - 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/
bodo
Beiträge: 6
Registriert: 20. Sep 2005, 15:51

Links zweiter Ebene nur, wenn erste Ebene aufgerufen

20. Sep 2005, 15:52

Hey Leute,

am Beispiel des Demo-Templates:

Hier ist der Link "Leistungen" und direkt drunter die beiden Links "CMS" und "Template Design".

Wie lässt es sich realisieren, die beiden Links unter "Leistungen" aufzuklappen, wenn "Leistungen" geklickt wurde?

Und / oder:

Wie lassen sich diese beiden Links auf einer separaten Fläche (z.B. in der Kopfzeile) darstellen.

Schöne Grüße

Bodo

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

20. Sep 2005, 16:05

Hej,

Code: Alles auswählen

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

$path1 = $path[1];
$path2 = $path[2];
$path3 = $path[3];


foreach (OOCategory::getRootCategories() as $lev1):
  if($lev1->isOnline()):
    echo '<a class="menu"  href="'.$lev1->getUrl().'">&raquo;&nbsp;'.$lev1->getName().'</a>';
   if ($lev1->getId() == $path1) :
    $lev1Size = sizeof($lev1->getChildren());
 
    if($lev1Size != "0"):
      foreach ($lev1->getChildren() as $lev2):
        if ($lev2->isOnline()):
          echo '<a class="submenu" href="'.$lev2->getUrl().'">&nbsp;&nbsp;&nbsp;&bull;&nbsp;'.$lev2->getName().'</a>';
        endif;
        // ANFANG  EBENE 3
       $lev2Size = sizeof($lev2->getChildren());
       if($lev2Size != "0" && in_array($lev2->getId(), $path)):
         foreach ($lev2->getChildren() as $lev3):
           if ($lev3->isOnline()):
             echo '<a class="submenu" href="'.$lev3->getUrl().'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&bull;&nbsp;'.$lev3->getName().'</a>';
           endif;
         endforeach;
       endif;
       // ENDE EBENE 3
    endforeach;
  endif;
  endif;
endif;
endforeach;
/*
$navigation = OOTemplate::getNavigation();
print $navigation;
*/
?> 
Zu deiner zweiten Frage:
Ich würde alle Kategorien der 1ten und der 2ten Ebene in einem Skalar speichern. Und dann das Navi-Template im Default-Template vor dem Doctype includieren. Dort wo du deine Hauptnavigation haben willst

Code: Alles auswählen

print $main-nav
Dort wo die Unterkategorien erscheinen sollen

Code: Alles auswählen

print $sub-nav;

Thomas

bodo
Beiträge: 6
Registriert: 20. Sep 2005, 15:51

21. Sep 2005, 10:56

cool, sehr geil.

Ich habe mir es etwas angepasst.
Geht sehr gut! Vielen Dank!

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

21. Sep 2005, 11:19

DaNichtFür

wo kann mna isch das mal ansehen?

Thomas

bodo
Beiträge: 6
Registriert: 20. Sep 2005, 15:51

21. Sep 2005, 11:38

Noch gar nicht, weil im Moment nur lokal.

Hier ist das umgebaute Menü, welches Du in das Template einfügst:


"<div id="sub-block2">" suchen und danach folgendes einfügen:

Code: Alles auswählen

<!-- VERTIKALES MENUE-->

<?php 


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

$path1 = $path[1]; 
$path2 = $path[2]; 
$path3 = $path[3]; 



echo '<ul class="navigation">';
foreach (OOCategory::getRootCategories() as $lev1): 
  if($lev1->isOnline()): 
    echo '<li><a href="'.$lev1->getUrl().'">&nbsp;'.$lev1->getName().'</a>'; 
   if ($lev1->getId() == $path1) : 


    $lev1Size = sizeof($lev1->getChildren()); 
      if($lev1Size != "0"): 
      echo '<ul>';
      foreach ($lev1->getChildren() as $lev2): 
        if ($lev2->isOnline()): 
          echo '<li><a href="'.$lev2->getUrl().'">&nbsp;&nbsp;&nbsp;&nbsp;'.$lev2->getName().'</a></li>'; 
        endif; 
        // ANFANG  EBENE 3 


       $lev2Size = sizeof($lev2->getChildren()); 
       if($lev2Size != "0" && in_array($lev2->getId(), $path)): 
      echo '<ul>';
         foreach ($lev2->getChildren() as $lev3): 
           if ($lev3->isOnline()): 
             echo '<li><a href="'.$lev3->getUrl().'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.$lev3->getName().'</a></li>'; 
           endif; 
         endforeach; 
        echo '</ul>';
       endif; 
       // ENDE EBENE 3 
    endforeach; 
echo '</ul>';
  endif; 
  endif; 
echo '</li>';
endif; 
endforeach; 
echo '</ul>';


/* 
$navigation = OOTemplate::getNavigation(); 
print $navigation; 
*/ 
?>


<!--  ENDE VERTIKALES MENUE -->

webstar
Beiträge: 54
Registriert: 1. Nov 2005, 12:51
Wohnort: Erfurt
Kontaktdaten: ICQ

3. Nov 2005, 17:08

Also ich versuche im Prinzip das gleiche zu machen. Ich möchte gern die Kategorien (also Hauptnavi) oben waagerecht dargstellt haben.Das funktioniert auch so ganz gut. Jetz möchte ich das wenn einer der Hauptnavi-Punkte gewählt wird, die Unternavigation (also alle darin befindlichen Artikel) links senkrecht angezeigt werden.Die oben stehenden Beispiele haben scheinbar genau diesen Sinn, nur weigere ich mich, dies zu übernehmen ohne es zu verstehen. :lol:

Also mein Template sieht folgendermaßen aus:

Code: Alles auswählen

<!--Headerspalte Ende-->

<!--Navispalte-->
<tr>
	<td bgcolor="#999999" class="kategorie" style="border-top:3px solid #FFFFCC; border-bottom: 3px solid #FFFFCC;"  colspan="2">
        <?php
                        $path = explode( '|', $this->getValue("path").$this->getValue("article_id"));
                        $path1 = $path[1];

			foreach (OOCategory::getRootCategories() as $lev1):
				if($lev1->isOnline()):
					echo '&nbsp;<a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>&nbsp;|';
                                endif;
                        endforeach;
        ?>
	</td>
</tr>
<!--Navispalte Ende-->

<!--Artikel-Anzeigespalte-->
<tr>
        <td align="left" valign="top" class="artikel">
        <?php
         if($lev1->getId() == $path1):
         $lev1Size = sizeof($lev1->getChildren());
					if($lev1Size != "0"):
						echo '<ul>';
						foreach ($lev1->getChildren() as $lev2):

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


<!--Inhaltsspalte-->
	<td align="center" class="content">
        <?php
        echo $this->getArticle(); 
        ?>
	</td>
</tr>
<!--Inhaltsspalte Ende-->

</table>
<!--Haupttabelle Ende-->

</body>
</html>
Wie zu sehen ist, hab ich versucht einige Sachen aus der Demo mit einigen aus diesem Post zu vereinen. Aber irgendwie will es nicht funktionieren.

Wozu braucht man 3 Ebenen? Soweit ich das sehe ruft man zuerst die Kategorien auf und lässt diese darstellen und dann zu jeder einzelnen bei bedarf die darin befindlichen Artikel. Also wozu diese 3. Ebene? Kann mir jemand erklären was es damit auf sich hat. Zudem, was macht diese Explode-Funktion? Aufrufe bestimmter Felder aus der DB?
Unwissenheit schützt nicht vor Mittäterschaft.

Gast

4. Nov 2005, 10:11

Hey,

also ich habe mich nicht geweigert es ohne zu verstehen zu übernehmen.
OK ein klein wenig habe ich es verstanden.

Warum die 3 Ebenen?
Gegenfrage: Warum nicht sogar 5?

Es ist einfach eine Entscheidungsfrage.
Die erste Ebene könnte "Freizeit" heißen, die zweite Sport und die dritte Tennis.


Schöne Grüße

Bodo

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

4. Nov 2005, 11:00

Hej,
webstar hat geschrieben:Wozu braucht man 3 Ebenen?
Ebene oder auch Kategorien sollten zur Struktur der Webseite dienen. Also die Struktur ist gleich die Navigation. Ein schönes Beispiel hat ja Bodo bereits geschrieben.

Freizeit -> Sport -> Tennis

Das wäre eine Struktur mit 3 Ebenen. Wenn du nun zum Theme Tennis nix weiter schreiben willst, ausser einen Artikel, kannst du unter der Ebene natürlich auch einen Artikel "Tennis" anlegen. Mit einer Artikelliste bzw. einem Teaser-Modul könntest du dir dann eben die Artikel auch als Navigationsliste bzw. Teaser darstellen lassen.

Willst du aber mehere Arikel zum Thema Tennis schreiben, dann eine weitere Kategorie anlegen und dort die Artikel "Der Tennisschläger", "Der Tennisball" usw. ablegen. Per Teaser oder Artikelliste dann die Artikel kurz darstellen und auf den kompletten Artikel verweisen.

Hoffe du verstehst, wenn nicht fragen

Thomas

webstar
Beiträge: 54
Registriert: 1. Nov 2005, 12:51
Wohnort: Erfurt
Kontaktdaten: ICQ

4. Nov 2005, 13:26

Also gut. Ich möchte 2 Ebenen haben. Die erste soll wie gesagt die Hauptnavigation (also die angelegten Kategorien) sein und die Unternavi die zu einer Kategorie gehörigen Artikel. Was ist denn an meinem Template falsch? Ich hab ewig versucht den fehler zu finden. Und was genau macht dieses Explode bzw wozu legt man die $path-Variablen an?
Unwissenheit schützt nicht vor Mittäterschaft.

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

4. Nov 2005, 14:31

Hi Webstar
webstar hat geschrieben:Und was genau macht dieses Explode bzw wozu legt man die $path-Variablen an?
In den Path Variablen steht dann drinne, wo sich der User im Frontend gerade befindet.

z.b.

Code: Alles auswählen

echo $path0  // 3
echo $path1  // 5
echo $path2  // 7
Das sind die IDs des "Pfades".

d.h. in der Struktur würde das so aussehen

News(id=3) - Sport(id=5) - Fussball(id=7)

Du weisst also auf Welcher Ebene in der Struktur welche Kategorie gewählt wurde..

Gruß,
Markus

webstar
Beiträge: 54
Registriert: 1. Nov 2005, 12:51
Wohnort: Erfurt
Kontaktdaten: ICQ

5. Nov 2005, 14:19

Also es will einfach nicht funktionieren. Ich habe jetzt sogar schon mal ein völlig leeres Template angelegt das gnau den Quelltext aus dem Downloadbereich enthält.

Code: Alles auswählen

<html>
<body>

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

$path1 = $path[1];
$path2 = $path[2];
$path3 = $path[3];

echo $path1;
echo $path2;
echo $path3;

foreach (OOCategory::getRootCategories() as $lev1):
	if($lev1->isOnline()):
		echo '<a class="menu"  href="'.$lev1->getUrl().'">&raquo;&nbsp;'.$lev1->getName().'</a>';
		if ($lev1->getId() == $path1) :
			$lev1Size = sizeof($lev1->getChildren());
 
			if($lev1Size != "0"):
				foreach ($lev1->getChildren() as $lev2):
					if ($lev2->isOnline()):
						echo '<a class="submenu" href="'.$lev2->getUrl().'">&nbsp;&nbsp;&nbsp;&bull;&nbsp;'.$lev2->getName().'</a>';

					endif;
					// ANFANG  EBENE 3
					$lev2Size = sizeof($lev2->getChildren());
					if($lev2Size != "0" && in_array($lev2->getId(), $path)):
						foreach ($lev2->getChildren() as $lev3):
							if ($lev3->isOnline()):
								echo '<a class="submenu" href="'.$lev3->getUrl().'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&bull;&nbsp;'.$lev3->getName().'</a>';
							endif;
						endforeach;
					endif;
					// ENDE EBENE 3
				endforeach;
			endif;
		endif;
	endif;
endforeach;
?>

</body>
</html>
Die $path-Variablenm hab ich mir nur ausgeben lassen um zu sehen was die enthalten. Bei Klick auf die "Home"-Kategorie wird die !!EINE!! Zahl 1 angezeigt, bei klick auf die zweite Kategorie die 2. Irgendwie versteh ich das alles nich so ganz. Was is denn nur falsch. In beiden Kathegorien befinden sich jeweils ein Startartikel, aber selbst wenn ich noch einen oder mehr hinzufüge erscheinen sie nicht.

So langsam bin ich am verzweifeln, ich raff das nich.Am meisten Probleme macht mir trotz Erklärung dieser Teil:

Code: Alles auswählen

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

$path1 = $path[1];
$path2 = $path[2];
$path3 = $path[3];
Ich weiß das is alles Basiswissen für PHP, aber im objektorientierten denken bin ich echt ne Null.
Unwissenheit schützt nicht vor Mittäterschaft.

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

5. Nov 2005, 15:00

Hej,

ein Artikel befindet sich in einer bestimmten Kategorie. Rufst du einen bestimmten Artikel auf, rufst du auch gleichzeitig die Pfadangaben dieses Artikels auf.

Die Pfadangaben für einen Artikel (ID 20) der in der Kategorie HOME (ID 1) in der SubKategorie IRGENDWAS (ID 5) hat somit die Pfadangaben |1|5|20|.

Mit der explode Funktion erhälst du ein Array und zwar mit den Zahlen der Pfadangaben für diesen Artikel.

in $path wäre somit array(1,5,20). Die "|" fallen raus, da du nach diesem Zeichen das ganze ausliest.

Um nun den Verlauf (wo befindet sich genau der Artikel in der Struktur) des Artikels herauszufinden, hast du in

$path1 = $path[0] -> 1
$path2 = $path[1] -> 5
$path3 = $path[2] -> 20

die Ids der Kategorien sowie die ArikelID.

grüße Thomas

webstar
Beiträge: 54
Registriert: 1. Nov 2005, 12:51
Wohnort: Erfurt
Kontaktdaten: ICQ

5. Nov 2005, 15:05

Hmm ok ok, soweit hab ich das grob verstanden. Aber wieso werden denn lediglich Die Kategrien angezeigt und keine darunter befindlichen Artikel?
Bei den meisetn Usern hier hat doch der Quelltext ausm Downloiad auch auf anhieb funktioniert, wieso dann hier nicht?
Unwissenheit schützt nicht vor Mittäterschaft.

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

5. Nov 2005, 15:15

Es werden nur alle Kategorien angezeigt und nicht die Artikel die in der Kategorie sind. Gib mal nen Zugang und schreibe noch mal genau auf was du von dem Script erwartest.

Thomas

webstar
Beiträge: 54
Registriert: 1. Nov 2005, 12:51
Wohnort: Erfurt
Kontaktdaten: ICQ

5. Nov 2005, 15:51

Also das Problem hat sich bene von alleine erledigt. Das Problem lag wie immer beim User selbst. Ich hatte bisher nicht mitbekommen, das man innerhalb einer Kategorie nocheinmal Kategorien anlegen kann. Oje, jetz hab ich sinnlos Wellen gemacht. Also sorry nochmal, aber das war wohl n typisches Layer 8 Problem :lol:
Unwissenheit schützt nicht vor Mittäterschaft.

Zurück zu „Allgemeines [R3]“