PHP - 将网站拆分为多个文件

3

我目前正在开发一个网站,想学习更多相关知识,但我无法解决一个问题,也不知道该搜索什么,我没找到任何答案。

基本上,我有一个导航栏、一个内容框和一个页脚。我想将网站分成三个文件。这样,例如只需编辑一个文件即可编辑所有页面上的导航栏中的所有链接。

我可以通过放置以下代码来简单实现:

<?php include('navigation.php'); ?>

我想要放置的地方。 但是我的问题在于:每个页面都应该使用不同的“活动”页面或选项卡,并在导航栏中突出显示它。

我的导航栏看起来像这样: 首页 | 新闻 | 关于我们 | 联系我们

当我点击“新闻”并进入新闻页面时,它应该在导航栏中被突出显示(通过CSS)。但是,当我将导航栏放在一个文件中时,它会在所有页面上高亮显示。这是我目前遇到的问题,我不知道PHP是否可以实现这一点?

感谢任何帮助!谢谢。


仅使用PHP?是的 - 利用会话变量的创造性使用。 - Jay Blanchard
那会是什么样子呢?我没有找到任何关于这个的例子。@JayBlanchard - TyhaiMahy
您可以在会话中存储一个变量来指示位置,接着使用该变量来调用该部分的适当CSS。 - Jay Blanchard
我不认为需要使用会话,你不能只是检测页面上的导航并将其与菜单项匹配吗?使用包含文件没有什么特别之处。 - user557846
啊哈!我从未想过那个!非常聪明!谢谢 @JayBlanchard 的提示。 - TyhaiMahy
3个回答

3

最简单的方法:设置一个全局变量来表示你所在的位置,并让导航菜单检查该变量:

例如:

index.php:

<?php
$PAGE = 'home';
include('navigation.php');

navigation.php:

<?php

...
if (isset($PAGE) && ($PAGE == 'home')) {
    .... output "home" link with you-are-here highlight
} else {
    ... output regular home link.
}

非常好!谢谢!不过我有一个问题:如果用户打开了两个浏览器标签,分别打开了两个不同的链接,会发生什么?$PAGE 只包含最近访问的那个吗?还是导航栏中会突出显示两个链接? - TyhaiMahy
每个“制表符”就像另一个国家的新用户。 - user557846
PHP在没有请求时不会持续运行。在PHP中,每个页面请求都是完全独立的。您可能会有两个不同的$PAGE环绕在PHP构建各个页面的瞬间,但在PHP中,所有内容都会消失。只有在将数据存储在会话或其他外部系统中时,您才会在两个页面之间出现冲突。 - Marc B

3

您可以检查当前的URL,并相应地为您的菜单项添加活动类。

<?php
    $url = basename($_SERVER['PHP_SELF']);    
?>

然后当您生成菜单链接时,可以像这样:

<li class='<?php echo ($url == "about.php") ? "active" : ""?>' >About</li>

大致如此。


0
p URL句柄获取页面。检查是否允许,否则返回主页。
然后检查菜单中当前是否激活该页面,如果是,则添加active类。
<?php
// Get the page from the url, example: index.php?p=contact
$page = $_GET['p'];

// Whitelist pages for safe including
$whitelist = array('home', 'news', 'about', 'contact');

// Page not found in whitelist
if (!in_array($page, $whitelist)):
    $page = 'home';
endif;

include('header.php');
include('navigation.php');
include($page . '.php'); // Include page according to url
include('footer.php');
?>


<ul>
    <li>
        <a href="index.php?p=home" class="<?php if ($page === 'home'): ?>active<?php endif; ?>">
            Home
        </a>
    </li>
    <li>
        <a href="index.php?p=news" class="<?php if ($page === 'news'): ?>active<?php endif; ?>">
            News
        </a>
    </li>
    <li>
        <a href="index.php?p=about" class="<?php if ($page === 'about'): ?>active<?php endif; ?>">
            About
        </a>
    </li>
    <li>
        <a href="index.php?p=contact" class="<?php if ($page === 'contact'): ?>active<?php endif; ?>">
            Contact
        </a>
    </li>
</ul>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接