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