Listagem de categorias com seus produtos

09/07/2014

0

PHP

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

Responder

Post mais votado

09/07/2014

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

Ronaldo Lanhellas

Ronaldo Lanhellas
Responder

Mais Posts

09/07/2014

Wellington Silva

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
                );
            }
            
        }
Responder

09/07/2014

Ronaldo Lanhellas

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

09/07/2014

Wellington Silva

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..
Responder

09/07/2014

Ronaldo Lanhellas

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 ?
Responder

09/07/2014

Wellington Silva

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.
Responder

09/07/2014

Ronaldo Lanhellas

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 } }?>
Responder

09/07/2014

Ronaldo Lanhellas

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 } }?>
Responder

09/07/2014

Wellington Silva

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.
Responder

09/07/2014

Ronaldo Lanhellas

Mas o problema era a troca do $groups para $group ? Ou era outra coisa ?
Responder

09/07/2014

Wellington Silva

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}
Responder

09/07/2014

Ronaldo Lanhellas

Que bom que funcionou.
Responder

09/07/2014

William

Finalizando tópico!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar