PHP Was kann ich semantisch noch verbessern?

selberbauer

Captain
Registriert
Juni 2009
Beiträge
3.604
Hallo,
ich mache gerade diese kleine Übung, diese wollte ich nun um einige Sachen erweitern.

Beispielsweise soll die Anzeige, auf welcher Navigationsleiste man sich befindet nicht statisch sein, wie das hier:
Code:
   <nav>
    <ul>
     <li class="current"><a href="index.html">Home</a></li>
     <li><a href="ueber_uns.html">Über uns</a></li>
     <li><a href="dienstleistungen.html">Dienstleistungen</a></li>
     <li><a href="referenzen.html">Referenzen</a></li>
     <li><a href="tutorials.html">Tutorials</a></li>
     <li><a href="downloads.html">Downloads</a></li>
     <li><a href="kontakt.html">Kontakt</a></li>
    </ul>
   </nav>

sondern aus "$_GET['section']" herauslesen, unter welchem Punkt er "class='current'" einfügen soll.

Dies habe ich wie folgt gelöst:
PHP:
<?php

for($i = 0; $i <= 7; $i++) {
	$li[$i] = '';
}

if($_GET['section'] == 'home') {
	$li[0] = 'class="current"';
} elseif($_GET['section'] == 'about_us') {
	$li[1] = 'class="current"';
} elseif($_GET['section'] == 'services') {
	$li[2] = 'class="current"';
} elseif($_GET['section'] == 'reference') {
	$li[3] = 'class="current"';
} elseif($_GET['section'] == 'tutorials') {
	$li[4] = 'class="current"';
} elseif($_GET['section'] == 'downloads') {
	$li[5] = 'class="current"';
} elseif($_GET['section'] == 'contact') {
	$li[6] = 'class="current"';
}


echo "
   <nav>
    <ul>
     <li $li[0] ><a href=\"index.html\">Home</a></li>
     <li $li[1] ><a href=\"ueber_uns.html\">Über uns</a></li>
     <li $li[2] ><a href=\"dienstleistungen.html\">Dienstleistungen</a></li>
     <li $li[3] ><a href=\"referenzen.html\">Referenzen</a></li>
     <li $li[4] ><a href=\"tutorials.html\">Tutorials</a></li>
     <li $li[5] ><a href=\"downloads.html\">Downloads</a></li>
     <li $li[6] ><a href=\"kontakt.html\">Kontakt</a></li>
    </ul>
   </nav>";
   
?>

Meine Frage ist nun, ob das noch besser/kürzer geht?

Gruß
 
PHP:
<?php
switch ($_GET['section']) {
    case 'home':
        $li[0] = 'class="current"';break;
    case 'about_us':
        $li[1] = 'class="current"';break;
    case 'services':
        $li[2] = 'class="current"';break;
}
?>

Aber ansonsten wüsste ich jetzt auch keinen besseren Weg. :)
 
:freak:

PHP:
$menu = array(
  array('section' => 'uber', 'url' => 'ueber_uns.html', 'title' => 'Über uns'),
  array('section' => 'blah', 'url' => 'blah.html', 'title' => 'blah'),
);

$current = $_GET['section'];

echo '<nav><ul>';
foreach ($menu as $m) {
  $class = '';
  if ($current == $m['section'])
     $class = ' class="current"';
  echo '<li><a href="', $m['url'], '">', $m['title'], '</a></li>';
}
echo '</ul></nav>';

wäre eine idee, ungefähr und hässlich zusammengehackt ohne zu testen. die section muesstest noch mitgeben, aber das solltest du grad noch herausfinden können wie ;)
 
@Suxxess
Was ist der große Vorteil von switch?
Syntaktisch passt er nicht so gut in PHP rein, weswegen ich if verwendet habe.
Müsste das break nur bei if Anweisungen notwendig sein (case unterbricht auto.?)?

@bu1137
Gute Idee, werde das mal übertragen und Anpassen, poste es dann rein ;)
Ergänzung ()

PHP:
<?php

$menu = array(
	array(
		'section' => 'home',
		'url'     => 'home.html',
		'title'   => 'Home'
		),
	array(
		'section' => 'about_us',
		'url'     => 'about_us.html',
		'title'   => 'Über uns'
		),
	array(
		'section' => 'services',
		'url'     => 'services.html',
		'title'   => 'Dienstleistungen'
		),
	array(
		'section' => 'reference',
		'url'     => 'reference.html',
		'title'   => 'Referenzen'
		),
	array(
		'section' => 'tutorials',
		'url'     => 'tutorials.html',
		'title'   => 'Tutorials'
		),
	array(
		'section' => 'downloads',
		'url'     => 'downloads.html',
		'title'   => 'Downloads'
		),
	array(
		'section' => 'contact',
		'url'     => 'contact.html',
		'title'   => 'Kontakt'
		)
);

$current = $_GET['section'];

echo '<nav><ul>';
foreach($menu as $m) {
	$class = '';
	if ($current == $m['section'])
		$class = ' class="current"';
	echo '<li', $class, '><a href="', $m['url'], '">', $m['title'], '</a></li>';
	}
echo '</ul></nav>';
?>

Funktioniert :D

Denke, dass die andere Variante Altagstauglicher ist, zumindest, wenn man nach der Code Länge geht, da der Aufbau eines <li> zu einfach ist und man dieses Riesen Array mit sich schleppt.

Nochmal eine Nachtrag ;)
Ich benutze in der index.php bereits ein section array, welches die aufzurufende Seite per $GET festlegt, da könnte ich das Riesen Array unterbringen und dann für das komplette "Projekt" verwenden. Empfiehlt sich das?
Gruß
 
Zuletzt bearbeitet:
Aua aua aua...
Code:
<?php $currentcss = ' class="current"'; ?>
   <nav>
    <ul>
     <li<?php echo ($_GET['section'] === 'home' ? $currentcss : ''); ?>><a href="index.html">Home</a></li>
     <li<?php echo ($_GET['section'] === 'ueber_uns' ? $currentcss : ''); ?>><a href="ueber_uns.html">Über uns</a></li>
     <li<?php echo ($_GET['section'] === 'dienstleistungen' ? $currentcss : ''); ?>><a href="dienstleistungen.html">Dienstleistungen</a></li>
     <li<?php echo ($_GET['section'] === 'referenzen' ? $currentcss : ''); ?>><a href="referenzen.html">Referenzen</a></li>
     <li<?php echo ($_GET['section'] === 'tutorials' ? $currentcss : ''); ?>><a href="tutorials.html">Tutorials</a></li>
     <li<?php echo ($_GET['section'] === 'downloads' ? $currentcss : ''); ?>><a href="downloads.html">Downloads</a></li>
     <li<?php echo ($_GET['section'] === 'kontakt' ? $currentcss : ''); ?>><a href="kontakt.html">Kontakt</a></li>
    </ul>
   </nav>
Ohne dicken Overhead einfach inline einfügen. Mit einer Template Engine wäre es natürlich einfacher.
 

Ähnliche Themen

Antworten
8
Aufrufe
711
Antworten
8
Aufrufe
854
Antworten
4
Aufrufe
1.696
Antworten
12
Aufrufe
2.502
Zurück
Oben