quarta-feira, 1 de setembro de 2010

Como deixar o menu selecionado - php e codeigniter

Olá, hoje vou mostrar como fazer com que o link da página atual do site fique diferente, ou seja aplicar uma classe CSS para que o usuário perceba que está na página daquele link.

Vamos usar a class URI do Codeigniter.

Essa classe não é necessário ser chamada pelo controller ou pelo autoload, ela é carregada automaticamente.

A principal função a ser usada será $this->uri->segment(n).  Onde "n" corresponde ao número do segmento.

Vou aproveitar e ir mais profundo na questão dos links e vou fazer a função funcionar com sublinks. Vamos Lá:

Uma hierarquia da seguinte forma:

  1. Criação de sites
    1. Dinâmico
    2. Estático
  2. Web Marketing 
    1. SEO
    2. SEM

Primeiramente teríamos que criar 2 controllers, um para criação de sites com o nome "criacao" e para web marketing "webmarketing"

Se não houver parâmetros nas funções ficaria assim:

Controller criacao:

class Criacao extends Controller{

function Criacao()
       {
            parent::Controller();
       }

function Index(){
      $this->load->view("nome_da_view");
      }


function site_dinamico(){
      $this->load->view("nome_da_view");
      }

function site_estatico(){
      $this->load->view("nome_da_view");
      }

}

---------------------------------------------------------------------------

Controller webmarketing:

class Webmarketing extends Controller{

function webmarkting()
       {
            parent::Controller();
       }

function Index(){
      $this->load->view("nome_da_view");
      }


function seo(){
      $this->load->view("nome_da_view");
      }

function sem(){
      $this->load->view("nome_da_view");
      }

}



OK. Depois dos controllers, vamos agora para o menu em HTML, que de preferência seria um include, que é chamado através da página da seguinte forma:

 


Esse arquivo seria "menu.php", vamos para ele com o print em Web Marketing:


Vamos as explicações... Antes de mais nada, foi definida uma variável $sel = ""; no topo do include.
Ela servirá para fazer a verificação das páginas e definir uma class do css nomeada de "select" caso estejamos nela.

Normalmente o $this->uri->segment(1) pega o nome do controller o $this->uri->segment(2) pega o nome da função  e respectivamente os demais números pegarão os argumentos das funções. No nosso caso, sem argumento.

Existe um Link "Web Marketing"  e os sublinks Práticas SEO e SEM. No link a verificação é um pouco mais complexa, pois temos que saber a quantidades de segmentos que existe na URL e consequentemente evitar que o link e sunlinks fiquem selecionados.


O if da linha 82, verifica se o controller é webmarketing e se existe apenas 1 segmento na URL, ou seja o Index do controller. Caso seja o controller e apenas 1 segmento, é aplicado o valor com o nome da class CSS na variável, se não, a variável fica em branco.

Nos sublinks a verificação é mais simples, a condição é apenas no o segmento 2, ou seja, a função, correspondente a página.


Lembrando que nessa estrutura a index.php da URL já foi removida. Caso queria saber como remover veja http://imarlus.blogspot.com/2009/12/como-remover-o-indexphp-da-url-no.html

Qualquer dúvida ou melhora do código... estamos aqui!


 

Um comentário: