PHP 3rd level navigation

GabbaHansn

Lieutenant
Dabei seit
Okt. 2007
Beiträge
528
hallo,

ich muss für meine homepage eine navigation machen, es ist notwendig sie mit 2 unter leveln also 3 fach zu machen(bild: http://www.bilder-hochladen.net/files/7pkm-1.jpg )

habt ihr eine idee, bzw einen tipp wie ich das ganze angehn kann/soll


mein problem ist, dass ich noch sehr wenig erfahrung mit php habe, da ich aber eine fachbereichsarbeit schreibe ist es eben von nöten etwas(im unterricht) nicht vorgekommenes zu erlernen was in diesem fall php wäre, java html css sind kein problem


und eine zweite frage :D
text der auf der homepage steht(content text) ist es von vorteil den in eine sql zu speichern oder in eine datei und dann über eine function get_page_as_text(); aufzurufen?(das würde schon funktionieren :):) )


mfG Hansn
 
Hi,

Zitat von GabbaHansn:
habt ihr eine idee, bzw einen tipp wie ich das ganze angehn kann/soll

wo kommen denn die Daten her? Ist das Menu irgendwo gespeichert, gibt es schon eine Quelle? In welchem Format leigt die Quelle vor? Willst du es über eine Weboberfläche editieren können? Oder hast du Probleme damit HTML-Listen zu verschachteln?

Zitat von GabbaHansn:
und eine zweite frage :D
text der auf der homepage steht(content text) ist es von vorteil den in eine sql zu speichern oder in eine datei und dann über eine function get_page_as_text(); aufzurufen?

Die Frage kann man nur beantworten, wenn du sagst, welche "Vorteile" du dir von den beiden Varainten erhoffst, je nachdem, ob der Text statisch ist, oder ob du ihn oft änderst, wie viel Erfahrung du im Umgang mit SQL hast, wie viel Aufwand du betreiben willst, wieviele Zugriffe du anpeilst und ob diese simultan getätigt werden.

MfG, Christian
 
Du solltest mal mehr Infos geben.
Habe für heute meine Hellseherischefähigkeiten verbraucht.

Wie groß ist die HP?
Soll ein CMS programmiert werden oder ist es eine statische HTML Seite?

Grüße

krizzel
 
also :D

das cms ist programmiert^^ es gehen auch links, und es wird auch alles angezeigt, das einzige problem was ich haben, ist, dass ich nicht umsetzten kann dass wenn ich auf sicherheitsspritzen klicke8das gleiche mit medizinprodukten) z.B. dann 3ml, 5ml etc aufgeht.... ich meine es würde schon gehen indem ich in den navibereich jedes mal eine andere navi lade, aber das ist mir zu umständlich

zurzeit sind die links im array gespeichert und werden per foreach aufgerufen..

das problem ist meiner ansicht nach, dass php serverseitig ist, und desswegen ich mit meiner "java" lösung nicht sehr weit gekommen bin....

EDIT: zur größe, nja was ist für dich groß?^^
 
Zuletzt bearbeitet:
Von wem ist das CMS programmiert?
Hast du es selbst geschrieben oder ist es ein freies aus dem Internet?

Sollte erstes der fall sein wärst du der, der es am besten wüsste.
Wenn es aus dem Internet geladen ist, welches ist es? Vielleicht kennt es hier jemand.

Wie ist das CMS Programmiert?
Wenn es Objekt Orientiert ist, sollte es eine Methode/Eigenschaft geben die angibt, welcher Menüpunkt aktiv ist.
Wenn Prozedual geschrieben ist, solltest du überlgen dir dafür eine Klasse zu schreiben.
Das erleichtert, das ganze um einiges.

Grüße

krizzel
 
ich habe es selbst programmiert(war selbst verwundert das ich das hinbekommen habe), und es ist nicht objekt orientiert-.- oder wie ist die frage gemeint? auf jeden fall nicht so wie wenn ich bei java objektorientiert programmiere...xD

zurzeit steht im bereich navi das so drinnen:
$base['navigation'] = '<table><tr><td class="link"><a href="$PHP_SELF">Home</a></td></tr>
<tr><td class="link"><a href="$PHP_SELF?cmd=unternehmen">Unternehmen</a></td></tr>
<tr><td class="link"><a href="$PHP_SELF?cmd=medizienprodukte">Medizienprodukte</a></td></tr>
<tr><td class="link"><a href="$PHP_SELF?cmd=praeparate">Pr&auml;parate</a></td></tr>
</table>';

sprich über cmd weiß ich ja wo ich gerade bin, war das so gmeint?

lg Hansn
PW: danke schonmal für die vielen antworten :)
 
wie meinst du? sry bin bisschen doofie heut-.-

die struktur die auf dem bild zu sehen ist?
 
Nein, du willst ja ein Menü ausgeben.
Diese Menü muss ja irgendwo gespeichert sein.

Ich vermut mal dass sich das Menü in einem Array befindet.
Wie sieht dieses aus? Was hast du für Daten in dem Array?
Id? Name? Active? Link?
 
Zuletzt bearbeitet:
Genau sowas.
Das solltest du aber erweitern, damit du mehr informationen hast.
PHP:
define('impressum', 6);
.
.
.
//Impressum
$_menu[impressum]['id'] = impressum;
$_menu[impressum]['name'] = "Impressum";
$_menu[impressum]['hasChild'] = false;
$_menu[impressum]['Child'] = null;
$_menu[impressum]['link'] = "index.php5?cat=".impressum;
$_menu[impressum]['active'] = $_GET['cat'] == impressum ? true : false;
$_menu[impressum]['file'] = "impressum.php5";
$_menu[impressum]['Childof'] = 0;
$_menu[impressum]['online'] = false;
Das ist bei meiner Homepage die Informationen, die ich für einen Menüpunkt habe/brauche.

Du solltest dein Array also auf jedenfall erweitern.
Aber das wichtigste, ist das Feld Active. Damit kannst du Überprüfen ob ein Menü Punkt Aktiv ist.
Wenn es Aktiv ist, musst du noch überpüfen ob es ein Childof ist. Wenn das auch zutrifft musst du den Menüpunkt mit der ID vom Childof laden und den wieder auf Childof prüfen, bis du ganu oben am Baum angekommen bist.

Grüße

krizzel
 
oh...^^

d.h.:
$_menu ist bei dir das array?
impressum eine kategorie wie bei mir medizinprodukte
und id(was ist eigentlich der unterschied zwischen id und cmd?), name, hasChild,... sind dem impressum zugeordnete daten...?

das childof gibt dann an welche unterlinks es beinhabt? sowie Child mir angibt wieviele es hat? sehe ich das richtig?^^

nochwas, was bezweckst du mit dem $_GET['cat']?


aber besten dank schon mal :)
lg Hansn
 
Also $_menu iste in Verschachteltes Array. In dem Impressum eine constante mit der ID 6 ist, wie du ganz oben an dem define sehen kannst.

PHP:
$_menu[impressum]['id'] = impressum; //Speichern der ID der Kategorie in deisem Falle 6 NICHT impressum
$_menu[impressum]['name'] = "Impressum"; // Name der Kategorie
$_menu[impressum]['hasChild'] = false; // Ob diese Kategorie Kinder hat, wenn ja, true
$_menu[impressum]['Child'] = null; // Wenn Kinder vorhanden sind, ein Array mit den Elemente also, diese Array noch mal mit anderen Daten
$_menu[impressum]['link'] = "index.php5?cat=".impressum; // link zur Kategorie
$_menu[impressum]['active'] = $_GET['cat'] == impressum ? true : false; //Mit $_GET['cat'] Hole ich mir die ID der Kategorie aus dem link
$_menu[impressum]['file'] = "impressum.php5"; //Datei die Geladen werden soll, wenn die Kategorie Aktiv ist
$_menu[impressum]['Childof'] = 0; //ID von der Kategorie, vom dem diese Kategorie das Kind ist, 0 wenn es ein Hauptmenüpunkt ist
$_menu[impressum]['online'] = false; //um die Kategorie zu verstecken. Online müsste eigentlich notvisible heissen, Fehler von mir damals^^

$cmd und id ist im prinzip dasgleiche. Es ist bei beiden ein Index mit dem man die Kategorie identifizieren kann.

Hoffe das hilft dir weiter.
 
ok ok :)

und dass muss ich mit jedem link machen, den ich in der navigation habe?

$_menu[impressum]['file'] = "impressum.php5"; //Datei die Geladen werden soll, wenn die Kategorie Aktiv ist

dann wird diese datei geladen, aber wohin?

//aus index.php
switch(strtolower($cmd)) {
default:
case 'home':
$name = seiten.'/'.home.'.'.php;
$base['content'] = get_page_as_string($name);
$base['infobox'] = 'lalalala';
$base['bilder'] = change_pictures();
break;

so hab ich es bis jetzt geladen

besten dank einmal, nur frage ich mich wie ich dann weitere links zum "aufklappen" bringen kann

ist es gut das in eine eigene datei zu speichern und dann aufzurufen? schon oder^^


danke dass du so viel geduld mit mir hast :)
 
achso mhm wird jetzt ein langer post werden...xD

also die get_page_as_string sieht bei mir so aus, selbst gemacht....

function get_page_as_string($name) {
$temp = file($name);
$temp = implode('',$temp);
return $temp;
}


dann in der base.inc stehen die ganzen bereiche drinnen, wo ich dann die verschiedenen contents reinlade, vorher habe ich im template platzhalter definiert an diesen stellen

$base['logo'] = '<img src="grafiken/logo/headbioinfus.jpg"></a>';
$base['bilder'] = '';
$base['suchelang'] = 'sprache';
$base['shortnav'] = 'bioinfus.com - ';
$base['navigation'] ='';
$base['content'] = '';
$base['infobox'] = infobox();
$base['template'] = 'template/main.html';
$base['end'] = 'Copyright Bioinfus ©2008
<a class="linkend" href="$PHP_SELF?cmd=impressum">Impressum</a>
<a class="linkend" href="$PHP_SELF?cmd=nutzungsbedingungen">Nutzungsbedingungen</a>
<a class="linkend" href="$PHP_SELF?cmd=datenschutzerklaerung">Datenschutzerklärung</a>
<a class="linkend" href="$PHP_SELF?cmd=agb">AGB</a>';


$base['tag_start'] = '<@';
$base['tag_end'] = '@>';


und in der index.php steht bei mir das so drinnen

//übergebene Variablen auslesen
$cmd = $_GET['cmd'];
$id = $_GET['id'];

//Konfigurationsdateien laden
include('inc/functions.inc.php');
include('inc/base.inc.php');


//Template einlesen
$template = get_file_as_string($base['template']);

//Inhalt laden
switch(strtolower($cmd)) {
default:
case 'home':
$name = seiten.'/'.home.'.'.php;
$base['content'] = get_page_as_string($name);
$base['infobox'] = 'lalalala';
$base['bilder'] = change_pictures();
break;
case 'unternehmen':
$base['content'] = 'Unternehmen';
$base['infobox'] = infobox();
$base['bilder'] = change_pictures();
break;
case 'medizienprodukte':
$base['content'] = 'Medizienprodukte';
$base['bilder'] = change_pictures();
$base['navigation'] = open_medizienprodukte();
break;
case 'praeparate':
$base['content'] = open_praeperate();
$base['bilder'] = change_pictures();
break;

}
.
.
.
//Platzhalter ersetzen
$template = str_replace($base['tag_start'].'logo'.$base['tag_end'],$base['logo'],$template);
$template = str_replace($base['tag_start'].'bilder'.$base['tag_end'],$base['bilder'],$template);
$template = str_replace($base['tag_start'].'suchelang'.$base['tag_end'],$base['suchelang'],$template);
$template = str_replace($base['tag_start'].'shortnav'.$base['tag_end'],$base['shortnav'],$template);
$template = str_replace($base['tag_start'].'navigation'.$base['tag_end'],$base['navigation'],$template);
$template = str_replace($base['tag_start'].'content'.$base['tag_end'],$base['content'],$template);
$template = str_replace($base['tag_start'].'infobox'.$base['tag_end'],$base['infobox'],$template);
$template = str_replace($base['tag_start'].'end'.$base['tag_end'],$base['end'],$template);
$template = str_replace('$PHP_SELF',$_SERVER['PHP_SELF'],$template);

//Template ausgeben
echo stripslashes($template);

die platzhalter sehen so aus im html dokumant sprich template
<div class="mainframe">
<@content@>
</div>

ich hoffe du hast jetzt ein bisschen mehr einsicht, meinst du, ich könnte noch ein bisschen mehr von deiner sehen?^^

lg Hansn
 
Ich habe es änlich wie du gemacht.
Template laden, Header einsetzten, Content einsetzten, Footer einsetzten.

Aber so wie ich das sehe wird eine Switch-Anweisung nicht funktionieren.
Du übergibts ein Integer aber fragst einen String ab.

Und das mit den Funktionen um anzuzeigen welches Menü offen ist, würde ich auch nicht machen.

Mein Menü wird so ausgegben(vereinfacht):
PHP:
foreach ($_menu as $a) {
	?>
		<a href="<?=$a['link'];?>" <?=$a['active'] ? "class=\"active\"" : "";?>><?=$a['name'];?></a>
		if ($a['hasChild'] ) {
			foreach ($a['Child'] as $b) {
				if ($b['online']) {
				?>
				<a href="<?=$b['link'];?>"><?=$b['name'];?></a>
				<?php	
				}
			}
		}
}
Sollte bei dir im prinzip auch klappen, brauchst dann nur noch eine Schleife mehr.
 
naja wegen integer und string, bei mir hatten ja alle einen wirklichen namen, also die CMDs

also eigentlich funktioniert sie nämlich die switch anweisung :D

d.h. du hast auch alle links in der index.php so wie ich definiert?

werd jz mal das ganze probieren :)

EDIT: könnte ich das array sehen wie du die links definiert hast?^^
 
Zuletzt bearbeitet:
Zurück
Top