Al een eind op weg met mijn website volgens het mvc model echter zit ik nu toch echt met een probleem, het opbouwen van mijn menu/navigatie.
ik heb natuurlijk een model menu.mdl.php waar in ik alle menu items ophaal en als objecten in een array opsla, die array geef ik dan mee aan mijn view.
Echter lijkt me dat er nu iets te veel code moet komen in de view om alles netjes en correct weer te geven, even een voorbeeld van hoe het (nu al) eruit ziet in mijn view.
<?php
$menuOutput = null;
foreach($menu as $item){
// Check if we link to an internal page or to an external website url
if (empty($item -> targetURL)) {
// Check which is our target, blank true or false
if ($item -> targetBlank) {
$menuOutput .= '<li>';
$menuOutput .= '<a href="'. SITE_URL . $item -> title .'" target="_blank">'. $item -> title .'</a>';
$menuOutput .= '</li>';
} else {
$menuOutput .= '<li>';
$menuOutput .= '<a href="'. SITE_URL . $item -> title .'">'. $item -> title .'</a>';
$menuOutput .= '</li>';
}
} else {
// Check which is our target, blank true or false
if ($item -> targetBlank) {
$menuOutput .= '<li>';
$menuOutput .= '<a href="'. $item -> targetURL .'" target="_blank">'. $item -> title .'</a>';
$menuOutput .= '</li>';
} else {
$menuOutput .= '<li>';
$menuOutput .= '<a href="'. $item -> targetURL .'">'. $item -> title .'</a>';
$menuOutput .= '</li>';
}
}
}
echo '<ul>' . $menuOutput . '</ul>';
?>
En dan moet er nog een hele hoop gebeuren. Waar zou ik dit stuk nog kunnen plaatsen of hoe zou ik het kunnen oplossen? Om dit ook in de model te stelen zie ik niet zitten aangezien er toch wat html in voorkomt...
Maakt het toch wel een stukje korter en vooral overzichtelijker weer inderdaad, bedankt!!! Zou je dit op deze manier wel in een controller of model durven gooien? (al zou model eigenlijk soieso een slecht idee zijn aangezien dat alleen voor het beheren van data is)
Dit is puur en alleen het genereren van een bepaalde weergave, dit hoort dus in een view thuis.
Uit je model rolt op een gegeven moment de variabele $menu. Deze wordt vervolgens door een controller doorgegeven en de view zorgt er vervolgens voor dat de inhoud op de juiste manier weergegeven wordt.
?
Onbekende gebruiker
16-07-2008 00:00
Jan Koehoorn schreef op 15.07.2008 22:11
Is het zo niet simpeler:
<?php
$menuOutput = null;
$a = null;
foreach ($menu as $item) {
// Check if we link to an internal page or to an external website url
if (empty($item->targetURL)) {
// Check which is our target, blank true or false
if ($item->targetBlank) {
$a = '<a href="' . SITE_URL . $item->title . '" target="_blank">';
}
else {
$a = '<a href="' . SITE_URL . $item->title . '">';
}
}
else {
// Check which is our target, blank true or false
if ($item->targetBlank) {
$a = '<a href="' . $item->targetURL . '" target="_blank">';
}
else {
$a = '<a href="' . $item->targetURL . '">';
}
}
}
$menuOutput .= '<li>';
$menuOutput .= $a . $item->title . '</a>';
$menuOutput .= '</li>';
echo '<ul>' . $menuOutput . '</ul>';
?>
Kan nog korter.
<?php
$menuOutput = null;
$a = null;
foreach ($menu as $item) {
// Check which is our target, blank true or false
// Check if we link to an internal page or to an external website url, what we do with the ternary operator
if ($item->targetBlank) {
$a = '<a href="' . ((empty($item->targetURL)) ? SITE_URL : $item->targetURL) . $item->title . '" target="_blank">';
}
else {
$a = '<a href="' . ((empty($item->targetURL)) ? SITE_URL : $item->targetURL) . $item->title . '">';
}
}
$menuOutput .= '<li>';
$menuOutput .= $a . $item->title . '</a>';
$menuOutput .= '</li>';
echo '<ul>' . $menuOutput . '</ul>';
?>
Volgens mij ook een mooi voorbeeld van waar je de ternary operator kan gebruiken :-).
Bedankt allemaal, ondertussen nog een stukje verkort en verbeterd (@karl menuoutput moest tussen de foreach ;) no hardfeelings natuurlijk :) ben al blij dat je de tijd nam!!!)
Zoals het nu is:
<?php
$menuOutput = null;
$a = null;
foreach ($p_aData as $item) {
// Check which is our target, blank true or false
// Check if we link to an internal page or to an external url, what we do with the ternary operator
$item -> targetBlank ? $param = 'target="_blank"' : $param = null;
$a = '<a href="' . ((empty($item -> targetURL)) ? SITE_URL : $item -> targetURL) . $item -> title . '" '. $param .'>';
$menuOutput .= '<li>';
$menuOutput .= $a . $item -> title . '</a>';
$menuOutput .= '</li>';
}
echo '<ul>' . $menuOutput . '</ul>';
?>