考虑一下:
$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>
效果很好。但是现在我需要在当前页面上添加一个类.current。
要获取当前页面,我执行此操作:
<?php
function curPageName() {
return substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);
}
$curpage = curPageName();
?>
它也很有效。
所以我想问题是如何将$ curpage分配给...当前页面? :)
谢谢。 亚历
答案 0 :(得分:1)
简单,在你的循环中,检查是否$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>
答案 1 :(得分:1)
<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>
答案 2 :(得分:0)
<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>
答案 3 :(得分:0)
所以我在你的帮助下工作了!多谢你们。 特别感谢Adel - 尽管你在那里遇到了一个错误,我还是这样修理了它:
foreach($menuItems as $name => $url) {
$class = 'default';
if (curPageName() == $url) {
$class.=' \. current';
}
echo "<li><a href='$url' class='$class'>$name</a></li>";
}
真棒!再次感谢!
答案 4 :(得分:0)
<?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()?
答案 5 :(得分:0)
您可以使用三元语法来解决您的问题。它包含以下语法:
(if condition ? true : false)
因此,我们可以在您的回答中使用这种方式,将curPageName
与foreach循环中的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>';
%s
中的每个$template
项都会被顺序变量更改。因此,如果您需要更改模板,则代码是干净的,而且最简单,以提供维护。
或者,如果您想要另一种最简单的模板方式,请使用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>