2012-07-19 15 views
1

我的網站在頁面頂部有導航,包含在我的所有頁面中。看起來是這樣的:使用繼承的變量生成HTML - 一種更清潔的方法?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>My Title</title> 
</head> 
<body> 

<? 
$selected = 'home'; 
include('include/header.php'); 
?> 

header.php文件基本上呈現頂部導航即每個頁面上的標準。上面是header.php文件繼承的變量,用於「告知」用戶所在的頭文件,以便可以選擇適當的導航選項卡。

header.php文件看起來像:

<div id="main_navigation"> 
     <ul id="nav"> 
     <li><a href="#">HOME</a></li> 
     <li><a href="#">ABOUT US</a></li> 
     <li><a href="#">PURCHASE</a></li> 
     <li><a href="#">SOMETHING ELSE</a></li> 
     </ul> 
</div> 

我想要做的就是添加HTML的標籤<li>顯示一個CSS類,將突出導航選項卡。有沒有更雄辯的方式來做到這一點,除了在這個醜陋的這段拋出:

<div id="main_navigation"> 
     <ul id="nav"> 
     <li <? if($selected == 'home'){ print "class = \"select"\"; ?> ><a href="#">HOME</a></li> 
     <li <? if($selected == 'about'){ print "class = \"select"\"; ?> ><a href="#">ABOUT US</a></li> 
     <li <? if($selected == 'purchase'){ print "class = \"select"\"; ?> ><a href="#">PURCHASE</a></li> 
     <li <? if($selected == 'something'){ print "class = \"select"\"; ?> ><a href="#">SOMETHING ELSE</a></li> 
     </ul> 
</div> 

回答

0

使用循環和數組:

$nav = array('#' => 'HOME'); 

echo '<ul id="nav">'; 
foreach($nav as $href => $text) { 
    $class = ($selected == 'home') ? ' class="select"' : ''; 
    echo '<li' . $class . '><a href="' . $href . '">' . $text . '</a></li>'; 
} 
echo '</ul>'; 

如果所有的href值真的是#,則可以省略他們在該陣列的定義:

$nav = array('HOME', 'ABOUT US'); 

然後,省略其包括在循環:

echo '<li' . $class . '><a href="#">' . $text . '</a></li>'; 
1

這似乎相當標準,但你也許可以做到這一點多一點succintly使用三元運算符:

<li class="<?php echo ($selected == 'home') ? 'select' : ''; ?>"> 

但我認爲這主要是風格問題。更好的辦法是在html之外處理這些位。再經過4個變量header.php文件,然後編寫清單這樣的:

<li class="<?php echo $home_class; ?>"> . . . 
<li class="<?php echo $about_class; ?>"> . . . 

這樣你會保留所有的邏輯出了HTML的。在這種情況下,最大的收穫可能是,你可以把邏輯變成看起來像一個功能:

function get_menu_item_class($menu_item) { 
    if (/* whatever logic to determine if it's selected based on passed parameter */) { 
    return 'select'; 
    } 

    return ''; 
} 

然後,你可以填充變量相當容易:

$home_class = get_menu_item_class('home'); 
$about_class = get_menu_item_class('about'); 

或者可能完全放棄這些變量,直接調用該函數:

<li class="<?php echo get_menu_item_class('home'); ?>"> ...