PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : geht das auch einfacher (php-script)


MadMan2k
2003-07-07, 23:57:09
ich hab mir für mein Homepagemenü ein script geschrieben, welches den aktuelkl markierten Button farblich hervorhebt, außerdem will ich noch zu bestimmten buttons ein Submenü erstellen - bloß ist mein script jetzt schon dermaßen kopliziert, dass ich glaube, dass etwas ganz falsch gemacht habe - vor allem wenn ich das menü von PC Games sehe...

Homepage: http://mitglied.lycos.de/madman2k3/
submenü soll so aussehen: http://mitglied.lycos.de/madman2k3/konstrukt.html
PC Games-Menü: http://www.pcgames.de/?menu=0600

ok, mein Script soeht so aus:

//Arrays mit Daten
$button = array();
$button['name'] = array('News','Games','Fun', ...);
//Array mit Buttonbelegung
$button['link'] = array('index.php','index.php?seite=games' ...);
//Array mit Links zum Button

$control = array('news','games','fun','links', ...);
//Kontrollarray um Button genau bestimmen zu können

//Button erstellen
for($i=0; $i<count($button['name']); $i++) {

//Button Design Zeile 1
// usw.
if(isset($seite) AND ($seite == $control[$i]) OR !isset($seite) && ($i == 0)){
//mach Button blau
}else {
//mach grau
}


für das submenü hab ich mir dann noch überlegt:
(nicht getestet)

//seite zusätzlich mit variable $expand aufrufen
if(isset($seite) AND ($seite == $control[$i]) AND isset($expand){
for($i=0; $i<count($submenue["$contol[$i]"]['name']); $i++) {
//mach submenue
}
}

natürlich erstelle ich noch ein Array (z.B.):

$submenue = array();
$submenue['games']['name'] = array('ut2003','warcraft' ...);


wer es bis hierher kapiert hat, wird mir sicher zustimmen, dass es ziemlich komplieziert so ist.
Denn die bei PC Games haben nur eine Variable a ´la "menu=0600"
die beide sachen steuert (active highlight und expand).
Falls hier als jemand da ist, der mir erklären kann wie die das bei PC Games gemacht haben könnten oder auch nur ne Idee hat wie ich mein Script verinfache, bitte Posten

Nase
2003-07-08, 10:03:47
Soweit ich weiss, benutzt PcGames auch kein PHP.

Aber zu deinem Problem. Es sollte doch so gehen:

Du setzt eine Variable in die URL, z.B. menu=news
Da du ja immer das ganze Menu aufrufst, sagst du einfach


for ($i = 0; $i < count($button['name']); $i++)
{

if ($button[$i] == $menu)
{
//Code für deinen farbigen Button + das extra Menu
}
else
{
//Code für den normalen Button
}

}


Allerdings komm ich mit den ganzen Arrays nicht so zurecht, irgendwie meine ich auch, dass die total unnötig sind. Vor allem, da ein Menu ja nicht so dynamisch sein muss wie andere Teile der Seite. Deswegen bin ich immer dafür, sowas fest zu machen, also direkt den Code für jeden Menupunkt in den Code zu schreiben.

MadMan2k
2003-07-08, 15:26:52
sowas habe ich mir auch schon überlegt gehabt - aber das geht nicht, da

$seite == $button['name'][$i]

nicht immer gegeben ist.
Die groß/kleinschreibung könnte man ja noch mit

$seite == strtolower($button['name'][$i])

abfangen, aber wenn ich die seite mit $seite=aboutme aufrufe, auf den Button, aber "About Me" oder ganz was anderes stehen soll, geht das nicht.
Deswegen habe ich auch das array $control gemacht, in dem alle möglichkeiten für $seite in der gleichen Reihenfolge wie in den anderen Arrays stehen.

und die PC Games Seite sollte schon php sein, denn die einzelnen SEiten werden mit menu=xxxx aufgerufen - php Syntax IMO...

Nase
2003-07-08, 15:36:58
Naja, würde schon gehen...

Die dümmste Methode die du anwenden könntest wäre natürlich


if($menu == '1')
{
//Code für deinem farbigen Button + Untermenu
}
else
{
//Code für den normalen Button ohne Untermenu
}


und dann so weiter mit $menu == '2', $menu == '3' ...

Ist zwar keine besonders schöne Möglichkeit, aber einfacher als dein Versuch. :D

Aqualon
2003-07-08, 16:10:22
Original geschrieben von MadMan2k
aber wenn ich die seite mit $seite=aboutme aufrufe, auf den Button, aber "About Me" oder ganz was anderes stehen soll, geht das nicht.


Das spielt keine Rolle, was auf dem Button steht. Wichtig ist nur, dass der Link die Form datei.php?seite=aboutme hat, ob der Link dann About Me oder Aboutme oder sonstwie heisst, spielt da keine Rolle.

Original geschrieben von MadMan2k
und die PC Games Seite sollte schon php sein, denn die einzelnen SEiten werden mit menu=xxxx aufgerufen - php Syntax IMO...

Das ist die Syntax so ziemlich aller Skriptsprachen, die etwas über die URL an ein Skript übergeben wollen.

Aqua

MadMan2k
2003-07-08, 17:43:42
Original geschrieben von Aqualon
Das spielt keine Rolle, was auf dem Button steht. Wichtig ist nur, dass der Link die Form datei.php?seite=aboutme hat, ob der Link dann About Me oder Aboutme oder sonstwie heisst, spielt da keine Rolle.

wenn man den Namen(das was auf dem Button steht) benutzt um herauszufinden, ob er gerade aktiv ist, tut es das.


if($seite == strtolower($button['name'][$i])){
echo('button_blau.gif');
}else{
echo('button_grau.gif');
}

wenn er jetzt $seite=aboutme mit $button['name'][$i]="about me" vergleicht gibt er einen flase zurück und macht den button grau obwohl er aktiv ist.
Deshalb habe ich auch extra ein kontollarray erstellt, wo z.B. aboutme statt About Me steht - allerdings erscheint mir dies nicht als die einfachste bzw. eleganteste möglichkeit.
Dies hatte ich im Prinzip aber schon gesagt...


Das ist die Syntax so ziemlich aller Skriptsprachen, die etwas über die URL an ein Skript übergeben wollen.

Aqua

ok, wusste ich nicht...
aber mir kommt es auch vielmehr darauf an, was es übergibt nämlich nur eine 4stellige Zahl wie "0603" wobei "06" das haupt und "03" das submenü angibt.
Wenn kein Submenü dargestellt werden soll, heisst die Variable "0600"

Dies scheint mir als die einfachste möglichkeit einen Zweispaltigen Baum rendern zu lassen, darum würde ich gerne wissen, ob jemand versteht, wie das ganze funktionier(en könnte) und mir sagen kann, wie ich meine Arrays anordenen bzw. wie ich sie wieder abfragen soll..

mfg

MM2k

Edit: Mir wäre auch schon ein stück weit geholfen, wenn mir jemand sagen könnte, wei ich diese 4stellige zahl in 2 2stellige zerpflücken kann.

Matthias2x
2003-07-08, 18:17:03
tjo wie wärs denn mit:

$seite = strtolower(str_replace(' ','',$seite));


damit hast du alle Buchstaben in kleinschreibung umgesetzt und zusätzlich alle leerzeichen entfernt.

Edit: Zusätzlich kannste das auch mit $button['name'] machen bevor du das auswertest also so etwa:

if($seite == strtolower(str_replace(' ','',$button['name'][$i]))){
tue was
} else {
tue was andres
}

MadMan2k
2003-07-08, 18:41:53
danke, das ist gut.
Aber könntest du mir vielleicht noch sagen, wie ich aus einem string zwei mache? (equivalent zu .substring(start,stop) in JS)
Denn ich habe jetzt die PC Games Methode nachvollziehen können:
(vorerst in JS)

button = new Array()
button['name'] = new Array('zelle 1','zelle 2','zelle 3');
button['submenue'] = new Array();
for (i=0; i< button['name'].length; i++ ) {
button['submenue'][i] = new Array();
}
button['submenue'][1]['name'] = new Array('submenue1','auch');


seite = '0101';

var menue = parseInt(seite.substring(0,2));
var subm = parseInt(seite.substring(2,4));

for (i=0; i<button['name'].length ; i++ ) {
if(i == menue) {
//mach blau
}else{
//mach grau
}

if((subm > 0) && (i == menue)) {
alert(button['submenue'][menue]['name'][subm]);
}

}

MadMan2k
2003-07-08, 19:17:03
ok, hat sich geklärt der befehl ist in php derselbe - nur etwas andere syntax...

das mit dem ganzen Thread also auch..

nochmal danke an alle, die geholfen haben

MM2k

MadMan2k
2003-07-08, 22:20:22
ok, letzte bitte:
wie kann man folgendes vereinfachen:

if($submenue > 0){
if($submenue == $i) {
echo('blue.gif');
} else {
echo ('grey.gif');
}

}
else {
if($link == $i) {
echo('blue.gif');
} else {
echo ('grey.gif');
}
}