Fiz um post semana passada, sobre como podemos melhor aproveitar o elemento body dos nossos sites:

http://wbruno.com.br/2012/03/01/elemento-body-nos-nossos-sites-como-melhor-aproveita-lo/

E nele eu cito, que o “trabalho” do server-side, seria gerar essas classes no body, ou então nós mesmos fazer isso “na mão”, página por página.

Sou preguiçoso então…

Por exemplo, se a URL for:

site.com.br/ ou site.com.br/index.html

a classe do elemento body, deve ser:

<body class="home">

E para cada nível, a class deve refletir:

site.com.br/frutas.html

<body class="frutas">

Mas se começar a “complicar”, e mais níveis surgirem..

site.com.br/frutas/banana.html

<body class="frutas banana">

Ou:

site.com.br/frutas/banana/nanica.html

<body class="frutas banana nanica">

Para ser eficiente, a class do nosso body, deve refletir essa “realidade”.

Criei um conjunto de funções em php, que fazem isso. Analisam a URL requisitada (REQUEST_URI), e devolvem essa estrutura:

<?php

/**
 * @return boolean, true caso a URI seja a home do site
 */
function is_home(){
  return stripos( $_SERVER['REQUEST_URI'], 'index.html' )
    || !stripos( $_SERVER['REQUEST_URI'], '.html' );
}
/**
 * @return string, class=""(html) de acordo com o URI atual
 */
function get_body_class(){
  if( is_home() ) return 'class="home"';

  $pieces = explode( '/', $_SERVER['REQUEST_URI'] );
  $class = Array();
  foreach( $pieces AS $part ){
    $class[] = str_replace( '.html', '', $part );
  }

  return 'class="'.implode( ' ', $class ).'"';
}
/**
 * @see get_body_class()
 */
function body_class(){ echo get_body_class(); }

Agora que terminei de escrever, percebi que você pode usar também para um bread crumb, ne?!

Me diz o que você acha.

É isso =)