很抱歉,如果这个措辞令人困惑 - 我对PHP很新,因为我正在为我的小型组织设计一个网站,并且只有以前的CSS和HTML经验。
基本上,我使用PHP include在网站中包含页眉和页脚,这样只需要一次更新即可更改所有链接,因为它是一个非常大的网站,有很多页面需要永远更新在HTML中。
我现在遇到的问题是,由于php include只有一个页面,无论你在哪个页面,标题菜单中“活动”并突出显示为蓝色的类别是我最初复制的那个菜单来自创建.php文件。显然,我希望它是你实际所处的菜单类别,而不是每次都是同一个菜单类别。我确信在PHP中有一种非常简单的方法可以做到这一点,但我找不到任何东西,因为我不确定如何在搜索时提出问题。提前感谢任何可以提供帮助的人!
答案 0 :(得分:0)
最简单的方法,使用全局变量和大量条件逻辑:
您网站上的任何文件:
<?php
$current_page = 'name of page here';
include('menu.php');
... page content/logic here ...
menu.php
<?php
if (!isset($current_page)) { $current_page = 'home'; }
?>
<ul id="menu">
<li<?php ($current_page == 'home') : ' class="current"' : '' ?>>Home</li>
<li<?php ($current_page == 'foo') : ' class="current"' : '' ?>>foo</li>
etc...
</ul>
答案 1 :(得分:0)
我不知道您的菜单是什么样的,但您可以使用PHP_SELF测试当前页面
<?php
$urls = array('index.php', 'include7.php', 'about.php');
$current_page = basename($_SERVER['PHP_SELF']); // if for example you are in /folder/index.php ; the basename will output only 'index.php'
?>
<?php foreach ($urls as $url): ?>
<a href="<?=$url;?>" style="color: <?= ($url==$current_page) ? 'green' : 'red'?>"><?=$url;?></a>
<?php endforeach; ?>
在我的例子中,我在include7.php文件中,所以在输出中,只有它是绿色,其他2是红色。
答案 2 :(得分:0)
我喜欢这样做的方法根本不使用PHP逻辑。在每个页面中,将类添加到高级元素,例如body
:
<body class="home">
然后在菜单中,为每个菜单选项添加匹配的类名:
...
<li class="home"><a href="/home">Home</a></li>
<li class="whatever"><a href="/whatever">Whatever</a></li>
...
然后在CSS中:
body.home li.home a,
body.whatever li.whatever a
{
color: blue;
}
...或者你想要的任何风格,使用你喜欢的任何选择器,关键是CSS寻找匹配的主体和菜单项classname,因此只突出显示当前页面的项目。
这意味着没有任何PHP逻辑。创建新页面时,为其添加一个body类,并在菜单中添加一个匹配的条目,并将其添加到CSS中。
我倾向于在像你这样的情况下使用这种方法,当PHP没有被用作服务器端语言或CMS系统时,就像一个非常简单的模板构建器。它使服务器端代码非常小,与设置的其余部分相匹配。
答案 3 :(得分:0)
我会这样做:
1)从PHP中检测您所在的页面 2)更新页眉/页脚中依赖于您所在页面的部分
$_SERVER['PHP_SELF']
超全局变量将为您提供当前页面相对于站点根目录的路径。
例如,如果您的网页为http://whatever.site.com/about.php
,则会显示/about.php
。
这意味着您可以使用当前页面的名称作为键来更改通用页眉/页脚中的任何行为。
根据页面的存储方式,您可以轻松地合成当前页面的简单标识符(例如“索引”,“关于”,“联系人”等)。
然后,您可以将其放在全局$PAGE
变量中,以便您可以从PHP代码的任何位置识别当前页面。
如果根据您所在的页面需要更改某些项目(通常会突出显示标题中的当前页面),您可以通过选中$PAGE
<li class='.<?php echo $PAGE=='about' ? 'selected' : 'unselected' ?>about
<li class='.<?php echo $PAGE=='contact' ? 'selected' : 'unselected' ?>contact
您可能还希望减少冗余代码生成,例如:
<?php
function menu_items ()
{
global $PAGE;
foreach (array ("home", "about", "contact") as $page)
echo "<li class='.(($PAGE==$page) ? 'selected' : 'unselected')."'>$page";
}
?>
<!-- header menu -->
<ul><?php menu_items(); ?></ul>