2010-10-08 6 views
0

S'il vous plaît laissez-moi d'abord expliquer ma question. J'ai une boutique en ligne qui a beaucoup de produits, mais aussi beaucoup de catégories. Les images du produit sont importées de openicecat.biz, c'est aussi un fournisseur de contenu. Lorsqu'il n'y a pas de description ou d'image disponible pour un certain produit, un noimage.jpg est affichéafficher la catégorie image de sous-catégorie problème

Quelqu'un a créé un code qui sélectionne une image de la liste de produits et l'utilise comme image pour cette catégorie. (si disponible) Le problème vient quand une catégorie a une sous-catégorie avec des images et une sous-catégorie sans images. Le fichier noimage.jpg est affiché à la place, il montre une image d'une sous-catégorie avec des images.

Par exemple

catelog -> components -> card readers (no image) -> internal card reader (image) 
               -> external card reader (no image) 

La façon dont l'extrait de code a été conçu, seule une image montrera quand il y a deux images dans le lecteur de carte interne et externe, pas quand une sous catégorie ne dispose pas d'images. Ce que je voudrais, c'est que lorsque par exemple le lecteur de carte interne de sous-catégorie a des produits avec des images, et que le lecteur de carte externe de la sous-catégorie n'a pas d'images, une image d'un lecteur de carte externe est affichée comme catégorie image pour les lecteurs de cartes.

Exemple

catelog -> components -> card readers (image of internal card reader, instead of no image)          
             -> internal card reader (image) 
             -> external card reader (no image) 

J'espère que vous comprendrez ce que je veux dire.

Ceci est l'extrait de code:

// Start auto fetch category image from product 
if($categories['categories_image'] == "") { 
$categories_img_query = tep_db_query("select products_image from " . TABLE_PRODUCTS . " p, products_to_categories pc WHERE p.products_id = pc.products_id AND pc.categories_id = '{$categories['categories_id']}' AND p.products_image IS NOT NULL order by p.products_id ASC"); 

if(tep_db_num_rows($categories_img_query) > 0) { 
$categories_img = tep_db_fetch_array($categories_img_query); 
$categories['categories_image'] = $categories_img['products_image']; 
} 
else { 
$categories_img_parent_query = tep_db_query("select categories_id from categories WHERE parent_id = '{$categories['categories_id']}'"); 

while($categories_img_parent = tep_db_fetch_array($categories_img_parent_query)) { 
    $categories_img_query = tep_db_query("select products_image from " . TABLE_PRODUCTS . " p, products_to_categories pc WHERE p.products_id = pc.products_id AND pc.categories_id = '{$categories_img_parent['categories_id']}' AND p.products_image IS NOT NULL order by p.products_id ASC"); 
    if(tep_db_num_rows($categories_img_query) > 0) { 
    $categories_img = tep_db_fetch_array($categories_img_query); 
    $categories['categories_image'] = $categories_img['products_image']; 
    } 
} 
} 
} 
// End auto fetch category image from product 

Quelqu'un peut-il me aider à terminer cet extrait?

btw1, c'est pour l'oscommerce.

btw2, omg, je allmost passer 40 minutes à expliquer et en tapant ce problème, est-ce une médaille trop la peine (médaille de patience éternelle) ;-)

Répondre

0

Tout d'abord, certaines critiques. Votre clause WHERE devrait être dans votre JOIN. C'est:

WHERE p.products_id = pc.products_id 

devrait effectivement être

p JOIN pc USING (products_id) 

C'est plus rapide plus claire.

A propos de votre problème:

Je ne comprends pas comment vous pouvez avoir des images vierges du tout (vous spécifiez toujours products_image IS NOT NULL) si l'implication est que noimage.jpg est stocké comme valeur cette image. Dans ce cas, le problème est simplement que vous ajoutez n'importe quelle image, même si c'est noimage.jpg. Au lieu d'ajouter la première image à partir de tep_db_fetch_array(), faites-la une boucle pour voir si une image non-noimage a été trouvée. Par exemple:

while ($row = tep_db_fetch_assoc($categories_img_query)) { 
    if ($row['products_image'] <> 'noimage.jpg' 
    or !isset($categories['categories_image']) 
) { 
    $categories['categories_image'] = $row['products_image']; 
    } 
} 

Cela suppose également que vous ne se soucient pas d'ajouter une image spécifique pour la catégorie, juste une non-noimage.jpg si l'on est disponible.

+0

merci pour votre réponse et sollicution. Je suis totalement nouveau à PHP, pouvez-vous m'expliquer où le mettre dans le code ou quoi remplacer? – Chris

+0

Cette boucle remplacera les blocs conditionnels (les deux, je crois) en commençant par if (tep_db_num_rows ($ categories_img_query)> 0) {... –

+0

vous voulez dire le complet: – Chris

Questions connexes