我想知道根据用户是否记录的事实显示不同导航栏的最佳方法是什么。
我想了几种方法:
-
一种方法是在 HTML 文件中制作两个导航栏,并使用 CSS 使一个显示块,另一个显示块不显示任何内容,并使用 js 在它们之间切换。
-
或者另一种方式可能是使用 PHP"if 语句"......
还有什么其他方法?我知道有很多方法,但最简单的方法是什么,还有干净的代码。
谢谢大家:)。
如果我正确理解你的问题。 我完全不鼓励您使用基于 javascript/css 的隐藏/显示,一个很好的理由是安全性,如果有人通过您的代码可以轻松取消隐藏您的导航栏。
如果您只想在用户登录时显示导航栏,则会出现这种情况。
如果您正在编写 PHP,如 Lawrence 的评论中所述,请遵循 MVC 模式并将导航栏创建为视图,并仅在用户登录时才包含它。 PHP 是一种服务器端语言,如果logged-in
条件未完全填充,它将不会呈现任何内容。
使用PHP 使用服务器端渲染的另一个优点是,您可以为不同类型的用户提供多个Navbars
。(不是最佳实践,但你可以这样做(。
或者,如果您希望扩展您在这一领域的知识,您可以使用前端框架(例如ReactJS
或Angular
等(获得更好的结果。
我绝对建议您不要使用js
或任何其他客户端语言!
我要推荐的是:我不知道它是否算干净,但是......
我编写了一个 Web 应用程序,导航栏取决于用户的访问级别,
所以登录后,根据用户的访问级别,我包含的头文件的路径会有所不同。
<?php
include(the path of the intended header/header.php);
?>
我从数据库中获得了预期的路径。
如果您的程序对用户访问级别不太敏感,或者您没有非常动态的导航栏,我认为这是一个好方法!
否则等待专业人士回答;)
我更喜欢通过php将类名应用于<body>
并通过css显示/隐藏相关元素,它不仅可以控制页面上的其他元素nav
。
编辑:安全性在这里不是问题,因为您应该限制通过php访问,而不仅仅是隐藏链接。这里的方法只是处理布局。
nav ul li {
display: none;
}
body.guest nav ul li.guest,
body.logged nav ul li.logged {
display: block;
}
<?php
$user_logged = ($user->guest) ? 'guest' : 'logged';
?>
<body class="<?php echo $user_logged; ?>">
<nav>
<ul>
<li class="guest"><a href="#">Nav 1</a></li>
<li class="guest"><a href="#">Nav 2</a></li>
<li class="logged"><a href="#">Nav 3</a></li>
<li class="guest"><a href="#">Nav 4</a></li>
<li class="logged"><a href="#">Nav 5</a></li>
<li class="logged"><a href="#">Nav 6</a></li>
<li class="guest"><a href="#">Nav 7</a></li>
<li class="logged"><a href="#">Nav 8</a></li>
<li class="logged"><a href="#">Nav 9</a></li>
<li class="guest"><a href="#">Nav 10</a></li>
</ul>
</nav>
</body>