Как настроить таргетинг / выделить элемент меню по имени файла?

Я хочу получить конец URL с помощью PHP. Как только конец 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>

1

Решение

Всякий раз, когда я вижу большой блок регистра переключателей, я всегда предлагаю поисковый массив. Это действительно облегчит ваш код и сделает его обновление быстрым. Это также устраняет любые опечатки и ненужные пробелы, которые вы можете по ошибке добавить.

Объявите массив с именами файлов и текстом и запустите цикл для его вывода на экран.

Код: (демонстрация)

// $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 значение, передаваемое циклом, совпадает с $filename доставлено basename() затем активируйте.
  • В противном случае, если текущий $file значение contact.php (последний в списке) и $filename не находится в массиве поиска, затем активируйте.
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]