[Suche] php script zur dynamischen Seitennavigation

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

[Suche] php script zur dynamischen Seitennavigation

Beitrag von Helmut »

Hallo,

ich suche ein Script, damit ich eine Navigationsleiste auf der Seite einbauen kann, ohne dass ich bei einer Änderung der Menupunkte alle Seiten einzeln anpassen muss. Das Script sollte mit php und mysql gehen, aber kein Javascript verwenden. Hat jemand von euch sowas schon mal gemacht und kann mir da Beispielscripte geben?

Vor einiger Zeit habe ich mal sowas in einem Buch (deutsch) für php gesehen, kann mich aber nicht mehr an den Titel erinnern. Damals hatte ich nach etwas anderem gesucht und da ist mir das Beispiel noch in Erinnerung geblieben. In dem Buch war über mehrere Seiten sehr ausführlich beschrieben und auch mehrere Beispiele dabei, wie man eine dynamische Seitennavigation mit Hilfe von php und mysql aufbaut und diese dann optimiert.


Gruß Helmut
Zuletzt geändert von Helmut am 03.10.2007 16:39, insgesamt 1-mal geändert.
Ich bin nicht ganz dicht.... na und.
speedtouch92
Mitglied
Beiträge: 104
Registriert: 11.12.2005 16:52
Kontaktdaten:

Beitrag von speedtouch92 »

Du kannst entweder mit Templates arbeiten, so wie bei phpBB,
also overall_header.tpl und overall_footer.tpl

oder du nutzt einfach den include-Befehl
http://php.net/include

Also du erstellst eine Datei "menue.php"
Da schreibst du dein Menü rein.

Auf jeder Seite, wo das Menü erscheinen soll,
fügst du dies ein:

Code: Alles auswählen

<?php
include"menue.php";
?>
Beispiel:

Code: Alles auswählen

<html>
<head>
<title>Meineseite</title>
</head>
<body>
<?php
include"menue.php";
?>
<br>
Dein Seiteninhalt
</body>
</html>

Zu den Templates:

http://www.phpbb.de/doku/kb/template_system
http://www.phpbb.de/doku/kb/artikel.php?artikel=72
http://www.phpbb.de/doku/kb/artikel.php?artikel=74
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo speedtouch92,

danke für deine Info, aber ganz so einfach ist es nicht. Das Einbinden einer Datei bzw. einer Variable in den overall_header.html oder overall_footer.html ist nicht das Problem, so habe ich es in der aktuellen Homepage schon gelöst. Im laufe der Jahre hat sich gezeigt, dass es schon nervt, wenn da was an der Navigation zu ändern ist, da alle Menues statisch sind.

Die Sache ist die, dass ich eine Menueleiste für die Hauptpunkte im overall_header.html habe und auf den Themenseiten jeweils eine eigene Menueleiste links habe. Nun muss ich für jeden Hauptmenuepunkt eine eigene Menuedatei anlegen, da die Unterpunkte im linken Menue der betreffenden Seite unterschiedlich sein kann. Zudem gibt es einige Verknüpfungen zu Menuepunken auf anderen Untermenues bzw. zum Hauptmenue. Änderst sich nun etwas an den Menuepunkten, son muss ich eine ganze Reihe von Dateien anpassen, was doch Aufwendig sein kann. Die Homepage wird mehrere Hundert Themenseiten haben, zu welcher jeder Seite ein Menuepunkt zugeordnet ist.

Ich möchte es daher Zentral über mysql Tabellen machen, dann muss ich nur die entsprechenden Punkte in den Tabellen ändern. Wie ich oben schon geschrieben habe, hatte ich vor einiger Zeit beim Stöbern in irgendeinem php Buch etwas dazu gefunden, aber mir fällt micht mehr ein, welches Buch das war.

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo,

nach einiger Zeit, die ich mit der Suche von vielleicht geeigneten Ideen/Skripts verbracht habe, bin ich auf eine Vorlage gestoßen, die infrage kommen würde. Dieses Beispielskript scheint mir für meinen Zweck geeignet, ich bräuchte aber Unterstützung, es phpbb3 Konform zu machen. Kann mir jemand dabei helfen?

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo,

so, nun habe ich mich mal an die Sache rangewagt, ich habe es jetzt mithilfe einer Datenbank gemacht. Die Tabellen und Einträge, insgesamt mehr als 250 Menupunkte, ist schon soweit fertig. Das Auslesen der Tabellen und die Anzeige der Menupunkte klappt soweit schon, aber jetzt bin ich an zwei Punkte gekommen, wo ich nicht weiter weis.


1. Ich habe eine eigene Datei für die Menuverwaltung gemacht (navigation.php), welche die Komunikation mit der Datenbank übernimmt. Wie teile ich jetzt dieser Datei mit, welche Seite gerade Aktuell angezeigt wird?

Ich habe mit gedacht, dass ich jeder Datei eine Variable z.B $page_id=1234 zuweise, nur mein Problem ist wie ich der navigation.php diese dann bekannt mache. Ich habe mir gedacht, die navigation.php per include in jede Seite auf der das Menu dargestellt wird, einzubinden.


2. Mein zweites Problem ist mit der Darstellung der Menupunkte. Die normalen Menupunkte erzeuge ich mit den Tabelleneinträgen, da hole ich auch den Dateinamen zum jeweiligen Menupunkt heraus. Mein Problem ist jetzt mit den Einträgen für den Login und die Registrierung, die bekomme ich irgendwie nicht rein dass die richtig angezeigt werden. So sieht mein Code jetzt für diesen Teil aus:

Code: Alles auswählen

....
	$template->assign_block_vars('t_block2', array(
		'U_TITLE' 		=>  append_sid($phpbb_root_path . $svi_path . $navpage),
		'U_TITLE_SVI'	=>  $link2,
		'S_SELECTED' 	=>  $tab_select,
		'L_TITLE' 		=> $user->lang[$titel],

         ));
.....

Code: Alles auswählen

.....
			<!-- BEGIN t_block2 -->
				<ul>
					<!-- IF t_block2.S_SELECTED -->
						<li id="active-subsection"><a href="{t_block2.U_TITLE}"><span>{t_block2.L_TITLE}</span></a></li>
					<!-- ELSE -->
						<li><a href="{t_block2.U_TITLE}"><span>{t_block2.L_TITLE}</span></a></li>
					<!-- ENDIF -->
				</ul>
			<!-- END t_block2 -->
......
und der Teil steht so in der overall_header.html drinnen:

Code: Alles auswählen

.....
			<li class="icon-logout"><a href="{U_SVI_LOGIN}" title="{L_LOGIN_LOGOUT}" accesskey="l">{L_LOGIN_LOGOUT}</a></li>
			<!-- IF not S_USER_LOGGED_IN --><li class="icon-register"><a href="{U_REGISTER}">{L_REGISTER}</a></li><!-- ENDIF -->
....
Den Teil bringe ich irgendwie nicht so rein, dass er als Menupunkt richtig angezeigt wird.

Wäre super, wenn mir dabei jemand helfen könnte.

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Benutzeravatar
djchrisnet
Mitglied
Beiträge: 1275
Registriert: 29.06.2007 15:52
Wohnort: Elmshorn
Kontaktdaten:

Beitrag von djchrisnet »

Zu Punkt 1: da hilft dir die systemvariable $_SERVER['DOCUMENT_ROOT']

sie beinhaltet den Dateinamen z.B.: index.php

also kannst du den Menupunkt einfach per if vergleichen.

ungefähr so:

if($_SERVER['DOCUMENT_ROOT'] == $menüpunkt){
ZEILE ANDERS
else {
ZEILE NORMAL
}
Max
Mitglied
Beiträge: 1051
Registriert: 20.02.2003 22:22

Beitrag von Max »

Hallo,


Du möchtest also einen Menübereich haben, dessen Links und Linkbezeichnungen Du via Datenbank verwaltest?

Soll das idealerweise im Forum selbst laufen, oder einfach so?


Wenn es im Forum laufen soll, kannst Du es dir leicht machen und einfach abwarten, bis www.orionmods.de wieder on ist.
Dort gibt es sowas schon fertig als MOD - ist zwar für´s Orion optimiert, aber mit etwas Feingefühl kann man den sicherlich in jedem phpBB2.0.* einbauen.

Wenn es einfach so sein soll, kannst Du das zumindest als Vorlage verwenden.

Das Menü ist recht gut durchdacht, man kann die Links in ihrer Anordnung verschieben usw.
Also wirklich, wenn man das so umfassend benötigt, sehr empfehlenswert.



Gruß Max
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo Max,

danke dir für deine Antwort. Ja, es läuft in der Umgebung des Forums und nutzt auch dessen Funktionen. Ich baue meine Homepage um das Forum herum, es werden am Ende bestimmt so 300 Dateien/Menupunkte sein. Ich habe dann oben 10 Tabs (Hauptmenupunkte) und an der Seite abhängig dazu die Unterpunkte in verschiedenen Ebenen. Übrigens soll das ganze unter phpBB3 laufen. Vom Aussehen her soll es so sein wie z.B. im UCP bei der Profilverwaltung.

Wie ich schon sagte, die Menuanzeige und die Datenbank dazu stehen schon, es fehlen mir nur noch die oben genannten Punkte. Ich werde mir das aber trotzdem anschauen.

@djchrisnet
Daran habe ich auch schon gedacht, aber über den Dateinamen zu verwalten ist etwas schwierig, da sich der ja mal ändern könnte und schwerer im Index zu verwalten ist. Darum auch mein Gedanke mit der $page_id die in jeder Datei fest drinnen steht. Das Problem dabei ist auch, dass es bei einigen Seiten nur eine Datei gibt, aber über die Menupunkte eine unterschiedliche Anzeige kommt z.B. beim Nachrichtenarchiv die Jahrgänge.

[EDIT]
So ich habs jetzt hinbekommen, dass ich der navigation.php mitteile, welche $page_id die aktuelle Seite gerade hat. So hab ich es jetzt gemacht:

Programmdatei:

Code: Alles auswählen

$svi_page = 6;

//Navigation Menu
include($phpbb_root_path . 'svisuite/navigation.' . $phpEx);
navigation.php:

Code: Alles auswählen

request_var($svi_page, 0);
So kann ich auch noch weitere Eigenschaften der navigation.php übergeben.


Ich habe aber jetzt noch ein Problem, die aktuelle Seite zu selektieren. Ich lese die Tabelle aus und bekomme die Liste der auf der Seite sichtbaren Menupunkte als Liste. Nur weis ich jetzt nicht, wie ich das hin bekomme, damit nur die übergebene Variable $svi_page mit der tab_id verglichen wird.

Noch werden die Hauptseiten (Tabs) und select zum testen im Code fest vorgegeben.

Code: Alles auswählen

request_var($svi_page, 0);

$sub1 = 1; //Test Hauptgruppe Tab 1

echo $svi_page;

$sql = 'SELECT tab_id, toptab, subtab_1, subtab_2, subtab_3, subtab_4, subtab_5, tab_name, tab_page, tab_page2, leertab, svisuite 
		FROM ' . SVI_NAVIGATION_TABLE . " 
		WHERE subtab_1 = $sub1
		ORDER BY subtab_1 
			AND subtab_2
			AND subtab_3
			AND subtab_4
			AND subtab_5 ASC ";
	$result = $db->sql_query($sql);
	while ($nav_data = $db->sql_fetchrow($result))

	{

	$titel = $nav_data['tab_name'];
	$navpage = $nav_data['tab_page'];
	$navpage2 = $nav_data['tab_page2'];
	$svi1 = $nav_data['svisuite'];
	$tab_id = $nav_data['tab_id'];
	
	
	//SVI Themenseiten
	if ($svi1 == 0)
	{
		$svi_path = "";
	}
	else
	{
		$svi_path = "svisuite/";
	}
	

	$tab_select = 0; //Test select

	$template->assign_block_vars('t_block2', array(
		'U_TITLE' 		=>  append_sid($phpbb_root_path . $svi_path . $navpage),
		'S_SELECTED' 	=>  $tab_select,
		'L_TITLE' 		=> $user->lang[$titel],

         ));

	}
	$db->sql_freeresult($result);


$subtab_1 enthält alle Menupunkte, die zum jeweiligen Tab gehören.
$tab_id enthält die einzigartige Seiten ID

Wie bekomme ich es jetzt hin, damit nur die richtige tab_id passend zur $svi_page selektiert wird?


Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo,

wieder nach oben schieb ..... :wink:

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo

ich habe jetzt die Seitennavigation schon soweit, dass auch die gerade aktiven Menupunkte selektiert werden. Zwischen einigen seitlichen Menupunkten sind Leerschritte drinnen, das klappt auch soweit, nur da wo mehr als ein Leerschritt ist, funktioniert es nicht richtig. Er gibt mir die richtige Anzahl der Leerschritte aus, aber nicht so wie ich will. Ich möchte an der Stelle z.B. 5x <br /> ausgeben, aber es kommt nur 5x <. Jetzt habe ich es so gemacht:

Code: Alles auswählen

....
		//Leertabs 
		if ($leertb == 1)
		{
			$leer2 = "</dl><dl>";
		}
		else
		{
			for( $i = 0; $i < $leertb; $i++ )
			{
				$leer2[$i] = "<br />";
			}
		}	
.....
Kann mir jemand sagen, warum das nicht geht?
Ich bin nicht ganz dicht.... na und.
Antworten

Zurück zu „Coding & Technik“