Nav im Header des Forums

Headymaster

Erfahrenes Mitglied
Hallo!

Ich habe das hier glaube ich schonmal gelesen aber kann es einfach nicht mehr finde.

Ich würde meinem Forum gerne so eine Navigation wie z.b. hier auf der Seite geben.

Also das oben über dem Forum Abschnittsweise...also mit Pfeilen.....zb:

FORUMKATEGORIE->THREADNAME->usw

angezeigt wird.

Aber wie macht man sowas?!

Würde mich über nen kleine Denkanstupser oder Tutorial freuen :)

MFG Niels
 
Solche eine Navigation nennt sich Brotkrumen-Navigation (engl. breadcrumb). Den Rest kannst du über die Suchfunktion finden.
 
Das ist ziemlich einfach *hab ich bei mir im Forum auch schon erstellt ;)*

Also, nehmen wir mal an, deine Tabelle sieht wie folgt aus:

ForumID | Forumname | ParentForumID
int(255) auto_increment | Varchar(255) | int(255) Default: 0

Der Trick ist, rekursiv nach ganz oben (von der Struktur her) die Daten zu lesen und in einem Array abzuspeichern, welches dann von hinten (mit dem obersten Navigationspunkt) nach vorne (zum aktuellen Navigationspunkt) ausgelesen wird. Zusätzlich muss man noch Extras einfügen wie z.B. "Neuer Beitrag" - da hab ich an sich keinen extra Trick für gefunden. Durch die ParentForumID lässt sich sehr einfach rekursiv die Struktur auslesen. Mit diesen Tipps sollte das für dich jetzt ein klacks sein, eine Breadcrumb-Navigation zu erstellen.


Gruß Radhad
 
Gut.......also

meine Tables fürs Forum sehen im mom so aus....soll alles noch erweitert werden....

forum_kats: --->Enthält die Foren

`id` int(11) NOT NULL auto_increment,
`name` varchar(250),
PRIMARY KEY (`id`)

forum_thr: ----> Enthält die Threads aller Foren

`id` int(11) NOT NULL auto_increment,
`fid` int(11),
`topic` varchar(250),
`created` timestamp(14),
PRIMARY KEY (`id`)

forum_posts: ---> Enthält die eigentlichen Posts und Antworten

`id` int(11) NOT NULL auto_increment,
`tid` int(11),
`fid` int(11),
`user` varchar(250),
`topic` varchar(250),
`text` text,
`created` timestamp(14),
PRIMARY KEY (`id`)


Hmm....also da ich keine Ahnung habe mit rekursiv würde ich mich freuen wenn du kleines Beispiel verlinken könntest ode schreiben könntest..... :)

MFG Niels
 
hmm.. ok, ich schreib mal eines :)

Deine Tabelle:
Code:
`id` int(11) NOT NULL auto_increment,
`name` varchar(250),
PRIMARY KEY (`id`)
Wird um die Spalte "ParentForumID" int(11) Default-Wert: 0 erweitert. Dann kommt der 1. Datensatz:
Code:
ID | Name | ParentForumID
1 | Allgemein | 0
Dieser Datensatz ist also kein Child-Element, sondern ein Parent-Element. Sie sind also auf der höchsten Ebene. Davon kann es ganz viele geben:
Code:
ID | Name | ParentForumID
1 | Allgemein | 0
2 | Spiele | 0
3 | Hardware | 0
Diese Foren liegen alle auf der selben Ebene.
Eien Ausgabe könnte wie folgt aussehen:
Code:
Home
 - Allgemein
 - Spiele
 - Hardware
Jetzt erweitern wir unser Konstruk mal auf eine Ebene tiefer!
Code:
ID | Name | ParentForumID
1 | Allgemein | 0
2 | Spiele | 0
3 | Hardware | 0
4 | Fun | 1
5 | Website | 1
6 | Treiber | 3
7 | Anno 1701 | 2
Wir haben also verschiedene Foren auf Ebene 2. Bildlich dargestellt sähe dies so aus:
Code:
Home
 - Allgemein
   - Fun
   - Website
 - Spiele
   - Anno 1701
 - Hardware
   - Treiber
So kann man schön strukturiert in einer Tabelle alle Foren abbilden. Erweitern kann man dies noch mit einer - wie ich sie nenne - AnzeigeID, welche bestimmt, in welcher Reihenfolge etwas angezeigt werden soll. Die Tabelle wird also um die Spalte "AnzeigeID" erwitert mit in(11). Diese kann automatisch durch eine COUNT()-Logik befüllt werden. Dabei darf bei gleicher ParentForumID jeweils nur eine AnzeigeID vorkommen. Die könnte dann z.B. so in der Tabelle aussehen:
Code:
ID | Name | ParentForumID | AnzeigeID
1 | Allgemein | 0 | 3
2 | Spiele | 0 | 1
3 | Hardware | 0 | 2
4 | Fun | 1 | 2
5 | Website | 1 | 1
6 | Treiber | 3 | 1
7 | Anno 1701 | 2 | 1
Und die dazu passende Beispiel-Ausgabe:
Code:
Home
 - Spiele
   - Anno 1701
 - Hardware
   - Treiber
 - Allgemein
   - Website
   - Fun
Ich glaube damit sind alle nötigen Vorbereitungen auf Datenbankseite erledigt und der Weg sollte frei sein für die programmatische Umsetzung.

Weitere Fragen beantworte ich auch weiterhin *g*


Gruß Radhad
 
Oh man oh man...das muss ich jez erstma durchkauen :)

Meld mich aber spätestens morgen nochma wenn ich probs habe muss heute weitestgehend für ne Wipo Klausur lernen.....deshalb kann ich heute nur kleinere Aktionen in anspruch nehmen :)

MFG Niels


//edit

Also ich glaube du hast mich falsch verstanden :(

Ich möchte meine Datenbanken erstma so lassen, denn auf der Seite soll es zwar eine Breadcumb Navigation geben, aber diese soll sich nur aufs Forum beziehen.

Und dieses Forum soll halt paar Foren haben die ich ja mit der ersten Tabelle anlegen kann....aber diese Foren sollen keine Unterforen haben sonder nur Threads beinhalten...wie es im Moment auch ist :)

So und ich möchte eigentlich nur ausgelesen haben ín welchen der Foren ich grade bin und in welchem der Threads des Forums.....

Naja und dass soll dann oben gezeigt werden.....

Wenn ich nun z.b. im Forum Hauptforum bin und um Thread TestTest Dann soll oben stehen:

Hauptforum--> TestTest

Wenn ich nun auf Hauptforum klicke soll ich wieder im Bereich Hauptforum landen....nur als Beispiel...denn so einen Aufbau mit Unterforen will ich später noch machen :)


MFG Niels
 
Naja, ist eigentlich schwerer als es aussieht. Du musst immer nur die zugehörige ForumID eines Unterforums abspeichern. Dadurch ergibt sich automatisch eine Baumstruktur, die du nur umändern musst. z.B. mit folgenden Code:
PHP:
<?php
//$_GET["forumid"] = 7;
$forumid = $_GET["forumid"];
$count = 0;

do 
{
  $sql = "SELECT parentforumid FROM foren WHERE forumid = ".$forumid;
  $parent = mysql_query($sql)
  if($parent[0] > 0)
  {
    $forumid = $parent[0];
    $breadcrumb[$count] = $parent[0];
  }
  $count++;
}
while($parent[0] > 0)

for($i = count($breadcrumb) - 1; $i >= 0; $i++)
{
  echo $breadcrumb[$i]." > ";
}
Damit wär die ganze Ausgabe möglich!


Gruß Radhad

Nachtrag:
Ja, dann musst du halt immer das zugehörige Forum des Threads auslesen und in einer Breabcrumb darstellen. Das Beispielscript lässt sich ja noch erweitern, indem du bei der Threads-Tabelle beginnst. Dieses Beispiel gibt dir nur halt die Möglichkeit, unendlich in die Tiefe zu gehen ;) Außerdem wenn du zu jedem Child-Element das Parent-Element abspeicherst, kannst du immer Perfekt nach "unten" und "oben" Navigieren, ohen großen Aufwand. Microsoft nennt mehre Child-Elemente bei SharePoint z.B. "SiteCollection". Prinzipeill ist halt die Breadcrumb-navigation im Aufbau das selbe wie eine Tree-View Navigation!

Nachtrag2: Schau mal in mein Forum rein: http://radhad.de/index.php?nid=2&t=9 ist der Link zu einem Thread. Oben ist die Breadcrumb Navigation ;)
 
Zuletzt bearbeitet:
Habe das gnaze nun ganz anders gemanaget :)

Hier ma der Code:

PHP:
<?php
function breadcrumbnav($fid, $tid)
			 {
			    // Forenübersicht
			    if(empty($fid) && empty($tid))
				{
			        return $this->breadcrumb = "<a href=\"index.php?s=forum.php\">Forum -></a>";
				}
				
				// ForumName
			    if(!empty($fid) && empty($tid))
				{
				    $query = $this->db->query("SELECT * FROM `forum_kats` WHERE id='".$fid."'");
					$data = $this->db->fetch_array($query);
					return $this->breadcrumb = "<a href=\"index.php?s=forum.php\">Forum -></a>"."<a href=\"index.php?s=forum.php&fid=".$data['id']."\">".$data['name']." -></a>";
				}
				
				// ForumThread
				if(!empty($fid) && !empty($tid))
				{
				    $query = $this->db->query("SELECT * FROM `forum_kats` WHERE id='".$fid."'");
					$data = $this->db->fetch_array($query);
					$query2 = $this->db->query("SELECT * FROM `forum_thr` WHERE fid='".$fid."' AND id='".$tid."'");
					$data2 = $this->db->fetch_array($query2);
					return $this->breadcrumb = "<a href=\"index.php?s=forum.php\">Forum</a> -> "."<a href=\"index.php?s=forum.php&fid=".$data['id']."\">".$data['name']."</a> -> "."<a href=\"index.php?s=forum.php&fid=".$data2['fid']."&tid=".$data2['id']."\">".$data2['topic']."</a>";
				}
			 }
?>

Das funktionert bei mir nun eigentlich wunderbar nur weiß ich net ob das net bissle zu umständlich ist oder ob man es so machen kann....

MFG Niels
 
Naja, in deinem Fall klappt das schon, meins lässt aber noch mehr Möglichkeiten - Zum Beispiel könnte man mit meinem Script (etwas editieren) kann man ohne Probleme rekursiv anzeigen, wo man sich auf der Website befindet - in unendlicher Tiefe versteht sich ;) Das wäre mit deinem Script nicht möglich!
 
Hmm ok....is mein 1. Forum :) und freu mich das ich soweit überhaupt gekomm bin....naja ich werde mir dein Beispiel noch weiter ansehen und dann gucken wie weit ich meins kompatibler machen kann :)

MFG Niels
 
Zurück