如何设置'active'类转换为菜单项


How do I set an 'active' class to a menu item using PHP?

我想为当前活动页面设置class="active",但我无法让它工作。每次在锚和列表标签中包含<?php echo ($page == 'home') ? 'class="current"' : '';?>时,我都会得到相同的错误:

解析错误:语法错误,意外的'home' (T_STRING),期望','或';'在C:'Users'Standard'Desktop'Test'includes'top.php中的第18行

我只是不知道我现在做错了什么…在过去的3个小时里,我一直在研究和寻找答案,但仍然无法解决它。我总是遇到语法错误。(

这是我当前的代码:

<?php
echo '
    <div class="top-nav-bg">
        <div class="top-nav container">
            <div class="row">
                <div class="top-nav sixteen columns">
                    <ul>
                        <li><a <?php echo ($page == 'home') ? 'class="active"' : '';?> href="/index.php">Home</a></li>
                        <li><a href="/about-us/">About Us</a></li>
                        <li><a href="/our-services/">Our Services</a></li>
                        <li><a href="/products/">Products</a></li>
                        <li><a href="/contact-us/">Contact Us</a></li>
                    <ul>
                </div>
            <div>
        </div>
    </div>
' ; >?

它被包含在我的index.php文件中:

<!DOCTYPE html>
  <html lang="en">
   <head>
    <?php include ('/includes/header.php'); ?>
    <title>Home - Test</title>
  </head>
  <body id="homepage">
    <?php $page = 'home'; include ('/includes/top.php') ;?>
</body>
</html>

你已经在PHP内部,所以你的<?php echo是不必要的。应该是:

<?php
echo '
    <div class="top-nav-bg">
        <div class="top-nav container">
            <div class="row">
                <div class="top-nav sixteen columns">
                    <ul>
                        <li><a '.($page == 'home') ? 'class="active"' : ''.' href="/index.php">Home</a></li>
                        <li><a href="/about-us/">About Us</a></li>
                        <li><a href="/our-services/">Our Services</a></li>
                        <li><a href="/products/">Products</a></li>
                        <li><a href="/contact-us/">Contact Us</a></li>
                    <ul>
                </div>
            <div>
        </div>
    </div>
' ; 
?>

没有代表评论,所以我会回答。

你只输出一个变量,所以你不需要在php中有所有的html。另外,通过取出它,您不必担心剥离'"。此外,如果你使用一个好的IDE/编辑器,你会得到更好的语法高亮显示。

你可以这样做:

<div class="top-nav-bg">
    <div class="top-nav container">
        <div class="row">
            <div class="top-nav sixteen columns">
                <ul>
                    <li><a <?= ($page === 'home') ? 'class="active"' : ''; ?> href="/index.php">Home</a></li>
                    <li><a href="/about-us/">About Us</a></li>
                    <li><a href="/our-services/">Our Services</a></li>
                    <li><a href="/products/">Products</a></li>
                    <li><a href="/contact-us/">Contact Us</a></li>
                <ul>
            </div>
        <div>
    </div>
</div>

注意<?=的使用,这是<?php echo的简写。只有php 5.4+才会接受它们,所以如果你不确定这可能是一个问题,请使用<?php echo