【问题标题】:How To Properly Structure php Navigation Bar如何正确构建 php 导航栏
【发布时间】:2014-03-24 07:57:47
【问题描述】:

我的根目录中有一个索引文件。

我有一个名为 pages 的目录。

导航栏在包含目录中。

如果我想在 index.php 以及位于 pages 目录中的每个 pages.php 中包含导航栏。构建此导航栏的正确方法是什么,以便 php 可以通过它所在的页面上下移动目录。

每个页面都被标识为

$page = currentPage

这是我当前的导航栏,位于包含目录中

<ul>
<?php if ($page == 'home') { ?><li class="active"><a href="index.php" class="active">Home</a></li>
<?php } else { ?><li><a href="../index.php">Home</a><?php } ?>

<?php if ($page == 'contact') { ?><li class="active"><a href="contact.php" class="active">Contact Us</a></li>
<?php } else { ?><li><a href="pages/contact.php">Contact Us</a><?php } ?>

<?php if ($page == 'services') { ?><li class="active"><a href="services.php" class="active">Services</a></li>
<?php } else { ?><li><a href="pages/services.php">Services</a><?php } ?>

<?php if ($page == 'employees') { ?><li class="active"><a href="employees.php" class="active">Employees</a></li>
<?php } else { ?><li><a href="pages/employees.php">Employees</a><?php } ?>

<?php if ($page == 'dashboard') { ?><li class="active"><a href="dashboard.php" class="active">Dashboard</a></li>
<?php } else { ?><li><a href="pages/dashboard.php">Dashboard</a><?php } ?>
</ul>

目录看起来像这样。

根目录/包含

根/页

提前感谢您的帮助。我意识到我可以做一些简单的事情来解决这个问题,但我真的很想在未来了解这一点。

这是页面当前的布局方式:

<?php $page = 'contact'; ?>

<html>
<meta charset="utf-8"> 
<title>Contact Us</title>
<head>
<base href="http://www.mysite.com/Dir_IM_Working_on_root/pages/" />
<link rel="stylesheet" type="text/css" href="../css/styles.css" />
</head>

<body>
<div id="wrapper">

<div id="nav">
<?php include '../includes/nav.php'; ?>
</div><!-- CLOSING NAV DIV -->

<div id="main">

</div><!-- CLOSING MAIN DIV -->

<footer>
<?php include '../includes/footer.php'; ?>
</footer>

</div><!-- CLOSING WRAPPER DIV -->
</body>
</html>

【问题讨论】:

    标签: php navbar dir


    【解决方案1】:

    最简单的方法是在所有情况下输出绝对 URL。 (/test.php)

    如果您想保留在子文件夹中运行网站的可能性,您可以在所有路径前添加一个变量。这可以更改为您网站的当前位置。

    另一种方法是添加一个

    <base href="http://www.example.org/subfolder/" />
    

    到您的 html 代码并结合绝对 URL 进行相应更改。所有 URL 都基于您放入属性的内容。这是一个非常优雅的解决方案,但它会影响很多,如果一个人没有受过网络链接方面的培训,这可能会令人惊讶。

    我认为没有“正确”的方式。 Typo3 使用基本标签变体,这很可能是我会使用的方式。许多其他软件使用变量变体(或将路径包装在函数中——这只是实现相同的另一种方式)。尝试一些方法,然后决定我认为最吸引你的一种。

    根据我的经验,几乎没有人使用的唯一东西是相对 URL。

    更新

    将此 html 与基本 html 标记结合使用。

    <ul>
    <li<?php if ($page == 'home') echo ' class="active' ?>><a href="index.php">Home</a></li>
    <li<?php if ($page == 'contact') echo ' class="active' ?>><a href="pages/contact.php">Contact Us</a></li>
    <li<?php if ($page == 'services') echo ' class="active' ?>><a href="pages/services.php">Services</a></li>
    <li<?php if ($page == 'employees') echo ' class="active' ?>><a href="pages/employees.php">Employees</a></li>
    <li<?php if ($page == 'dashboard') echo ' class="active' ?>><a href="pages/dashboard.php">Dashboard</a></li>
    </ul>
    

    【讨论】:

    • 您必须使用绝对 URL。含义/index.php/pages/contact.php等。
    • 抱歉,后面的斜杠当然要省略。 Here is a fiddle which depicts two links.你可以把它放在任何文件夹中,它总是链接到相同的点。
    • 您的基本标签看起来如何?您必须在值的末尾提供一个斜线! &lt;base href="http://www.example.com"&gt; 不起作用,但 &lt;base href="http://www.example.com/&gt;" 会。
    • 我认为您的解决方案中的“页面”太多了。请参阅this fiddle,我在没有“页面”的情况下进入了您的头部,并且没有我的答案的 html。这对我来说很好。
    • 大多数框架的“趋势”都转向将所有调用重定向到index.php 配置在.htaccess 中的文件,但这仅发生在内部并且在浏览器中是不可见的。这也不能解决如何链接页面的问题,这就是 Typo3 使用基本标签寻求帮助的原因。在我看来,现在的解决方案非常好。如果您使用多个单独的 PHP 文件或使用 htaccess 解决方案将所有请求收集到一个 PHP 文件中,则可能是另一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2022-06-12
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    相关资源
    最近更新 更多