mar201017

2

Categorias e Subcategorias – Agrupadas Dinamicamente

Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.

Olá,eu estava hoje e a um bom tempo batendo a cabeça com categorias e subcategorias acredita? rs, ficava endiabrado, por me preocupar, mas hoje,  Graças a Deus e ao Grande Beraldo, vi a salvação, rs.
Vou ensinar como criar um dinamica de categorias e subcategorias sem se preocupar, com o agrupamento dos mesmos, primeiro para entender a “Classezinha” que criei recomendo que acesse o post que tomei como referência no blog do Beraldo para que entendam a dinamica, e mais importante que ler o post do Camarada, é fazer o teste, para ver como funciona.
Então, na classe que vou postar VC poderá inserir as categorias e suas subcategorias de forma desordenada no banco, que o metodo de agrupamento fará o agrupamento correto, pois no post em que o Beraldo mostra para ensinando há a necessidade de que os registro estejam ordenados, e alé disso a chave inicial do vetor com as categorias, tem que ser 1, mas como de costume usamos a chave inicial a 0, mudei isso também ;D,  vamos usar de base a tabela criada pelo Beraldo e seus dados, so que iremos orderna a inserção no banco de outra forma, Então vamos lá.

Crie a tabela
CREATE TABLE categorias(
id int(5) unsigned not null auto_increment,
id_pai int(5) unsigned not null,
nome varchar(20) not null,
Primary Key (id)
) Default Character Set utf8 Collate utf8_general_ci;

Inserções (aqui a ordem vai ser diferente)
INSERT INTO categorias(id, id_pai, nome) VALUES
(1, 0, ‘A Empresa’),
(2, 1, ‘Objetivos’),
(3, 0, ‘Contato’),
(4, 1, ‘Sobre Nós’),
(5, 3, ‘Objetivo dos nossos clientes’),
(6, 0, ‘Produtos’);

Acho que isso já da para entender

Categorias.php


class Categorias
{
private $org_cat_rows;

 public function getCategorias()
 {
   return $this->org_cat_rows;
 }

public function AgrupaCategorias($arrayCats, $pai_id, $pai_campo, $pk_campo)
{
$catsSize = count($arrayCats);

for($i=0; $i<$catsSize; $i++)
{
if($arrayCats[$i][$pai_campo] == $pai_id)
{
array_push($this->org_cat_rows, $arrayCats[$i]);

self::AgrupaCategorias($arrayCats, $arrayCats[$i][$pk_campo], $pai_campo, $pk_campo);
}
}
}
}

Lista.php

require_once('Categorias.php');

$cats = array();

$mysqli = new mysqli( 'localhost', 'user', 'senha', 'bancoDeDados' );

$sql = 'SELECT id, id_pai, nome FROM categorias';

$exec = $mysqli->query( $sql ) or exit( $mysqli->error );

$i = 0;
while ( $f = $exec->fetch_object() )
{
$cats[$i]['id'] = $f->id;
$cats[$i]['id_pai'] = $f->id_pai;
$cats[$i]['nome'] = $f->nome;
$i++;
}

$objCat =new Categorias();
$listaAgrupada = $objCat->AgrupaCategorias($cats, 0, 'id_pai', 'id');

print_r($listaAgrupada->getCategorias());

Depois de executar vc vai ver que ele vai agrupar, tipo assim

Categoria
* Subcategoria
* Subcategoria

sem que você precise ficar criando várias tabelas, ou ficar fazendo select loucos, ou inventando peripecia. ehauseh

Sei que fiquei feliz com esse metodo, vai me ajudar muito em muitos projetos, então espero que ajude vocês,

e queria Agradeçer mais uma vez ao Beraldo pelo post que me serviu de orientação,

Abraço a todos,

John Marques

Referência: http://www.rberaldo.com.br/blog/2009/10/24/categorias-e-subcategorias-exemplo-de-modelagem/comment-page-1/#comment-352


Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.

2 Comentários to “Categorias e Subcategorias – Agrupadas Dinamicamente”

  1. Fernando 14 outubro 2010 at 8:18 #

    Cara, muuito boa sua contribuição, nota mil!!
    Vai me ajudar bastante, eu já estava pensando na estrutura do BD mas faltava a classe OOP para completar..

    Muito bom, abraço!

  2. ericfillipe 16 maio 2011 at 1:25 #

    cara no meu da erro no array_push porque me ajuda ai


Responda