2012-02-27 4 views
-3

J'ai réussi à obtenir ce travail, mais j'ai un léger bug que je ne peux pas réparer et j'espère que quelqu'un peut aider.Boucle produits par catégorie

Je fonctionne bien s'il y a un produit dans la catégorie parente mais si le parent est vide alors que le SQL renvoie les bons résultats, la boucle PHP répète les données en fonction du nombre de produits. c'est à dire. 4 produits = 4 séries de résultats. Mais comme je l'ai dit, s'il y a un record dans la catégorie parente, cela fonctionne parfaitement.

<?php $_GET["category_id"]=$category_id; ?> 

    <?PHP 
    $sql = " 
     SELECT DISTINCT JVPCX.category_id, 
      JVP.product_id, 
      JVP.product_error, 
      JVP.product_exchange, 
      JVP.product_sku, 
      JVP.product_name, 
      JVP.product_url, 
      JVP.product_in_stock, 
      jos_vm_category.category_name 
    FROM jos_vm_product_category_xref JVPCX 
      INNER JOIN jos_vm_product JVP ON (JVPCX.product_id = JVP.product_id) 
      INNER JOIN jos_vm_category ON (JVPCX.category_id = 
      jos_vm_category.category_id) 
    WHERE JVPCX.category_id IN (SELECT jos_vm_category_xref.category_child_id FROM 
     jos_vm_category_xref WHERE jos_vm_category_xref.category_parent_id =".$category_id.") OR (JVPCX.category_id =".$category_id.")"; 

    $res = mysql_query($sql); 
    $list = array(); 
    while ($r = mysql_fetch_object($res)) 
    { 
     if (! isset($list[ $r->category_name ])) 
     { 
      $list[ $r->category_name ] = array(); 

     } 

     $list[ $r->category_name ][ $r->product_id ] = array(
      'SKU'  => $r->product_sku, 
      'Name' => $r->product_name, 
      'Prod_id' => $r->product_id, 
      'Prod_error' => $r->product_error, 
      'Prod_exchange' => $r->product_exchange, 
      'Prod_url' => $r->product_url, 
      'Prod_in_stock' => $r->product_in_stock 
     ); 
    } 
    ?> 

    <table width="70%" border="0"> 
     <tr> 
     <td align="center" valign="middle"> Error: <img src="alert.gif" title="Error" alt="Error" /> 
     </td> 
     <td align="center" valign="middle"> Exchange: <img src="exchange.gif" title="Exchange" alt="Exchange" /> 
     </td> 
     <td align="center" valign="middle"> Information:<img src="info.gif" title="info" alt="info" /> 
     </td> 
     <td align="center" valign="middle"> Stock:<img src="stock.gif" title="Stock" alt="Stock" /> 
     </td> 
     <td align="center" valign="middle"> Buy:<img src="cart-icon.png" title="Stock" alt="Buy" /> 
     </td> 
     </tr> 
    </table> 

    <?PHP 

    echo("<BR/>"); 
    foreach ($list as $catID => $products) { ?> 
    <?php 
     print($catID); 
     echo("<BR/>"); 
     ?> 
    <table width="100%" border="1" class="product-head"> 
     <tr> 
     <th width="20%"> <?php echo("Part Number:"); ?> 
     </th> 
     <th width="45%"> <?php echo("Description:"); ?> 
     </th> 
     <th width="15%"> <?php echo("Information:"); ?> 
     </th> 
     </tr> 
    </table> 

    <table width="100%" border="1" class="product"> 
    <?php foreach ($products as $prodID => $data) { ?> 
     <tr> 
     <td width="20%"> 
     <?php print($data['SKU']); 
      echo("<BR/>");  
     ?> 
     </td> 


    <td width="45%"><?php 
     print($data['Name']); 
    echo("<BR/>");  ?></td> 

    <td width="15%" valign="middle"><?php 

       if ($data['Prod_error'] == "Y"){ 

      echo '<img src="alert.gif" title="Error" alt="Error" />'; 

      } 

       if ($data['Prod_exchange'] == "Y"){ 
       echo '<img src="exchange.gif" title="Exchange" alt="Exchange" />'; 


      } 

    if ($data['Prod_url'] > ""){ 
      echo '<a href="'. 
      $data['Prod_url'] 
      .'">'.'<img src="info.gif" title="info" alt="info" />'.'</a>'; 


      } 

    if ($data['Prod_in_stock'] > "0"){ 
      echo '<img src="stock.gif" title="Stock" alt="Stock" />'; 

      } 
    ?> 
    </td> 
     </tr> 
    </table> 
    <?php echo("<BR/>"); ?> 
    <?php } ?> 
+1

Postez le code que vous avez. – spencercw

+1

il est étrange que personne ne vous a suggéré de poster votre code - alors s'il vous plaît poster votre code – mkk

+0

J'ai essayé de faire fonctionner cela à partir d'un autre poste: – Paul

Répondre

0

Tout d'abord. Retirer jos_vm_product_category_xref.product_id, jos_vm_product_category_xref.product_list

$sql = " 
    SELECT DISTINCT 
     JVPCX.`category_id`, 
     JVP.`product_id`, 
     JVP.`product_sku`, 
     JVP.`product_s_desc` 
    FROM 
     `jos_vm_product_category_xref` JVPCX 
    INNER JOIN `jos_vm_product` JVP 
     ON JVPCX.`product_id` = JVP.`product_id` 
"; 

Et vous changez votre boucle

$list = array(); 

while ($r = mysql_fetch_object($res)) 
{ 
    if (! isset($list[ $r->category_id ])) 
    { 
     $list[ $r->category_id ] = array(); 
    } 

    $list[ $r->category_id ][ $r->product_id ] = array(
     'name'  => $r->product_sku, 
     'whatever' => $r->product_s_desc, 
    ); 
} 
Questions connexes