artesaos / content-request

Este reposiório visa facilitar a indexação de conteúdo gerado pela comunidade Laravel Brasil.
51 stars 3 forks source link

[Respondido] Melhor maneira de destacar links/menus ativos #7

Closed insign closed 8 years ago

insign commented 8 years ago

Melhor maneira de destacar links/menus ativos

Quando geramos links de menu, tem várias formas de mostrar o link ativo (página atual)

Várias formas foram listadas aqui: https://www.facebook.com/groups/laravelbrasil/permalink/809229245765799/

Mas qual a melhor?

henriquesousa commented 8 years ago

Cara eu usei um "jQueryzinho" e deu certo:

esse era meu menu navbar.blade.php

<nav class="main-nav">
    <ul class="list-unstyled">
        <li class="active">
            <a href="http://seudominio/index" id="home">Home</a>
        </li>
        <li>
            <a href="http://seudominio/empresa" id="empresa">Empresa</a>
        </li>
        <li>
            <a href="http://seudominio/pecas" id="pecas">Peças</a>
        </li>
        <li>
            <a href="http://seudominio/servicos" id="servicos">Serviços</a>
            <ul>
                <li><a href="http://seudominio/servicos/manutencao">Manutenção</a></li>
                <li><a href="http://seudominio/servicos/recuperacao">Recuperação de peças</a></li>
                <li><a href="http://seudominio/servicos/restauracao">Restauração</a></li>
                <li><a href="http://seudominio/servicos/adesivo">Adesivar/Logomarca</a></li>
            </ul>
        </li>
        <li>
            <a href="http://seudominio/equipamentos" id="equipamentos">Equipamentos/Venda</a>

        </li>
         <li>
            <a href="http://seudominio/blog" id="blog">Blog</a>
        </li>
        <li>
            <a href="http://seudominio/local">Local</a>
        </li>
        <li><a href="http://seudominio/contato" id="contato">Contato</a></li>
    </ul>
</nav> <!-- end .main-nav -->

e esse meu js

$(document).ready(function(){
        var aurl = window.location.pathname;
        $('.main-nav li a[href$="'+aurl+'"]').parents('li').addClass('active');
});

espero que te ajude :)

deyvisonrocha commented 8 years ago

Muito bom @henriquesousa !

Se caso queira uma classe no próprio PHP, segue:

use Route;
use URL;

class ActiveMenu
{
    /**
     * Compares given route name with current route name.
     *
     * @param  string  $routeName
     * @param  string  $output
     * @return boolean
     */
    public static function isActiveRoute($routeName, $output = "active")
    {
        if (Route::currentRouteName() == $routeName) return $output;
        return null;
    }
    /**
     * Compares given URL with current URL.
     *
     * @param  string  $url
     * @param  string  $output
     * @return boolean
     */
    public static function isActiveURL($url, $output = "active")
    {
        if (URL::current() == url($url)) return $output;
        return null;
    }
    /**
     * Detects if the given string is found in the current URL.
     *
     * @param  string  $string
     * @param  string  $output
     * @return boolean
     */
    public static function isActiveMatch($string, $output = "active")
    {
        if (strpos(URL::current(), $string)) return $output;
        return null;
    }
    /**
     * Detects if the given string is found in the current URL.
     *
     * @param  string  $string
     * @param  string  $output
     * @return boolean
     */
    public static function areActiveMatchs(array $stringNames, $output = "active")
    {
        foreach ($stringNames as $stringName)
        {
            if (strpos(URL::current(), $stringName)) return $output;
        }
        return null;
    }
    /**
     * Compares given array of route names with current route name.
     *
     * @param  array  $routeNames
     * @param  string $output
     * @return boolean
     */
    public static function areActiveRoutes(array $routeNames, $output = "active")
    {
        foreach ($routeNames as $routeName)
        {
            if (Route::currentRouteName() == $routeName) return $output;
        }
        return null;
    }
    /**
     * Compares given array of URLs with current URL.
     *
     * @param  array  $urls
     * @param  string $output
     * @return boolean
     */
    public static function areActiveURLs(array $urls, $output = "active")
    {
        foreach ($urls as $url)
        {
            if (URL::current() == url($url)) return $output;
        }
        return null;
    }
}
vinicius73 commented 8 years ago
deyvisonrocha commented 8 years ago

Show em @vinicius73 !!

julihermes commented 8 years ago

Muito boa essa dica!!! Temos que pagar uma cerveja pro @vinicius73

vinicius73 commented 8 years ago

Suco de laranja com morango @julihermes :p

julihermes commented 8 years ago

:p