我目前在我的网站上使用的菜单上有一些非常冗长的代码。 My website 这几乎是2000线长lol。我想我可以使用一个开关,但我已经尝试过,无法实现它以正常工作。
在每个菜单上单击按钮时,它会保持突出显示,告诉用户他们在该页面上。我能让这个工作的唯一方法就是......
if($subject == 'art') {
echo '<div id="spacer2"><br></div>';
echo '<div class="idName2" id="menu2">';
echo '<a href="browse.php?alphabet='.$alphabet.'&subject=all&listtype='.$listtype.'">All</a>';
echo '<div id="spacer2"><br></div>';
echo '</div>';
echo '<div class="idName3" id="menu3">';
echo '<a href="browse.php?alphabet='.$alphabet.'&subject=art&listtype='.$listtype.'">Art</a>';
echo '</div>';
echo '<div class="idName2" id="menu2">';
echo '<a href="browse.php?alphabet='.$alphabet.'&subject=biology&listtype='.$listtype.'">Biology</a>';
echo '<a href="browse.php?alphabet='.$alphabet.'&subject=english&listtype='.$listtype.'">English</a>';
echo '<a href="browse.php?alphabet='.$alphabet.'&subject=chemistry&listtype='.$listtype.'">Chemistry</a>';
echo '<a href="browse.php?alphabet='.$alphabet.'&subject=mathematics&listtype='.$listtype.'">Mathematics</a>';
echo '<a href="browse.php?alphabet='.$alphabet.'&subject=history&listtype='.$listtype.'">History</a>';
echo '<a href="browse.php?alphabet='.$alphabet.'&subject=religion&listtype='.$listtype.'">Religion</a>';
echo '<a href="browse.php?alphabet='.$alphabet.'&subject=geography&listtype='.$listtype.'">Geography</a>';
echo '<a href="browse.php?alphabet='.$alphabet.'&subject=music&listtype='.$listtype.'">Music</a>';
echo '<a href="browse.php?alphabet='.$alphabet.'&subject=philosophy&listtype='.$listtype.'">Philosophy</a>';
echo '<a href="browse.php?alphabet='.$alphabet.'&subject=psychology&listtype='.$listtype.'">Psychology</a>';
echo '<a href="browse.php?alphabet='.$alphabet.'&subject=economics&listtype='.$listtype.'">Economics</a>';
echo '<a href="browse.php?alphabet='.$alphabet.'&subject=sociology&listtype='.$listtype.'">Sociology</a>';
echo '<a href="browse.php?alphabet='.$alphabet.'&subject=technology&listtype='.$listtype.'">Technology</a>';
echo '<a href="browse.php?alphabet='.$alphabet.'&subject=electronics&listtype='.$listtype.'">Electronics</a>';
echo '<a href="browse.php?alphabet='.$alphabet.'&subject=food&listtype='.$listtype.'">Food</a>';
echo '<a href="browse.php?alphabet='.$alphabet.'&subject=law&listtype='.$listtype.'">Law</a>';
echo '<a href="browse.php?alphabet='.$alphabet.'&subject=politics&listtype='.$listtype.'">Politics</a>';
echo '</div>';
}
elseif($subject == 'biology') {
然后有很多'elseifs',因为有菜单项,总共达到2000行代码,这显然是非常低效的,它也使得改变任何东西都令人难以置信地耗费时间...有人指出我我需要做的正确方向!
答案 0 :(得分:1)
如下:
$subjects = array('art', 'biology', 'english', 'chemistry' /*, etc */);
foreach ($subjects as $current_subject)
{
if ($current_subject == $subject)
{
//write it the id="menu3" way
}
else
{
//write it another way
}
}
您可以使用ucfirst
功能将“生物学”转换为“生物学”。
另请注意,不能有两个或多个具有相同ID的元素(在您的情况下为menu2)。
答案 1 :(得分:1)
导航总是很痛苦。这是一个可能有用的简单解决方案。
将所有内容放入数组中,如下所示:
$menu = array(
'All' => '/browse ...',
'Art' => '/browse ... art',
'Biology' => '/browse ... biology',
// etc.
)
然后,您可以根据当前主题构建所有链接:
$subject = 'Art';
foreach ($menu as $title => $url) {
if ($title == $subject) {
echo "<b>$title</b><br>\n";
} else {
echo "<a href=\"$url\">$title</a><br>\n";
}
}
这是一个相当简单的解决方案,但它可以扩展为创建更复杂的菜单结构。
你可以看到的另一个解决方案是Zend_Navigation。 http://framework.zend.com/manual/en/zend.navigation.introduction.html
答案 2 :(得分:0)
您应该使用数组来表示菜单。更好的是,你可以把它放在一个资源文件中(xml会更好),但解释超出了这个答案的范围(尽管如此,你应该研究它)。为菜单使用外部资源还有一个额外的好处,即您可以在不修改任何代码的情况下更改菜单结构。
坚持简单的方法,这就是你应该在没有外部资源的情况下代表菜单的方式:
$menus = array('Art', 'Biology', 'English', ...);
您可以使用简单的范围命令生成“A” - “Z”子菜单:range('A', 'Z')
所以你的代码回显菜单就像:
<?php
$current_letter = $_REQUEST['letter'];
$current_menu = $_REQUEST['menu'];
$letters = range('A', 'Z');
foreach($letters as $letter) :
$class = $current_letter == $letter ? 'class="active"' : '';
?>
<a <?php echo $class; ?> href="browse.php?letter=<?php echo $letter; ?>&menu=<?php echo $current_menu; ?>&listtype=<?php echo $listtype"><?php echo $letter; ?></a>
<?php endforeach; ?>
显示顶部菜单栏(A-Z链接)。对于侧边菜单,以下是如何显示您的类别:
<?php
foreach($menus as $menu) :
$class = $current_menu == $menu ? 'class="active"' : '';
?>
<a <?php echo $class; ?> href="browse.php?letter=<?php echo $current_letter; ?>&menu=<?php echo $menu; ?>&listtype=<?php echo $listtype"><?php echo $menu; ?></a>
<?php endforeach; ?>
Haven'tested它,但除了可能的拼写错误之外,这种方法应该适合你。
不过,请不要因为没有验证输入并直接使用$ _REQUEST而向我扔东西。它应该完成,但这是一个完整的其他主题。