你的index.php代码是正确的。我在下面包含了common.php的更新代码,然后我会解释这些差异。
$class = ($page == 'one') ? 'class="active"' : '';
$nav = <<
EOD;
?>
第一个问题是你需要确保heredoc的结束声明 - EOD; - 根本没有缩进。如果它是缩进的,那么你将得到错误。
至于你的问题是没有在heredoc语句中运行的PHP代码,那是因为你看错了。使用heredoc语句与关闭PHP标记不同。因此,您无需尝试重新打开它们。那对你没什么用。 heredoc语法的工作方式是打开和关闭之间的所有内容都与写入完全一样,但变量除外。这些被替换为相关值。我从heredoc中删除了你的逻辑,并使用了一个三级函数来确定类,以便更容易看到(虽然我不相信任何逻辑语句都可以在heredoc中工作)
要理解heredoc语法,它与将它包含在双引号(“)中相同,但不需要转义。所以你的代码也可以像这样编写:
$class = ($page == 'one') ? 'class="active"' : '';
$nav = "
";?>
它会做同样的事情,只是写得有些不同。 heredoc和字符串之间的另一个区别是你可以从中间的字符串中逃脱,你不能在heredoc中。使用此逻辑,您可以生成以下代码:
$nav = "
";?>
然后,您可以将逻辑直接包含在字符串中,就像您最初预期的那样。
无论您选择哪种方法,脚本的性能都会产生很小的(如果有的话)差异。它主要归结为偏好。无论哪种方式,您都需要确保了解每种方法的工作原理。
你为什么不这样做:
在页面中:
在navigation.php中
href="index1.php">Tab1/
href="index2.php">Tab2/
href="index3.php">Tab3/
实际上,您可以控制导航页面中的位置以及传递给它的参数。
稍后编辑:修复语法错误。
解决此问题的一个非常简单的方法就是执行此操作。
哪个会输出
我想你需要把你的$page = 'one';放在require_once之上..否则我不明白这个问题。
我知道这是旧的,但这些答案都不是很好(sry ppl)
最好的方法(不写出复杂的类)是将当前的$ _SERVER ['REQUEST_URI']与链接的href进行比较。你快到了。
试试这个。 (摘自http://ma.tt/scripts/intellimenu/)
$nav = <<
EOD;
$lines = explode("n", $nav);
foreach($lines as $line)
{
if(preg_match('/href="([^"]+)"/', $line, $url)) {
if(substr($_SERVER['REQUEST_URI'], 0, 5) == substr($url[1], 0, 5)) {
}
}
echo $line . "n";
}
为什么不为此导航创建函数或类并将活动页面作为参数放置?这样你就可以称之为,例如:
$navigation = new Navigation( 1 );
要么
$navigation = navigation( 1 );
$page='one'应该在你之前require_once()之后发生。太晚了 - 代码已经被要求了,并且已经定义了$nav。
您应该使用include('header.php');和include('footer.php');而不是在早期设置$nav变量。这增加了灵活性。
做更多功能。这样的事情真的让事情更容易理解:
function maybe($x,$y){return $x?$y:'';}
function aclass($k){return " class="$k" "; }
然后你可以像这样写下你的“条件”:
CALL common.php
.ddsmoothmenu ul li{float: left; padding: 0 20px;}
.ddsmoothmenu ul li a{display: block;
padding: 40px 15px 20px 15px;
color: #4b4b4b;
font-size: 13px;
font-family: 'Open Sans', Arial, sans-serif;
text-align: right;
text-transform: uppercase;
margin-left: 1px; color: #fff; background: #000;}
.current .test{ background: #2767A3; color: #fff;}
add each page
- href="user.php" >Article
- href="newarticle.php">New Articles
我正在使用的解决方案如下,允许您设置每个PHP页面的活动类。
给每个菜单项一个独特的类,我使用.nav-x(nav-about,here)。
在每个页面的顶部(about.php这里):
<?php $activeClass = '.nav-about > a'; ?>
其他地方(header.php / index.php):
<?php echo $activeClass; ?> {
color: #fff !important;
}
例如,只需更改每页.nav-about > a,.nav-forum > a。
如果您想为每个导航项目设置不同的样式(颜色等),只需将内联样式附加到该页面而不是索引/标题页面。
从导航栏中分离您的页面。
pageOne.php:
$page="one";
include("navigation.php");
navigation.php
if($page=="one"){$oneIsActive = 'class="active"';}else{ $oneIsActive=""; }
if($page=="two"){$twoIsActive = 'class="active"';}else{ $twoIsActive=""; }
if($page=="three"){$threeIsActive = 'class="active"';}else{ $threeIsActive=""; }
我发现我也可以用这种方法设置我的页面标题。
$page="one";
$title="This is page one."
include("navigation.php");
然后抓住$ title var并将其放在“title”标签之间。虽然我将它发送到导航栏上方的标题页。
你可以使用这个PHP,希望它有所帮助。
<?php if(basename($_SERVER['PHP_SELF'], '.php') == 'home' ) { ?> class="active" <?php } else { ?> <?php }?>
所以列表如下所示。