包含php文件的主菜单

时间:2014-06-24 12:33:07

标签: php jquery twitter-bootstrap-3

我正在开发基于twitter-bootstrap的网站,并决定将页眉和页脚作为单独的php文件保存在网站的每个子页面中。所有工作都完美无缺,直到我想将“活动”类添加到我当前的选择(即用户当前所在的页面)。

我发现这个脚本应该可以正常工作:

$("a").click(function() {        
    $(".active").removeClass("active");
    $(this).parent("div").addClass("active");
});

但我意识到它只适用于瞬间,而不是我们回到默认 - 没有选择的菜单。我检查了页面html,并没有添加类。我意识到这是因为在重定向到新url之后,正在加载新的header.php - 因此不会应用任何选择。

有关如何绕过它的任何建议?

2 个答案:

答案 0 :(得分:1)

这种情况有一种解决方案。 无论何时呈现页面,都要包含该页面的标志名称 并在头文件中使用该标志条件,

例如你有一个主页,所以在渲染到主页时,将home_page_flag传递给True 或者其中的任何值,只需在标题页中添加一个条件,如果它是标题,则在其中添加活动类。

<ul>
  <li <?php if ($_SERVER['PHP_SELF'] == '[this_link]') { ?>class="active"<?php } ?>>
    <a href="[this_link]">Home</a>
  </li>
</ul>

语法可能是错误的,因为我不是一个PHP人,这个登录应该可以使用任何语言 由你友好的邻居PHP家伙修复 - 请更改实例[this_link]与您的实际href文本

答案 1 :(得分:0)

通过执行如下测试来检查从服务器全局返回的内容:

<?php echo $_SERVER['PHP_SELF']; ?>

即使您在localhost上运行,只要您的本地服务器运行php 4或更高版本,这应该返回一些东西。

我的猜测是,你的评论中所说的“不工作”的原因是,这会返回执行脚本的网页的网址部分之后的所有内容(即,不是你的包含但是将返回给用户的实际页面)。例如, http://example.com/foo/bar.php 会返回 /foo/bar.php 。因此,它完全有可能不等于锚标记中的href。例如,如果您从foo / foo.php链接到页面/foo/bar.php,则可以使用像href =“bar.php”这样的相对路径。因此,如果检查$ _SERVER ['PHP_SELF']是否等于链接href,即使它们是同一页面,它们也不会相等。有意义吗?

我将如何在PHP中执行此操作:

您没有显示您的网站或您的html的结构,所以这个例子假设有两个页面(index.php和contact.php)都在服务器的根文件夹中。它还假设菜单的html采用包含每个菜单项的锚标记的div形式。

<?php
$currentpage = $_SERVER['PHP_SELF'];
$home = "index.php";
$contact = "contact.php";
?>

<div class="col-sm-2<?php echo ($currentpage == '/'.$home) ? ' active' : ''; ?>">
    <a href="<?php echo $home; ?>">Home</a>
</div>
<div class="col-sm-2<?php echo ($currentpage == '/'.$contact) ? ' active' : ''; ?>">
    <a href="<?php echo $contact; ?>">Contact</a>
</div> 

那么,这是做什么的?

首先有一些变量:一个用于使用$ _SERVER ['PHP_SELF']的$ currentpage,另一个用于我菜单中的页面链接。

然后在将要添加活动类的类的标记内部,我将使用三元运算符 - 如果您不熟悉它们,那就像if语句的简写一样。它的语法如下:(要检查的是真正的)? 如果是真的该怎么办如果;该怎么办?

在这种情况下,我将$ currentpage值与前面斜杠前面的$ home变量的值进行比较(因此它与$ _SERVER ['PHP_SELF']返回页面路径的方式相匹配)。如果这是真的,我会回显一个空格加上活动这个词。如果它不是真的,并且这是重要的,我只用一个空字符串就什么都不回应。与if语句相比,这是三元运算符的特殊之处,你必须在'else'的情况下包含要做的事情。

这几乎就是全部。唯一的另一件事是我在href属性中使用了页面url变量。

好的,这就是我要做的,但我只想提一下,还有很多其他方法可以做到这一点。例如,你可以在javascript或jQuery中做同样的事情。在这种情况下,您只需在每个使用window.location.pathname和switch语句的页面上包含一个脚本,以确定应该将哪个链接添加到其中。