当前位置: 首页 > 面试题库 >

如何使用PHP将class ='active'添加到html菜单

吕子真
2023-03-14
问题内容

我想将html导航放到一个单独的php文件中,因此当我需要对其进行编辑时,只需要对其进行一次编辑即可。当我要将活动类添加到活动页面时,问题就开始了。

我有三页和一个普通文件。

common.php:

<?php 
$nav = <<<EOD
   <div id="nav">
        <ul>
           <li><a <? if($page == 'one'): ?> class="active"<? endif ?> href="index.php">Tab1</a>/</li>
           <li><a href="two.php">Tab2</a></li>
           <li><a href="three.php">Tab3</a></li>
       </ul>
    </div>
EOD;
?>

index.php: 除了每页的$ page不同之外,所有三个页面都是相同的。

  <?php
     $page = 'one';      
     require_once('common.php');
    ?>
    <html>
       <head></head>
       <body>
          <?php echo $nav; ?>
       </body>
    </html>

除非我在每页上放置导航,否则这根本行不通,但是将导航与所有页面分开的整个目的就毁了。

我想实现的目标甚至有可能吗?我究竟做错了什么?

谢谢

编辑:这样做时,li内的php代码似乎没有运行,它只是像是html一样被打印


问题答案:

您的index.php代码正确。我将在下面包含common.php的更新代码,然后我将解释它们之间的区别。

<?php 
     $class = ($page == 'one') ? 'class="active"' : '';
     $nav = <<<EOD
        <div id="nav">
            <ul>
               <li><a $class href="index.php">Tab1</a>/</li>
               <li><a href="two.php">Tab2</a></li>
               <li><a href="three.php">Tab3</a></li>
           </ul>
        </div>
 EOD;
 ?>

第一个问题是,您需要确保heredoc的结束声明EOD;-根本没有缩进。如果缩进,则会出现错误。

至于您的PHP代码未在heredoc语句中运行的问题,那是因为您看错了。使用heredoc语句与关闭PHP标记不同。因此,您无需尝试重​​新打开它们。那对您无济于事。Heredoc语法的工作方式是,打开和关闭之间的所有内容均按所显示的完全一样,但变量除外。这些将替换为关联的值。我从heredoc中删除了您的逻辑,并使用一个三级函数来确定该类,以使其更易于查看(尽管我不相信任何逻辑语句仍然可以在heredoc中使用)

要了解Heredoc语法,它与在双引号(“)中包含它相同,但是不需要转义。因此,您的代码也可以这样编写:

<?php 
     $class = ($page == 'one') ? 'class="active"' : '';
     $nav = "<div id=\"nav\">
            <ul>
               <li><a $class href=\"index.php\">Tab1</a>/</li>
               <li><a href=\"two.php\">Tab2</a></li>
               <li><a href=\"three.php\">Tab3</a></li>
           </ul>
        </div>";
 ?>

它将做完全相同的事情,只是编写方式有所不同。Heredoc和字符串之间的另一个区别是,您可以在中间无法进入Heredoc的字符串中跳出。使用此逻辑,可以生成以下代码:

<?php 
     $nav = "<div id=\"nav\">
            <ul>
               <li><a ".(($page == 'one') ? 'class="active"' : '')." href=\"index.php\">Tab1</a>/</li>
               <li><a href=\"two.php\">Tab2</a></li>
               <li><a href=\"three.php\">Tab3</a></li>
           </ul>
        </div>";
 ?>

然后,您可以像最初想要的那样直接在字符串中包含逻辑。

无论选择哪种方法,脚本的性能差异都很小(如果有的话)。它主要归结为偏好。无论哪种方式,您都需要确保了解它们的工作原理。



 类似资料:
  • 问题内容: 动态标题,使用PHP将CSS类更改为活动目录(目录) 我希望标记的类在活动目录下更改…现在,每个指南都向我展示了当您的页面等于它时如何执行此操作,但是我想根据目录上的内容更改它 网址设置: 该URL是教程的页面。…在“ tutorials”目录下,在“CSS”类别目录下,而不是页面标题(所有这些目录都不是真实的,都是从.htaccess重写的)。不相关的] 导航设置: 问题答案: 想通

  • 问题内容: 我需要在页面上活动任务的菜单链接上添加类。我正在使用localhost,以下是一些示例URL: 菜单的结构: 问题答案: 您可以使用jQuery遍历所有链接,并将它们的URL与进行比较。这是一个例子:

  • 问题内容: 使用maven-jar-plugin时, 我想向Manifest.mf添加条目, 因此它将包含: Class-Path:。 当我将此条目添加到Pom时: 它将创建具有所有依赖项的Class-Path,例如 : Class-Path:。jar1name.jar jar2name.jar等 不仅仅是 类路径:。 有没有一种方法可以避免maven将所有jar名称添加到Class-Path?

  • 问题内容: 我无法在HTML页面中使用PHP。例如,。我试过同时使用: 和 这些都不起作用。我的服务器提供PHP,当我使用扩展名时,它可以正常工作。这是一个问题还是我必须更改中的首选项? 问题答案: 您无法在.html文件中运行PHP,因为除非您告知服务器,否则服务器不会将其识别为有效的PHP扩展名。为此,您需要在根Web目录中创建一个.htaccess文件,并将以下行添加到其中: 这将告诉Apa

  • 我们正在按照“守护程序或服务器应用程序到Web API”模型对C#MVC Web API进行身份验证,我们希望向Azure Active Directory发布的令牌添加一些自定义声明,以便在Web API端进行验证。 我们最初的想法是通过编辑清单将这些可选声明添加到守护进程应用程序中,但是我们找不到一个好的示例,并且在保存它时会出错。 有没有人可以为我们提供一个如何添加此自定义声明的好例子? 或

  • 我向每个Wordpress菜单项添加了类,但它们没有出现在代码中。 我的菜单: 我的职能。php包括 所以我有 但是没有我在Wordpress管理菜单中添加的任何类。为什么呢?