Change navbar in bootstrap if user login

你。 提交于 2020-01-04 09:08:32

问题


I have a standard menu, including an option for "logging" in and "create user". What I want is that when either you create a user or you loging the whole navbar menu to change, say, "My user's page" and "logout" instead, how can I do it?

<div id="menu">
    <nav class="navbar">
        <div class="container">
            <ul class="nav navbar-nav">
                <li class="active"><a href="#"><span class="glyphicon glyphicon-home">  </span>    Home</a></li>
                <li><a href="#">Descuentos</a></li>
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Categories<span class="caret"/></a>
                    <ul class="dropdown-menu">
                        <li><a href="#">Cat A</a></li>
                        <li><a href="#" >Cat B</a></li>
                        <li><a href="#">Cat C</a></li>
                    </ul>
                </li>
            </ul>
            <ul class="nav navbar-nav navbar-right">
                <li><a href="createaccount.php"><span class="glyphicon glyphicon-user"></span>Create account</a></li>
                <li class="dropdown">
                    <a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" href="#"><span class="glyphicon glyphicon-log-in"></span>  Login</a>
                    <ul class="dropdown-menu" role="menu">
                        <li>
                            <form class="form-horizontal" role="form" action="tienda.php"  method="POST">
                                <div class="form-group">
                                    <label class="control-label col-md-4" for="nombre">User:</label>
                                    <div class="col-md-8">
                                        <input type="text" class="form-control" name="loginUser" required>
                                    </div>
                                    <label class="control-label col-md-4" for="nombre">Pass:</label>
                                    <div class="col-md-8">
                                        <input type="password" class="form-control" name="loginPass" required> <br>
                                    </div>
                                    <div class="col-md-5"></div>
                                    <button type="submit" class="btn btn-default col-md-5">Log In</button>
                                </div>
                            </form>
                        </li>
                    </ul>
                </li>
            </ul>
        </div>
    </nav>
</div>

Basically, change

<ul class="nav navbar-nav navbar-right">
                    <li><a href="createaccount.php"><span class="glyphicon glyphicon-user"></span>Create account</a></li>
                    <li class="dropdown">
                        <a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" href="#"><span class="glyphicon glyphicon-log-in"></span>  Login</a>
                        <ul class="dropdown-menu" role="menu">
                            <li>
                                <form class="form-horizontal" role="form" action="tienda.php"  method="POST">
                                    <div class="form-group">
                                        <label class="control-label col-md-4" for="nombre">User:</label>
                                        <div class="col-md-8">
                                            <input type="text" class="form-control" name="loginUser" required>
                                        </div>
                                        <label class="control-label col-md-4" for="nombre">Pass:</label>
                                        <div class="col-md-8">
                                            <input type="password" class="form-control" name="loginPass" required> <br>
                                        </div>
                                        <div class="col-md-5"></div>
                                        <button type="submit" class="btn btn-default col-md-5">Log In</button>
                                    </div>
                                </form>
                            </li>
                        </ul>
                    </li>
                </ul>

to this:

<ul class="nav navbar-nav navbar-right">
                    <li class="dropdown">
                    <a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" href="#"><span class="glyphicon glyphicon-user"></span>Nombre USUARIO</a>

                    <ul class="dropdown-menu" role="menu">
                            <li><a href="#">Mi página</a></li>
                            <li><a href="#"><span class="glyphicon glyphicon-shopping-cart"></span>  Carrito</a></li>
                        </ul>
                    </li>


                    <li><a href="#"><span class="glyphicon glyphicon-log-out"></span>  Logout</a></li>

                </ul>

What's the best way to do this?


回答1:


This is how I usually do it:

<?php
if($logged_id){
    include 'menu_authenticated.php';
}
else{
    include 'menu_unauthenticated.php';
}
?>

And of course, those files will have their menus respectively //menu_unauthenticated.php

<ul class="nav navbar-nav navbar-right">
                    <li><a href="createaccount.php"><span class="glyphicon glyphicon-user"></span>Create account</a></li>
                    <li class="dropdown">
                        <a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" href="#"><span class="glyphicon glyphicon-log-in"></span>  Login</a>
                        <ul class="dropdown-menu" role="menu">
                            <li>
                                <form class="form-horizontal" role="form" action="tienda.php"  method="POST">
                                    <div class="form-group">
                                        <label class="control-label col-md-4" for="nombre">User:</label>
                                        <div class="col-md-8">
                                            <input type="text" class="form-control" name="loginUser" required>
                                        </div>
                                        <label class="control-label col-md-4" for="nombre">Pass:</label>
                                        <div class="col-md-8">
                                            <input type="password" class="form-control" name="loginPass" required> <br>
                                        </div>
                                        <div class="col-md-5"></div>
                                        <button type="submit" class="btn btn-default col-md-5">Log In</button>
                                    </div>
                                </form>
                            </li>
                        </ul>
                    </li>
    </ul>

//menu_authenticated.php

<ul class="nav navbar-nav navbar-right">
                    <li class="dropdown">
                    <a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" href="#"><span class="glyphicon glyphicon-user"></span>Nombre USUARIO</a>

                    <ul class="dropdown-menu" role="menu">
                            <li><a href="#">Mi página</a></li>
                            <li><a href="#"><span class="glyphicon glyphicon-shopping-cart"></span>  Carrito</a></li>
                        </ul>
                    </li>


                    <li><a href="#"><span class="glyphicon glyphicon-log-out"></span>  Logout</a></li>

                </ul>




回答2:


Not saying this is 'the way' to do it. But it's one option :) That option includes creating some PHP functions. One that outputs the 'logged out' meny, and one that outputs the 'logged in' meny.

And then simply instead of having the meny you would have this code:

<?php
if($loggedIn)
  renderLoggedInMeny();
else
  renderLoggedOutMeny();
?>

These functions could look something like this:

function renderLoggedInMeny() {
  echo <<<EOT
<ul class="nav navbar-nav navbar-right">
  <li... [and so on]
EOT;
}



回答3:


For the code below I'll pretend that you have a isLogged() function that returns true if a user is logged in and false if he isn't. This is what you could do in your navbar code :

<?php if(isLogged()): ?>
<li><a href="profile.php">Profile</a></li>
<li><a href="logout.php">Logout</a></li>
<?php else: ?>
<li><a href="login.php">Login</a></li>
<li><a href="register.php">Register</a></li>
<?php endif; ?>

Of course the code in between the PHP conditions can change, you can put your ul elements directly instead of only the li like I did - it's only for demonstration's purpose.



来源:https://stackoverflow.com/questions/27209274/change-navbar-in-bootstrap-if-user-login

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!