mar201017
John Marques
2
Categorias e Subcategorias – Agrupadas Dinamicamente
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
2 Comentários to “Categorias e Subcategorias – Agrupadas Dinamicamente”
Responda






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!
cara no meu da erro no array_push porque me ajuda ai