主菜单包含php文件


Main menu in included php file

我在一个基于twitter引导的网站上工作,并决定将页眉和页脚作为单独的php文件包含在网站的每个子页面中。所有工作都很完美,直到我想添加"活动"类到我当前的选择(即。用户当前所在的页面)

我发现这个脚本应该工作得很好:

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

但我意识到它只工作了一瞬间,然后我们回到默认的无选择菜单。我检查了页面html和类没有添加。我意识到这是因为重定向到新的url后,新的header.php正在加载-因此没有选择应用。

有什么建议吗?

对于这种场景有一个解决方案。无论何时呈现该页,都要包含该页的标志名称并在头文件

中使用该标志条件

例如,你有一个主页,所以当渲染到主页时,传递一个home_page_flag为True或者其中的任何值,只要在header页中添加一个条件,如果它是header,并在其中添加活动类。

<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文本

检查从服务器全局返回的内容,只需执行如下测试:

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

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

我的猜测是它看起来"不工作"的原因。正如你的评论中所述,这将返回执行脚本的页面url的域名部分之后的一切(即,不是你的包含,而是将返回给用户的实际页面)。例如,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的结构,所以这个例子只是假设有2个页面(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语句的简写。它的语法看起来像:(要检查是否为真) ?如果不是 true;

在本例中,我将$currentpage值与前面有正斜杠的$home变量的值进行比较(因此它与$_SERVER['PHP_SELF']返回页面路径的方式相匹配)。如果是真的,我就回显一个空格加上active这个词。如果它不为真,并且这是重要的,则只回显一个空字符串,什么也不回显。与if语句相比,这是三元操作符的一个特殊之处,你必须包括在'else'情况下要做什么。

差不多就这些了。唯一的其他事情是我在href属性中使用了页面url变量。

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