如何 target/highlight 基于文件名的菜单元素?
How to target/highlight a menu element based on filename?
我想使用 PHP 获取 URL 的结尾。一旦 URL 的末尾被提取出来,我就想使用该信息来定位菜单中的相应元素。突出显示的元素将指示用户当前所在的页面。我提供的代码确实有效,但我想知道是否有人在这个问题上有其他解决方法。
<?php
* Purpose: Get the url in order to define the what link is active on the
navbar.
*/
$Home="";
$AboutUs="";
$Coupons="";
$Contact="";
$Services="";
$Appointment="";
$Quote="";
Switch(basename($_SERVER['SCRIPT_FILENAME'])) {
case "index.php": $Home ="class=\"active\"";
break;
case "about.php": $AboutUs ="class=\"active\"";
break;
case "services.php": $Services ="class=\"active\"";
break;
case "coupons.php": $Coupons ="class=\"active\"";
break;
case "appointment.php": $Appointment ="class=\"active\"";
break;
case "quote.php": $Quote ="class=\"active\"";
break;
default: $Contact ="class=\"active\"";
}
?>
<ul>
<li <?php echo $Home; ?>><a href="index.php">Home</a></li>
<li <?php echo $AboutUs; ?>><a href="about.php">About Us</a> </li>
<li <?php echo $Services; ?>><a href="services.php">Services</a></li>
<li <?php echo $Coupons; ?>><a href="coupons.php">Coupons</a></li>
<li <?php echo $Appointment; ?>><a href="appointment.php">Appointment</a</li>
<li <?php echo $Quote; ?>><a href="quote.php"> Quote</a></li>
<li <?php echo $Contact; ?>><a href="contact.php">Contact Us</a></li>
</ul>
每当我看到一个大的 switch case 块时,我总是建议使用查找数组。这将真正加强您的代码并使其更新变得轻而易举。它还消除了您可能错误添加的任何拼写错误和不需要的空格。
声明数组,其中包含文件名和文本以及 运行 将其打印到屏幕的循环。
代码:(Demo)
// $filename=basename($_SERVER['SCRIPT_FILENAME']);
$filename='about.php'; // test with this
//$filename='contact.php'; // test with this
//$filename='fish.php'; // test with this
$listitems=[
'index.php'=>'Home',
'about.php'=>'About Us',
'services.php'=>'Services',
'coupons.php'=>'Coupons',
'appointment.php'=>'Apointment',
'quote.php'=>'Quote',
'contact.php'=>'Contact Us'
];
echo '<ul>';
foreach($listitems as $file=>$text){
echo '<li';
if($file==$filename || ($file=='contact.php' && !isset($listitems[$filename]))){
echo ' class="active"';
}
echo "><a href=\"$file\">$text</a>";
echo '</li>';
}
echo '</ul>';
输出:
<ul>
<li><a href="index.php">Home</a></li>
<li class="active"><a href="about.php">About Us</a></li>
<li><a href="services.php">Services</a></li>
<li><a href="coupons.php">Coupons</a></li>
<li><a href="appointment.php">Apointment</a></li>
<li><a href="quote.php">Quote</a></li>
<li><a href="contact.php">Contact Us</a></li>
</ul>
条件说:
- 如果循环传递的当前
$file
值与 basename()
传递的 $filename
值相同,则激活。
- 否则,如果当前
$file
值为contact.php
(列表中的最后一个)并且$filename
不在查找数组中,则激活。
我想使用 PHP 获取 URL 的结尾。一旦 URL 的末尾被提取出来,我就想使用该信息来定位菜单中的相应元素。突出显示的元素将指示用户当前所在的页面。我提供的代码确实有效,但我想知道是否有人在这个问题上有其他解决方法。
<?php
* Purpose: Get the url in order to define the what link is active on the
navbar.
*/
$Home="";
$AboutUs="";
$Coupons="";
$Contact="";
$Services="";
$Appointment="";
$Quote="";
Switch(basename($_SERVER['SCRIPT_FILENAME'])) {
case "index.php": $Home ="class=\"active\"";
break;
case "about.php": $AboutUs ="class=\"active\"";
break;
case "services.php": $Services ="class=\"active\"";
break;
case "coupons.php": $Coupons ="class=\"active\"";
break;
case "appointment.php": $Appointment ="class=\"active\"";
break;
case "quote.php": $Quote ="class=\"active\"";
break;
default: $Contact ="class=\"active\"";
}
?>
<ul>
<li <?php echo $Home; ?>><a href="index.php">Home</a></li>
<li <?php echo $AboutUs; ?>><a href="about.php">About Us</a> </li>
<li <?php echo $Services; ?>><a href="services.php">Services</a></li>
<li <?php echo $Coupons; ?>><a href="coupons.php">Coupons</a></li>
<li <?php echo $Appointment; ?>><a href="appointment.php">Appointment</a</li>
<li <?php echo $Quote; ?>><a href="quote.php"> Quote</a></li>
<li <?php echo $Contact; ?>><a href="contact.php">Contact Us</a></li>
</ul>
每当我看到一个大的 switch case 块时,我总是建议使用查找数组。这将真正加强您的代码并使其更新变得轻而易举。它还消除了您可能错误添加的任何拼写错误和不需要的空格。
声明数组,其中包含文件名和文本以及 运行 将其打印到屏幕的循环。
代码:(Demo)
// $filename=basename($_SERVER['SCRIPT_FILENAME']);
$filename='about.php'; // test with this
//$filename='contact.php'; // test with this
//$filename='fish.php'; // test with this
$listitems=[
'index.php'=>'Home',
'about.php'=>'About Us',
'services.php'=>'Services',
'coupons.php'=>'Coupons',
'appointment.php'=>'Apointment',
'quote.php'=>'Quote',
'contact.php'=>'Contact Us'
];
echo '<ul>';
foreach($listitems as $file=>$text){
echo '<li';
if($file==$filename || ($file=='contact.php' && !isset($listitems[$filename]))){
echo ' class="active"';
}
echo "><a href=\"$file\">$text</a>";
echo '</li>';
}
echo '</ul>';
输出:
<ul>
<li><a href="index.php">Home</a></li>
<li class="active"><a href="about.php">About Us</a></li>
<li><a href="services.php">Services</a></li>
<li><a href="coupons.php">Coupons</a></li>
<li><a href="appointment.php">Apointment</a></li>
<li><a href="quote.php">Quote</a></li>
<li><a href="contact.php">Contact Us</a></li>
</ul>
条件说:
- 如果循环传递的当前
$file
值与basename()
传递的$filename
值相同,则激活。 - 否则,如果当前
$file
值为contact.php
(列表中的最后一个)并且$filename
不在查找数组中,则激活。