考虑一下:
$menuItems = array (
"page1" => "1.php",
"page2" => "2.php",
"page3" => "3.php",
"page4" => "4.php",
"page5" => "5.php",
);
现在我创建了这样的菜单:
<ul class="menu">
<?php
foreach($menuItems as $name => $url) {
echo "<li><a href='$url' class='$class'>$name</a></li>";
}
?>
</ul>
效果很好。但现在我需要在当前页面上添加一个class.current。
为了获得当前页面,我这样做:
<?php
function curPageName() {
return substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);
}
$curpage = curPageName();
?>
而且效果也很好。
所以我想问题是如何将$curpage分配给。。。当前页面?:)
谢谢。Alex
<ul class="menu">
<?php
foreach($menuItems as $name => $url) {
if ($url === $curpage){
$class.=' .current';
}
echo "<li><a href='$url' class='$class'>$name</a></li>";
}
?>
</ul>
Easy,在循环中,检查是否为$url == $curpage
,并适当追加。
示例:
<?php
$menuItems = array(
"page1" => "1.php",
"page2" => "2.php",
"page3" => "3.php",
"page4" => "4.php",
"page5" => "5.php",
);
$current_item = "2.php"; //Assume we got this from the function
?>
<ul class="menu">
<?php
foreach ($menuItems as $name => $url) {
echo "<li><a href='$url'";
if ($url == $current_item) {
echo " class='current'";
}
echo ">$name</a></li>'n";
}
?>
</ul>
<ul class="menu">
<?php
foreach($menuItems as $name => $url) {
$class = 'default';
if (curPageName() == $name) {
$class.='.current';
}
echo "<li><a href='$url' class='$class'>$name</a></li>";
}
?>
</ul>
所以我在你的帮助下成功了!谢谢大家。特别感谢阿黛尔——尽管你在那里犯了一个错误,但我还是这样纠正了:
foreach($menuItems as $name => $url) {
$class = 'default';
if (curPageName() == $url) {
$class.=' '. current';
}
echo "<li><a href='$url' class='$class'>$name</a></li>";
}
太棒了!再次感谢!
<?php
$menuItems = array(
'page1' => '1.php',
'page2' => '2.php',
'page3' => '3.php',
'page4' => '4.php',
'page5' => '5.php',
);
$current_page = curPageName();
?>
<ul class="menu">
<?php
foreach ($menuItems as $name => $url) {
?>
<li><a href="<?php=$url?>"
<?php
if ($url == $current_page) {
?>
class="current"
<?php
}
?>
><?php=$name?></a></li>
<?php
}
?>
</ul>
为什么每次迭代都使用curPageName()?
您可以使用三元语法来解决问题。它由以下语法组成:
(if condition ? true : false)
因此,我们可以在foreach循环中使用这种方法来比较curPageName
和url
的答案。
$url == curPageName() ? 'current' : 'notCurrent'
现在你只需要用这个对你有利。
我喜欢printf的语法。因此代码更加干净。试试这个:
<?php
/**
* curPageName() is defined in question
* my_links() is a shortcut to array defined in question
*/
$template = "<li%s><a href="%s">%s</a></li>";
$links = my_links();
$current = curPageName();
print '<ul class="menu">';
foreach ($likns as $name => $url) {
$class = $current == $url ? ' class="current"' : '';
printf($template, $class, $url, $name);
}
print '</ul>';
$template
中的每个%s
项都将通过顺序变量进行更改。因此,如果您需要更改模板,代码是干净的,并且最容易维护。
或者,如果您想要另一种最简单的模板方式,请使用php模板语法。注意foreach语句之后使用的:
和使用的endforeach
。您可以看到,我使用的是echo <?=$var?>
的短代码,它比<?php echo $var ?>
更易于压缩。
<?php
/**
* curPageName() is defined in question
* my_links() is a shortcut to array defined in question
*/
$links = my_links();
$current = curPageName();
?>
<ul class="menu">
<?php foreach ($links as $name => $url): ?>
<li<?=($current == $url ? ' class="current"' : '')?>>
<a href="<?=$url?>"><?=$name?></a>
</li>
<?php endforeach ?>
</ul>