如何添加类=';主动';用php创建html菜单

如何添加类=';主动';用php创建html菜单,php,Php,我想把我的html导航放在一个单独的php文件中,这样当我需要编辑它时,我只需要编辑一次。当我想将活动类添加到活动页面时,问题就开始了 我有三页和一个普通文件 common.php: <!-- Navbar Active Class --> <?php $activeClass = '.nav-about > a'; ?> <style> <?php echo $activeClass; ?> { color: #fff !impo

我想把我的html导航放在一个单独的php文件中,这样当我需要编辑它时,我只需要编辑一次。当我想将活动类添加到活动页面时,问题就开始了

我有三页和一个普通文件

common.php:

<!-- Navbar Active Class -->
<?php $activeClass = '.nav-about > a'; ?>
<style>
<?php echo $activeClass; ?> {
    color: #fff !important;
}
</style>

index.php: 这三个页面都是相同的,只是每个页面上的$page不同

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

除非我把导航放在每一页上,否则这根本不起作用,但这样一来,将导航从所有页面中分离出来的整个目的就被破坏了

我想完成的事情可能吗?我做错了什么

谢谢


编辑:执行此操作时,li中的php代码似乎没有运行,它只是像html一样打印,我认为您需要将
$page='one'高于要求值一次。。否则我不理解这个问题。

为什么不为此导航创建一个函数或类,并将活动页面作为参数放在那里?这样,您可以将其称为,例如:

$navigation = new Navigation( 1 );


你为什么不这样做:

在以下页面中:

<html>
   <head></head>
   <body>
      <?php $page = 'one'; include('navigation.php'); ?>
   </body>
</html>

在navigation.php中

<div id="nav">
   <ul>
      <li>
          <a <?php echo ($page == 'one') ? "class='active'" : ""; ?> 
                 href="index1.php">Tab1</a>/</li>
      <li>
          <a <?php echo ($page == 'two') ? "class='active'" : ""; ?> 
                  href="index2.php">Tab2</a>/</li>
      <li>
          <a <?php echo ($page == 'three') ? "class='active'" : ""; ?> 
                  href="index3.php">Tab3</a>/</li>
   </ul>
</div>
if($page=="one"){$oneIsActive = 'class="active"';}else{ $oneIsActive=""; }
if($page=="two"){$twoIsActive = 'class="active"';}else{ $twoIsActive=""; }
if($page=="three"){$threeIsActive = 'class="active"';}else{ $threeIsActive=""; }

<ul class="nav">
  <li <?php echo $oneIsActive; ?>><a href="pageOne.php">One</a></li>
  <li <?php echo $twoIsActive; ?>><a href="pageTwo.php"><a href="#">Page 2</a></li>
  <li <?php echo $threeIsActive; ?>><a href="pageThree.php"><a href="#">Page 3</a></li>
</ul>

  • /
  • /
  • /
实际上,您可以控制在页面中放置导航的位置以及向其传递的参数

后期编辑:修复了语法错误

  • $page='one'
    应该出现在
    require_once()之前,而不是之后。After太迟了-已经需要代码,并且已经定义了
    $nav

  • 您应该使用
    include('header.php')
    包含('footer.php')而不是在早期设置
    $nav
    变量。这增加了灵活性

  • 做更多的功能。这样做确实让事情更容易理解:

    function maybe($x,$y){return $x?$y:'';}
    function aclass($k){return " class=\"$k\" "; }
    
    然后你可以这样写你的“条件”:

    <a href="..." <?= maybe($page=='one',aclass('active')) ?>> ....
    
    <?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>";
     ?>
    

    您的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;
     ?>
    
    它将做完全相同的事情,只是写得有些不同。遗传和字符串之间的另一个区别是,你可以从中间的字符串中逃脱,在遗传上你不能。使用此逻辑,您可以生成以下代码:

    <?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>";
     ?>
    
    
    
    然后,您可以像最初打算的那样将逻辑直接包含在字符串中


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

    我知道这是一个古老的问题,但这些答案都不是很好(sry ppl)

    最好的方法是(不写出复杂的类)将当前的$\u服务器['REQUEST\u URI']与链接的href进行比较。你快到了

    试试这个。(摘自)


    $nav=解决这个问题的一个非常简单的方法就是这样做

    <ul>
      <li class="<?php if(basename($_SERVER['SCRIPT_NAME']) == 'index.php'){echo 'current'; }else { echo ''; } ?>"><a href="index.php">Home</a></li>
      <li class="<?php if(basename($_SERVER['SCRIPT_NAME']) == 'portfolio.php'){echo 'current'; }else { echo ''; } ?>"><a href="portfolio.php">Portfolio</a></li>
      <li class="<?php if(basename($_SERVER['SCRIPT_NAME']) == 'services.php'){echo 'current'; }else { echo ''; } ?>"><a href="services.php">Services</a></li>
      <li class="<?php if(basename($_SERVER['SCRIPT_NAME']) == 'contact.php'){echo 'current'; }else { echo ''; } ?>"><a href="contact.php">Contact</a></li>
      <li class="<?php if(basename($_SERVER['SCRIPT_NAME']) == 'links.php'){echo 'current'; }else { echo ''; } ?>"><a href="links.php">Links</a></li>
    </ul>
    
      调用common.php
      .ddsmoothmenu ul li{float:左;padding:0 20px;}
      .ddsmoothmenu ul li a{显示:块;
      填充:40px 15px 20px 15px;
      颜色:#4b4b;
      字体大小:13px;
      字体系列:“开放式Sans”、Arial、Sans serif;
      文本对齐:右对齐;
      文本转换:大写;
      左边距:1px;颜色:#fff;背景:#000;}
      .current.test{背景:#2767A3;颜色:#fff;}
      

        我使用的解决方案如下所示,允许您设置每个php页面的活动类

        我使用
        .nav-x
        (nav-about,此处)。

      • 在每页顶部(此处为about.php):

        <!-- Navbar Active Class -->
        <?php $activeClass = '.nav-about > a'; ?>
        
        <style>
        <?php echo $activeClass; ?> {
            color: #fff !important;
        }
        </style>
        
        
        
        其他地方(header.php/index.php):

        <!-- Navbar Active Class -->
        <?php $activeClass = '.nav-about > a'; ?>
        
        <style>
        <?php echo $activeClass; ?> {
            color: #fff !important;
        }
        </style>
        
        
        {
        颜色:#fff!重要;
        }
        
        例如,只需更改每页
        .nav about>a
        .nav forum>a


        如果您希望每个导航项目有不同的样式(颜色等),只需将内联样式附加到该页面,而不是索引/页眉页面。将页面与导航栏分开

        pageOne.php:

        $page="one";
        include("navigation.php");
        
        navigation.php

        <div id="nav">
           <ul>
              <li>
                  <a <?php echo ($page == 'one') ? "class='active'" : ""; ?> 
                         href="index1.php">Tab1</a>/</li>
              <li>
                  <a <?php echo ($page == 'two') ? "class='active'" : ""; ?> 
                          href="index2.php">Tab2</a>/</li>
              <li>
                  <a <?php echo ($page == 'three') ? "class='active'" : ""; ?> 
                          href="index3.php">Tab3</a>/</li>
           </ul>
        </div>
        
        if($page=="one"){$oneIsActive = 'class="active"';}else{ $oneIsActive=""; }
        if($page=="two"){$twoIsActive = 'class="active"';}else{ $twoIsActive=""; }
        if($page=="three"){$threeIsActive = 'class="active"';}else{ $threeIsActive=""; }
        
        <ul class="nav">
          <li <?php echo $oneIsActive; ?>><a href="pageOne.php">One</a></li>
          <li <?php echo $twoIsActive; ?>><a href="pageTwo.php"><a href="#">Page 2</a></li>
          <li <?php echo $threeIsActive; ?>><a href="pageThree.php"><a href="#">Page 3</a></li>
        </ul>
        

        只需抓取$title变量并将其放在“title”标记之间。虽然我将它发送到导航栏上方的标题页。

        您可以使用此PHP,希望它能有所帮助

        <?php if(basename($_SERVER['PHP_SELF'], '.php') == 'home' ) { ?> class="active" <?php } else { ?> <?php }?>
        
        class=“活动”
        
        因此,列表如下所示

        <ul>
          <li <?php if( basename($_SERVER['PHP_SELF'], '.php') == 'home' ) { ?> class="active" <?php } else { ?> <?php }?>><a href="home"><i class="fa fa-dashboard"></i> <span>Home</span></a></li>
          <li <?php if( basename($_SERVER['PHP_SELF'], '.php') == 'listings' ) { ?> class="active" <?php } else { ?> <?php }?>><a href="other"><i class="fa fa-th-list"></i> <span>Other</span></a></li>
        </ul>
        
          > >
        
        
        嗨!如果我在require_之前或之后放置$page,则没有区别。它仍然打印相同的内容:
        • /
        • /ul>PHP未在herdeoc字符串中解析。啊,等等,我忽略了一些东西。您的整个代码都在
          中。首先,PHP不会在heredoc字符串(仅变量)中解析,其次,结束标识符(即EOD)必须位于行的开头。是的,很抱歉,我知道这一点,我认为这样读会更容易。EOD在我的代码行的开头,这不是问题所在。我的问题是,它打印的是EOD中的内容,也是php。打印php的原因是语法错误:应该比较您的代码和his(虽然他使用heredoc语法有问题,但效果很好),我更愿意在代码中查看his。变量在页面顶部声明,变量用于放置导航。简单的格式问题,但个人偏好。无论如何,虽然你的答案是好的,但它
          
          <ul>
            <li <?php if( basename($_SERVER['PHP_SELF'], '.php') == 'home' ) { ?> class="active" <?php } else { ?> <?php }?>><a href="home"><i class="fa fa-dashboard"></i> <span>Home</span></a></li>
            <li <?php if( basename($_SERVER['PHP_SELF'], '.php') == 'listings' ) { ?> class="active" <?php } else { ?> <?php }?>><a href="other"><i class="fa fa-th-list"></i> <span>Other</span></a></li>
          </ul>
          
          <a href="store/index" <?php if($_SERVER['REQUEST_URI'] == '/store/index') { ?>class="active"<?php } ?> > Link </a>
          <a href="account/referral" <?php if($_SERVER['REQUEST_URI'] == '/account/referral') { ?>class="active"<?php } ?> > Link </a>