Aide - Recherche - Membres - Calendrier
Version complète : Un product_listing différent pour une catégorie
Forum osCommerce-fr > Les Bases d'OsCommerce MS2 > Fonctionnement
filip59
Bonjour à tous,

Je cherche à faire une liste différente de produit pour uniquement une catégorie,sans installer une nouvelle contribution.

ça devrait se passer dans catalog/includes/modules/product_listing.php

et certainement ailleurs...


pour l'instant j'ai coder comme ceci au debut

Citation
case 'PRODUCT_LIST_PRICE':
if ($cPath!=$cPathAuction){
$lc_text = TABLE_HEADING_PRICE;
$lc_align = 'right';
} else {
$lc_text = TABLE_HEADING_PRICE;
$lc_align = 'right';
}
break;



puis au milieu:

Citation
case 'PRODUCT_LIST_PRICE':

if ($cPath!=$cPathAuction){
$lc_align = 'right';
if (tep_not_null($listing['specials_new_products_price'])) {
$lc_text = '&nbsp;<s>' . $currencies->display_price($listing['products_price'], tep_get_tax_rate($listing['products_tax_class_id'])) . '</s>&nbsp;&nbsp;<span class="productSpecialPrice">' . $currencies->display_price($listing['specials_new_products_price'], tep_get_tax_rate($listing['products_tax_class_id'])) . '</span>&nbsp;';
} else {
$lc_text = '&nbsp;' . $currencies->display_price($listing['products_price'], tep_get_tax_rate($listing['products_tax_class_id'])) . '&nbsp;';
}
} else {
$lc_align = 'right';
$lc_text = LISTING_DEP_PRIX_AUCTION .' <b>' .$currencies->display_price($listing['auctions_starting_price'], tep_get_tax_rate($listing['products_tax_class_id'])) . '</b><br>'.LISTING_PRIX_AUCTION.' <font color=RED><b>'. $currencies->display_price($listing['auctions_max'], tep_get_tax_rate($listing['products_tax_class_id'])) .'</font> - <font color=RED>' .$listing['auctions_nb']. LISTING_NB_AUCTION . '</b></font><br>'.LISTING_FIN_AUCTION.' <b>' . date("d/m/Y \à H:i",strtotime($listing['expires_date'])).'</b>';
}

break;



alors ca fonctionne pour ma catégorie 192 , mais aussi pour advance_search (la liste de la recherche par la box search) et ca je voudrais quelle ne soit pas modifier.

merci



kardichca
Bonjour,

Pour ma part, avec une catégorie de produits spécifique à mettre en ligne, j'ai crée un 2eme product listing adapté et déclaré dans le fichier filename.
Ensuite sur l'index en bas de fichier, je précise la catégorie (ici 21) concernée par ceci :

if ($current_category_id == '21' )
echo
include(DIR_WS_MODULES . FILENAME_PRODUCT_LISTING1);
else
include(DIR_WS_MODULES . FILENAME_PRODUCT_LISTING);

Je ne réussi pas à coder pour les sous_cat dépendantes de cette catégorie, après plusieurs essais je sèche sur la requète.
Si quelqu'un à une idée, je suis preneur de conseils. merci.
NoZic
Bonjour,

Citation
alors ca fonctionne pour ma catégorie 192 , mais aussi pour advance_search
Bah faut juste rajouter un test du nom du fichier qui exécute le script (ou celui du referrer, ça dépend ce que renvoie le nom du fichier, ça risque d'être products_listing.php), si c'est index.php alors faire ton listing sinon faire celui d'origine. D'ailleurs tu ne devrais pas utiliser le $cPath comme référence mais plus $current_category_id comme le propose kardichca. Le problème de la variable $cPath c'est qu'elle n'est pas définie quand tu es dans une catégorie contenant directement des produits. Donc je supppose que ta catégorie 192 contient des catégories et pas des produits.

Citation
Je ne réussi pas à coder pour les sous_cat dépendantes de cette catégorie, après plusieurs essais je sèche sur la requète
Faudrait plus de code car là tu montres comment faire la différence pour utiliser le bon listing, mais pas le code du listing ni surtout de la requête avant (oui car la requête qui sera exécutée dans products_listing.php est générée avant dans index.php. Mais normalement le listing affiche déjà les produits inhérents aux sous-catégories de la catégorie courante. Je comprend pas trop ton problème du coup.
kardichca
bonjour NoZic et merci pour ta réponse

Pour etre un peu plus clair, voilà ce que j'arrive à faire :
Si une categorie ne contient que des produits (pas de sous cat), j'affiche un product listing dédié que j'appelle depuis l'index.

...et pas faire :
Si une cette categorie contient des sous catégories, mon listing dédié est ignoré.
Ce que je n'arrive pas à faire car "limite en php" c'est rediriger cat et surtout sous_cat depuis l'index vers le deuxieme product listing.

if ($current_category_id == '21' ) // pour rediriger vers listing1 par exemple un Cpath 21_42 c'est là le soucis.
echo
include(DIR_WS_MODULES . FILENAME_PRODUCT_LISTING1);
else
include(DIR_WS_MODULES . FILENAME_PRODUCT_LISTING);



NoZic
index.php est divisée en trois parties distinctes (faudrait le mettre dans la FaQ ça, j'en ai marre de le taper happy.gif ) :
Code
  if ($category_depth == 'nested') {
    ... ici tu es dans une catégorie contenant une autre catégorie
  } elseif ($category_depth == 'products' || isset($HTTP_GET_VARS['manufacturers_id'])) {
    ... ici tu es sur un fabriquant ou dans une catégorie contenant des produits (donc pas de catégories)
  } else { // default page
    ... ici c'est la page d'accueil
  }

Je suppose donc que tu n'as fait la modif' que dans la deuxième partie de la page et pas dans la première. D'ailleurs tu remarqueras que le listing n'est appelé qu'une fois par défaut, dans la partie "catégorie contenant des produits" donc la deuxième. Il faudrait juste rajouter le code qui l'affiche dans la première partie (euh... non en fait, il faudra rajouter ce qui construit la requête du $filterlist_sql aussi...).

Bon courage

[EDIT] oublie cette phrase :
Citation
Mais normalement le listing affiche déjà les produits inhérents aux sous-catégories de la catégorie courante. Je comprend pas trop ton problème du coup.
J'étais à la rue quand j'ai tapé ça, c'est les nouveaux produits qui tapent dans les sous-catégories, pas le listing.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2013 Invision Power Services, Inc.