我想根据用户是否登录的事实来了解显示不同导航栏的最佳方法是什么。
我考虑了几种方法:
一种方法是在HTML文件中制作两个导航栏,然后使用CSS制作一个显示块,而另一个则不显示,并使用js在它们之间切换。
或者另一种方式可以使用PHP“ if statement” ...
还有什么其他方法?而且我知道有很多方法,但是最简单的方法是什么,还可以使用干净的代码。
谢谢大家:)。
答案 0 :(得分:0)
如果我正确理解您的问题。 我会完全不鼓励您使用基于javascript / css的“隐藏/显示”,这是一个很好的理由,那就是安全性,如果有人通过您的代码可以轻松地取消隐藏导航栏。
如果您只想在用户登录时显示导航栏,就是这种情况。
如果您正在编写PHP,请参见Lawrence的注释,请遵循MVC模式并将导航栏创建为View,并且仅在用户登录时将其包括在内。
PHP是一种服务器端语言,如果$ program arg
条件没有完全满足,它将不会呈现任何内容。
使用PHP使用服务器端呈现的另一个优点是,对于不同类型的用户,您可以有多个logged-in
。 (这不是最佳做法,但是您可以这样做。)
或者,如果您希望扩展该领域的知识,则可以使用Navbars
或ReactJS
等前端框架来获得更好的结果。
答案 1 :(得分:0)
我绝对建议您不要使用js
或任何其他客户端语言!
我要推荐的是:我不知道它是否算干净,但是...
我写了一个Web应用程序,导航栏取决于用户的访问级别,
因此,登录后,取决于用户的访问级别,我包含的头文件的路径将有所不同。
<?php
include(the path of the intended header/header.php);
?>
我从数据库中获得了预期的路径。
如果您的程序对用户访问级别不太敏感,或者您没有非常动态的导航栏,我认为这是个好方法!
否则请等待专业人士回答;)
答案 2 :(得分:-1)
我将更喜欢通过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>