Listagem de categorias com seus produtos

PHP

09/07/2014

Olá,

Preciso de uma luz.
Estou tentando listar as categorias e junto delas todos produtos que estão vinculado a mesma..

Por exemplo:

Categoria 1
PRODUTO1
PRODUTO2
PRODUTO3
Categoria 2
PRODUTO4
PRODUTO5

de todas as formas que tento, eu só consigo listar as categorias corretamente, os produtos repetem da "categoria 1" para "categoria 2"

estou utilizando PHP e MySQL
Wellington Silva

Wellington Silva

Curtidas 0

Melhor post

Ronaldo Lanhellas

Ronaldo Lanhellas

09/07/2014

Mostre como você está tentando fazer no MySQL ou no PHP para que eu possa tentar lhe ajudar.
GOSTEI 1

Mais Respostas

Wellington Silva

Wellington Silva

09/07/2014

esqueci de citar estou utilizando o codeigniter tambem.

// Pega todos as Categorias (Grupos)
$objGroup = $this->m_products->getGroups();
        
        foreach($objGroup as $groups) {
            
            $data['GROUP'][] = array(
                'GROUP_CODE' => $groups->product_group_id,
                'GROUP_NAME' => $groups->name
            );
            
            // Pega os produtos cujo a categoria seja a id passada como parametro
            $objProducts = $this->m_products->getProductAsGroup($groups->product_group_id);
            
            
            foreach($objProducts as $products) {

                // Coloco dentro de um array para visualizar no layout
                $data['PRODUCTS'][] = array(
                    'PRODUCT_CODE' => $products->product_id,
                    'PRODUCT_NAME' => $products->name
                );
            }
            
        }
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

09/07/2014

Não estou conseguindo ver onde você está "mostrando" os dados para o usuário. Creio que lá seja o ponto onde queremos chegar.
GOSTEI 1
Wellington Silva

Wellington Silva

09/07/2014

fica meio dificil de explicar pois estou utilizando o codeigniter, assim sendo utilizo o recurso de layout dele..
mais tentarei lhe explicar da melhor forma com código..

<?php foreach($data['GROUP'] as $group) {?>
                <div class="panel panel-default">
                    <div class="panel-heading">
                        <h4 class="panel-title"><?php echo $group['name']?></h4>
                    </div>
                    <div class="panel-collapse collapse">
                        <div class="panel-body">
                            <?php foreach($data['PRODUCTS'] as $products) {?>
                                 <li><?php echo $products['name']?></li>
                            <?php }?>
                        </div>
                    </div>
                </div>
<?php }?>


a forma do resultado para usuário seria algo parecido com isso qe estou fazendo..
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

09/07/2014

Bom, o problema é que você está iterando o mesmo vetor de produtos para os 2 grupos, sem nenhum filtro, e nesse caso ele vai mesmo repetir os produtos para cada categoria.

No trecho abaixo:

  <?php foreach($data['PRODUCTS'] as $products) {?>
                                 <li><?php echo $products['name']?></li>
                            <?php }?>


Você tem que de alguma forma checar se o $products atual faz parte do $group atual, se isso for verdade então você mostra o produto. Entendeu ?
GOSTEI 1
Wellington Silva

Wellington Silva

09/07/2014

se eu entendi bem seria o mesmo que:
<?php foreach($data['PRODUCTS'] as $products) {
    if($groups->product_group_id == $products->product_group_id) { ?>
        <li><?php echo $products['name'] ?></li>
<?php } }?>


porem ele fica do mesmo jeito, não muda nada colocando a clausula ou não.
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

09/07/2014

Acho que o certo seria $group e não $groups, pois você está comparando o item atual do foreach do grupo com o foreach do produto, veja:

<?php foreach($data['PRODUCTS'] as $products) {
    if($groups->product_group_id == $products->product_group_id) { ?>
        <li><?php echo $products['name'] ?></li>
<?php } }?>
GOSTEI 1
Ronaldo Lanhellas

Ronaldo Lanhellas

09/07/2014

Corrigindo, o código seria:

<?php foreach($data['PRODUCTS'] as $products) {
    if($group->product_group_id == $products->product_group_id) { ?>
        <li><?php echo $products['name'] ?></li>
<?php } }?>
GOSTEI 1
Wellington Silva

Wellington Silva

09/07/2014

isso mesmo, encontrei meu problema.. ainda não tentei refazer tudo no modo de trabalho do codeigniter, porem refiz toda essa parte na unha, e problema resolvido..
valeu pessoal, vocês aqui são rapidos ajudou muito mesmo.
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

09/07/2014

Mas o problema era a troca do $groups para $group ? Ou era outra coisa ?
GOSTEI 1
Wellington Silva

Wellington Silva

09/07/2014

o problema foi o seguinte, eu estavo utilizando a estrutura do codeigniter de layouts.. eu estava escrevendo tudo no controller para exibir na view..
oque eu fiz foi escrever o trecho na view essa parte:
<?php foreach($data['PRODUCTS'] as $products) {
    if($group->product_group_id == $products->product_group_id) { ?>
        <li><?php echo $products['name'] ?></li>
<?php } }?>


que no caso estava:

    <li></li>
{/PRODUCTS}
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

09/07/2014

Que bom que funcionou.
GOSTEI 1
William

William

09/07/2014

Finalizando tópico!
GOSTEI 0
POSTAR