Navigation... hab' nur eine Optimierungsfrage

lisali

Erfahrenes Mitglied
Hallo,

also, ich hab das hier geschrieben:

PHP:
$panel = array("home","user","forum","groups","asking","media","events","more");
echo "<ul id='panel'>";
foreach ($panel as $output) {
if ($_GET['s'] == $output) echo '<li class="current">'; else echo '<li>';
echo '<a href="?s='.$output.'" id="'.$output.'"></a></li>';
	}
echo "</ul>";

Erklärung: Immer dann, wenn die aktuelle Seite, den Werten des Array's $panel entspricht, kriegt der bestimmte Teil der Navigation die CSS Klasse "current" und verdeutlicht so, dass diese besonders hervorgehoben wird.

Jetzt ist meine Frage nur, ob man das hier vielleicht auch optimierter/effizienter lösen könnte und nicht extra ein Array mit IF-Abfrage durchlaufen muss? Aber soweit ich weiß gibt es da nicht viele Alternativen, oder?

Und was wäre eigentlich, wenn $_GET['s'] leer ist? Wie kann ich das auch "home" zuweisen?
 
mit der Schleife und dem if() ist dies eine gängige Umsetzung.

Bei leer 'home' zu nehmen ist relativ einfach.
item: nimm 's' einmal zum $_GET raus. du musst nicht immer uaf $_GET zugreiffen.
item: dann kannst du bei leerem Wert 'home' einfüllen

PHP:
$site = $_GET['s'];
$site = ($site == '') ? 'home' : $site;
//dein Code, nimm nun anstelle von $_GET['s'] das $site

Schöner währe natürlich du würdes mit filter_input() arbeiten. Ein Beispiel mit einer Whitelist und Default-Values findest du hier
http://wiki.yaslaw.info/wikka/PhpPost2Var
 
Frisst das zu viele Resourcen, wenn man auf Server-Variablen zugreift, oder wieso genau?

Also, das mit dem filter_input() verstehe ich auf die Navigation bezogen nicht so ganz. Kannst du mir vielleicht ein Beispiel geben?
 
mit dem input_filter kannst du injections etc. besser abfangen. Macht den Code ein wenig sicherer, da du prüfst was du übernimmst.

@timestamp
Aye
 
Kannst du mir bitte ein Beispiel dafür geben, wie das mit filter_input aussehen könnte?
 
Zurück