patotoche65
10 Jun 2004, 00:10
Bonjour à tous,
J'ai cherché et j'ai pas trouvé .....

Y'a peut être une contrib qui le fait .....
Voici ce que je voudrais faire :
A partir d'un menu sous forme de liens ou images dans le header, je voudrais que le contenu de la box catégorie soit la catégorie + les sous catégories concernées.
J'explique :
Dans le header, je clique sur "logiciel" et la box catégorie devient :
| QUOTE |
Logiciels >Administration de reseau >Antivirus >Bases de donnees >CAD >Clip art, images >Communication >Comptabilite >Conversion transfert de fichier >Creation Web >CRM >Design assiste par ordinateur >Design electronique par ordinate >Design electronique par ordinate >E-mail >Economiseurs d écran >Education >Emulateurs >Engineering Data Management >Fabrication assistee par ordinat
|
Merci d'avance de votre aide.
patotoche65
10 Jun 2004, 11:27
Re,
Comme base de départ, je suis en train de voir avec la contrib Show all categories pour l'affichage de l'arborescence.
restera plus que la condition à réaliser......
patotoche65
10 Jun 2004, 15:00
Ouaip, pas trop mal
Par contre, elle réalise du rewriting et ça, j'en veut pas (je le fais déja autrement).
Il faudrais donc que je puisse conserver le format initial des url.
La par contre, j'ai un peut de mal.
Je pose le code et si qqun se perd dans ce coin du forum, qu'il donne son avis
Voici le code :
| QUOTE |
<?php /* $Id: allcategories.php,v 1.0 2003/30/04
osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com
Copyright © 2003 osCommerce Copyright © 2003 HMCservices
Released under the GNU General Public License */
require('includes/application_top.php'); include(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CATEGORIES);
// Set number of columns in listing define ('NR_COLUMNS', 1); // $breadcrumb->add(HEADING_TITLE, tep_href_link(FILENAME_CATEGORIES, '', 'NONSSL')); ?> <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"> <html <?php echo HTML_PARAMS; ?>> <head> <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>"> <?php // BOF: WebMakers.com Changed: Header Tag Controller v1.0 // Replaced by header_tags.php if ( file_exists(DIR_WS_INCLUDES . 'header_tags.php') ) { require(DIR_WS_INCLUDES . 'header_tags.php'); } else { ?> <title><?php echo TITLE ?></title> <?php } // EOF: WebMakers.com Changed: Header Tag Controller v1.0 ?>
<base href="<?php echo (getenv('HTTPS') == 'on' ? HTTPS_SERVER : HTTP_SERVER) . DIR_WS_CATALOG; ?>"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0"> <!-- header //--> <?php require(DIR_WS_INCLUDES . 'header.php'); ?> <!-- header_eof //-->
<!-- body //--> <table border="0" width="100%" cellspacing="3" cellpadding="3"> <tr> <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2"> <!-- left_navigation //--> <?php require(DIR_WS_INCLUDES . 'column_left.php'); ?> <!-- left_navigation_eof //--> </table></td> <!-- body_text //--> <td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td width="100%"><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td class="pageHeading"><?php echo HEADING_TITLE; ?></td> <td align="right"></td> </tr> </table></td> </tr> <tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td> </tr> <tr> <td><table border="0" width="100%" cellspacing="0" cellpadding="2"> <?php $languages_query = tep_db_query("select languages_id, name, code, image, directory from " . TABLE_LANGUAGES . " order by sort_order"); while ($languages = tep_db_fetch_array($languages_query)) { $languages_array[] = array('id' => $languages['languages_id'], 'name' => $languages['name'], 'code' => $languages['code'], 'image' => $languages['image'], 'directory' => $languages['directory']); } for ($i=0; $i<sizeof($languages_array); $i++) { $this_language_id = $languages_array[$i]['id']; $this_language_name = $languages_array[$i]['name']; $this_language_code = $languages_array[$i]['code']; $this_language_image = $languages_array[$i]['image']; $this_language_directory = $languages_array[$i]['directory']; echo " <tr>\n"; $categories_query = tep_db_query("SELECT categories_id, categories_name FROM " . TABLE_CATEGORIES_DESCRIPTION . " WHERE language_id = $this_language_id ORDER BY categories_name"); $categories_array = array(); while($categories = tep_db_fetch_array($categories_query)) { $categories_array[] = array('id' => $categories['categories_id'], 'name' => $categories['categories_name']); } for ($j=0; $j<NR_COLUMNS; $j++) { echo " <td class=main valign=\"top\">\n"; for ($k=$j; $k<sizeof($categories_array); $k+=NR_COLUMNS) { $this_categories_id = $categories_array[$k]['id']; $this_categories_name = $categories_array[$k]['name']; echo " <a href=\"" . tep_href_link(FILENAME_CATEGORIES_INFO, 'name=' .str_replace("/", "/", rawurlencode($this_categories_name)). "/" . "cPath/" . $categories_id . $this_categories_id . (($this_language_code == DEFAULT_LANGUAGE) ? '' : ('&language=' . $this_language_code)), 'NONSSL', false) . "\">" . $this_categories_name . "</a><br>\n"; Je pense que c'est içi que le rewrit se fait ???? } echo " </td><br>\n"; } echo " </tr>\n"; } ?> </td> </tr> </table></td> </tr> <tr> <td align="right" class="main"><br><?php echo '<a href="' . tep_href_link(FILENAME_DEFAULT, '', 'NONSSL') . '">' . tep_image_button('button_continue.gif', IMAGE_BUTTON_CONTINUE) . '</a>'; ?></td> </tr> </table></td> <!-- body_text_eof //--> <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2"> <!-- right_navigation //--> <?php require(DIR_WS_INCLUDES . 'column_right.php'); ?> <!-- right_navigation_eof //--> </table></td> </tr> </table> <!-- body_eof //-->
<!-- footer //--> <?php require(DIR_WS_INCLUDES . 'footer.php'); ?> <!-- footer_eof //--> </body> </html> <?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?> |
PS : Au passage, je vous invite à utiliser cette contrib sur votre site et à mettre le lien dans le footer..... Je pense qu'ils vont aimer cela les ch'tit robots.....ça ma l'air bien efficace
JeanLuc
10 Jun 2004, 15:27
Ce que tu indique en rouge n'est pas de l'URL rewriting.
C'est simplement la construction du lien avec des paramètres passés en méthode GET (par l'adresse URL).
Par contre la logique de ce lien est très "alambiquée":
il remplace "/" par "/" (la même chose)
il sépare les paramètres GET par des "/" au lieu de "&"....
Est-ce que c'est toi qui a retouché cela? ou alors la page désignée par FILENAME_CATEGORIES_INFO arrive à interpréter cela?
patotoche65
10 Jun 2004, 15:33
Salut Jean-luc,
Le fichier est brut de pomme, c'est l'original.
Pour le rewrit....

Désolé, je voulais bien sur dire la construction du lien, différent de celle que l'on a habituellement sur Osc.
Pour info, la page définie par FILENAME_CATEGORIES_INFO est la page (default.php d'origine que j'ai changé en index.php, normal) et elle ne l'interprète pas du tou car je boucle sur l'index tout simlement..... Bizarre cette contrib ......
Je pensai en fait qu'elle allée me faire gagner du temps par rapport à ma question initiale, mais bon ..... je pense maintenant que c'est peut être pas bon !
JeanLuc
10 Jun 2004, 15:46
Ok, c'est la contrib qu'est bancale.
Essaie quand même de remplacer le "echo" (celui en rouge) par celui-ci:
| CODE |
| echo " <a href=\"" . tep_href_link(FILENAME_DEFAULT, 'name=' . rawurlencode($this_categories_name) . "&cPath=" . $categories_id . $this_categories_id . (($this_language_code == DEFAULT_LANGUAGE) ? '' : ('&language=' . $this_language_code)), 'NONSSL', false) . "\">" . $this_categories_name . "</a><br>\n"; |
Cela devrait le faire mieux...
patotoche65
10 Jun 2004, 16:00
Re,
Je te le fais pas dire ....
| QUOTE |
| Cela devrait le faire mieux... |
effectivement, la contrib est beaucoup moins bancale maintenant
Pour la ms2, c'est Ok elle fonctionne donc bien maintenant, dès que j'en ai finis avec la gestion sous conditions, je l'adapterais pour la créload6, car c'est un plus pour le référencement
Bon, par contre, vois tu une piste pour ma question principale ?
JeanLuc
10 Jun 2004, 16:19
Si tu veux parler de l'arborescence des catégories, c'est pas un gros pb: on peut réutiliser la fonction tep_get_category_tree() utilisée dans la partie admin.
Dans catalog/includes/functions/general.php, ajoute cette fonction:
| CODE |
function tep_get_category_tree($parent_id = '0', $spacing = '', $exclude = '', $category_tree_array = '', $include_itself = false) { global $languages_id;
if (!is_array($category_tree_array)) $category_tree_array = array(); if ( (sizeof($category_tree_array) < 1) && ($exclude != '0') ) $category_tree_array[] = array('id' => '0', 'name' => TEXT_TOP);
if ($include_itself) { $category_query = tep_db_query("select cd.categories_name from " . TABLE_CATEGORIES_DESCRIPTION . " cd where cd.language_id = '" . (int)$languages_id . "' and cd.categories_id = '" . (int)$parent_id . "'"); $category = tep_db_fetch_array($category_query); $category_tree_array[] = array('id' => $parent_id, 'name' => $category['categories_name']); }
$categories_query = tep_db_query("select c.categories_id, cd.categories_name, c.parent_id from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "' and c.parent_id = '" . (int)$parent_id . "' order by c.sort_order, cd.categories_name"); while ($categories = tep_db_fetch_array($categories_query)) { if ($exclude != $categories['categories_id']) $category_tree_array[] = array('id' => $categories['categories_id'], 'name' => $spacing . $categories['categories_name']); $category_tree_array = tep_get_category_tree($categories['categories_id'], $spacing . ' ', $exclude, $category_tree_array); }
return $category_tree_array; } |
Puis dans ton fichier allcategories.php, remplace les lignes suivantes:
| CODE |
$categories_array = array(); while($categories = tep_db_fetch_array($categories_query)) { $categories_array[] = array('id' => $categories['categories_id'], 'name' => $categories['categories_name']); } |
par celle-ci:
| CODE |
| $categories_array = tep_get_category_tree(0, '', 0); |
Bon code...
patotoche65
10 Jun 2004, 16:45
Yop JeanLuc,
Ca fonctionne à merveille cette histoire ...
Bon, allez, j'abuse : Reste plus qu'a faire l'affichage de telle ou telle catégorie (exclusivement) en fonction d'un choix extérieur à la box (dans le header par exemple) et c'est parfait ...
Une idée (Oh, la le patotoche65 il abuse le garçon .....

)
JeanLuc
10 Jun 2004, 16:57
Pour afficher une catégorie en particulier, il suffit de passer en premier paramètre l'id de la catégorie. Par exemple, pour afficher uniquement la catégorie dont l'id est 1, on envoie:
| CODE |
| $categories_array = tep_get_category_tree(1, '', 0); |
A toi de récupérer la variable comme tu veux et de la transmettre comme paramètre.
ouala ouala...
patotoche65
10 Jun 2004, 17:41

Yop

,
Ok, donc si je change le param $categories_array = tep_get_category_tree(
1, '', 0); je change la catégorie correspondante. Bon, la c'est OK, a yé ai compris.
P'tit questions

:
**A quoi servent les deux autres param suivants ?
**Le bout de code que tu m'a donné, je le place dans le code de départ ? (Je pense que oui mais je préfère une confirmation vu mon médiocre niveau (non, non, pas honte en plus

))
**comment faire un lien avec ce petit bout de code ?
Merci de ta réponse .....
isnogood
10 Jun 2004, 19:39
Le second paramètre sert à identifier une chaine de caractères à mettre avant le nom de la catégorie (ici, '') : c'est le $spacing.
Le troisième paramètre sert à exclure une catégorie : c'est l'id d'une catégorie bien sûr et cela correspond à $exclude.
(PS : on remarquera la récursivité de la fonction

)
patotoche65
10 Jun 2004, 20:03
Ok,
Merci Isnogood, donc pour n'afficher qu'une seule catégo+les sous catégo, bien sur, je dois me servir du param $exclude pour exclure celles que je ne veux pas voir ?
isnogood
10 Jun 2004, 20:10
Normalement, en lisant vite le code, le premier paramètre équivaut à la catégorie, et donc cela ne devrait pas t'afficher les autres catégories.
Tu as combien de niveaux de catégories/sous catégories ?
patotoche65
10 Jun 2004, 20:23
Re,
2 (Ctaégo, sous catégo) et une à 3(Catégo, sous catégo, sous sous catégo) , mais à la rigueur, je change et la passe à 2.... J'ai réduit au max pour la navig et l'index des ch'tit robots....
JeanLuc
11 Jun 2004, 08:37
Je vois qu'Iznogood a repris le relais hier soir...
Ca marche ti maintenant?
patotoche65
11 Jun 2004, 08:59
Salut JeanLuc,
Oui pour l'adapt du code de la contrib que tu as réalisé, mais par contre je reste dans le doute pour ceci .....
| QUOTE |
**Le bout de code que tu m'a donné, je le place dans le code de départ ? (Je pense que oui mais je préfère une confirmation vu mon médiocre niveau (non, non, pas honte en plus )) **comment faire un lien avec ce petit bout de code ? |
Je sais, c'est très bète comme questions, mais bon ....il me reste 1 neurrones....
JeanLuc
11 Jun 2004, 09:30
| QUOTE |
Puis dans ton fichier allcategories.php, remplace les lignes suivantes: CODE $categories_array = array(); while($categories = tep_db_fetch_array($categories_query)) { $categories_array[] = array('id' => $categories['categories_id'], 'name' => $categories['categories_name']); }
par celle-ci: CODE $categories_array = tep_get_category_tree(0, '', 0); |
La ligne de code que j'indique génère la liste des catégorie avec leur lien (c'est la fonction tep_get_category_tree() qui fait cela).
Si tu veux une catégorie en particulier, tu doit remplacer le 0 (en rouge) par une variable contenant l'id de cette catégorie.
Dans la page ou tu envois à la page allcategories.php, tu peux par exemple générer ce lien en insérant l'id de la catégorie voulue:
| CODE |
<?php $cPath_nouveau = tep_get_path($variableDeIDdelaCategorie); echo '<a href="' . tep_href_link(FILENAME_ALLCATEGORIES, $cPath_nouveau) . '">' . 'monLien.gif' . '</a>'; ?> |
Tu génères ainsi une URL qui inclue en paramètre l'id de la catégorie du genre :
| QUOTE |
| http://www.monsite.com/.../allcategories.php?cPath_nouveau=1 |
Ici j'ai mis en exemple le cas ou $variableDeIDdelaCategorie=1
Ensuite, tu récupères simplement la variable ainsi (je rajoute un bloc if au cas ou $cPath_nouveau n'est pas défini:
| CODE |
if ($cPath_nouveau != '') { $categories_array = tep_get_category_tree($cPath_nouveau, '', 0); } else { $categories_array = tep_get_category_tree(0, '', 0); } |
Bon code...
patotoche65
11 Jun 2004, 09:57
Re,
La je dis que c'est du caviar de bosser comme ça.
Bon allez, au boulot Patotoche.....
Je fais les modifs et le reste et je reviens !
Merci !
patotoche65
11 Jun 2004, 10:17
Euuuh.....
En plus du caviar, si il pouvait être "macher".......
J'ai fais un fichier test, j'y ai copié le code
| QUOTE |
<?php $cPath_nouveau = tep_get_path($variableDeIDdelaCategorie=291); echo '<a href="' . tep_href_link(FILENAME_ALLCATEGORIES, $cPath_nouveau) . '">' . 'monLien.gif' . '</a>'; ?> |
dedans et j'ai ce message d'erreur :
| QUOTE |
| Fatal error: Call to undefined function: tep_get_path() in e:\easyphp1-7\www\crea6\cre_loaded_osc_6.0_sp1.1_fr\catalog\test_allcategories.php on line 2 |
J'suis vraiment trop nul .....
JeanLuc
11 Jun 2004, 10:56
| QUOTE |
| J'ai fais un fichier test, j'y ai copié le code |
Tu as oublié d'intégrer le fichier qui comprend les fonctions que tu utilises et notamment tep_get_path() qui est dans catalog/includes/functions/general.php.
Ce fichier est inclus au niveau de application_top.php qui lui est appelé en tête de chaque fichier à la racine du site (donc les fonctions sont accessibles dans tous ces fichiers en permanence).
Si tu veux faire un test, ajoute cette ligne en tête de ton fichier:
| CODE |
| require(DIR_WS_FUNCTIONS . 'general.php'); |
Bon code...
patotoche65
11 Jun 2004, 11:03
Merci

,

Oh , c'est trop gros la comme bourde ça......

Faudra penser à effacer tout le post sinon tous le monde va se moquer.....
Au moins, je te fait rire, c'est déja pas mal ....(je t'ai entendu exploser de rire depuis chez moi ...

)

Bon, je reviens.....
patotoche65
11 Jun 2004, 11:43
Re,
Ca y est, ça fonctionne nickel .....
Merci JeanLuc d'avoir été patient ....Isnogood, merci pour les precisions.....
Bon, il me reste plus qu'a l'adapter pour la créload6 et c'est parfait.
Merci
JeanLuc
11 Jun 2004, 12:53

Tiens-nous au courant...
Bon code...
patotoche65
11 Jun 2004, 12:57
Euuuuh, c'est clair, je pense que c'est la moindre des choses ........
Bon allez, zou... je m'y colle !
A+
patotoche65
11 Jun 2004, 17:01
Re Bonjour,
Au passage, voici un petit cadeau :
Voici donc l'adapt de cette contrib (show all categories) pour la créload6 .
1 - Crééez un fichier categories.php dans catalog/ avec ce code dedans :
<?php
| QUOTE |
/* $Id: allcategories.php,v 1.0 2003/30/04
osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com
Copyright © 2003 osCommerce Copyright © 2003 HMCservices
Released under the GNU General Public License */
require('includes/application_top.php'); include(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CATEGORIES);
// Set number of columns in listing define ('NR_COLUMNS', 3); // $breadcrumb->add(HEADING_TITLE, tep_href_link(FILENAME_CATEGORIES, '', 'NONSSL')); $content = allcategories; require(DIR_WS_TEMPLATES . TEMPLATE_NAME . '/' . TEMPLATENAME_MAIN_PAGE); ?> |
2- Crééez un fichiers allcategories.tpl.php dans la partie catalog/templates/content/ avec ce code dedans :
| QUOTE |
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"> <html <?php echo HTML_PARAMS; ?>> <head> <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>"> <?php // BOF: WebMakers.com Changed: Header Tag Controller v1.0 // Replaced by header_tags.php if ( file_exists(DIR_WS_INCLUDES . 'header_tags.php') ) { require(DIR_WS_INCLUDES . 'header_tags.php'); } else { ?> <title><?php echo TITLE ?></title> <?php } // EOF: WebMakers.com Changed: Header Tag Controller v1.0 ?>
<base href="<?php echo (getenv('HTTPS') == 'on' ? HTTPS_SERVER : HTTP_SERVER) . DIR_WS_CATALOG; ?>"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0">
<!-- body //--> <table border="0" width="100%" cellspacing="3" cellpadding="3"> <tr> <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2"> <!-- left_navigation //-->
<!-- left_navigation_eof //--> </table></td> <!-- body_text //--> <td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td width="100%"><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td class="pageHeading"><?php echo HEADING_TITLE; ?></td> <td align="right"></td> </tr> </table></td> </tr> <tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td> </tr> <tr> <td><table border="0" width="100%" cellspacing="0" cellpadding="2"> <?php $languages_query = tep_db_query("select languages_id, name, code, image, directory from " . TABLE_LANGUAGES . " order by sort_order"); while ($languages = tep_db_fetch_array($languages_query)) { $languages_array[] = array('id' => $languages['languages_id'], 'name' => $languages['name'], 'code' => $languages['code'], 'image' => $languages['image'], 'directory' => $languages['directory']); } for ($i=0; $i<sizeof($languages_array); $i++) { $this_language_id = $languages_array[$i]['id']; $this_language_name = $languages_array[$i]['name']; $this_language_code = $languages_array[$i]['code']; $this_language_image = $languages_array[$i]['image']; $this_language_directory = $languages_array[$i]['directory']; echo " <tr>\n"; $categories_query = tep_db_query("SELECT categories_id, categories_name FROM " . TABLE_CATEGORIES_DESCRIPTION . " WHERE language_id = $this_language_id ORDER BY categories_name"); //$categories_array = tep_get_category_tree(0, '', 0); //if ($cPath != '') { //$categories_array = tep_get_category_tree($cPath, '', 0); //} else { // $categories_array = tep_get_category_tree(0, '', 0); //} $categories_array = array(); while($categories = tep_db_fetch_array($categories_query)) { $categories_array[] = array('id' => $categories['categories_id'], 'name' => $categories['categories_name']); } for ($j=0; $j<NR_COLUMNS; $j++) { echo " <td class=main valign=\"top\">\n"; for ($k=$j; $k<sizeof($categories_array); $k+=NR_COLUMNS) { $this_categories_id = $categories_array[$k]['id']; $this_categories_name = $categories_array[$k]['name']; echo " <a href=\"" . tep_href_link(FILENAME_DEFAULT, 'name=' . rawurlencode($this_categories_name) . "&cPath=" . $categories_id . $this_categories_id . (($this_language_code == DEFAULT_LANGUAGE) ? '' : ('&language=' . $this_language_code)), 'NONSSL', false) . "\">" . $this_categories_name . "</a><br>\n"; } echo " </td><br>\n"; } echo " </tr>\n"; } ?> </td> </tr> </table></td> </tr> <tr> <td align="right" class="main"><br><?php echo '<a href="' . tep_href_link(FILENAME_DEFAULT, '', 'NONSSL') . '">' . tep_image_button('button_continue.gif', IMAGE_BUTTON_CONTINUE) . '</a>'; ?></td> </tr> </table></td> <!-- body_text_eof //--> <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2"> <!-- right_navigation //-->
<!-- right_navigation_eof //--> </table></td> </tr> </table> <!-- body_eof //-->
<!-- footer //-->
<!-- footer_eof //--> </body> </html> <?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?> |
3- Rajoutez le bout de code suivant dans general.php de la partie includes/fonction/ :
| QUOTE |
function tep_get_category_tree($parent_id = '0', $spacing = '', $exclude = '', $category_tree_array = '', $include_itself = false) { global $languages_id;
if (!is_array($category_tree_array)) $category_tree_array = array(); if ( (sizeof($category_tree_array) < 1) && ($exclude != '0') ) $category_tree_array[] = array('id' => '0', 'name' => TEXT_TOP);
if ($include_itself) { $category_query = tep_db_query("select cd.categories_name from " . TABLE_CATEGORIES_DESCRIPTION . " cd where cd.language_id = '" . (int)$languages_id . "' and cd.categories_id = '" . (int)$parent_id . "'"); $category = tep_db_fetch_array($category_query); $category_tree_array[] = array('id' => $parent_id, 'name' => $category['categories_name']); }
$categories_query = tep_db_query("select c.categories_id, cd.categories_name, c.parent_id from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "' and c.parent_id = '" . (int)$parent_id . "' order by c.sort_order, cd.categories_name"); while ($categories = tep_db_fetch_array($categories_query)) { if ($exclude != $categories['categories_id']) $category_tree_array[] = array('id' => $categories['categories_id'], 'name' => $spacing . $categories['categories_name']); $category_tree_array = tep_get_category_tree($categories['categories_id'], $spacing . ' ', $exclude, $category_tree_array); }
return $category_tree_array; } |
4- Inclure la ligne suivante dans le fichier filenames.php dans la partie catalog/includes/ :
| QUOTE |
| define('FILENAME_ALLCATEGORIES', 'allcategories.php'); |
5- faites un lien, de préférence, dans votre footer ou dans votre header, comme cela il sera visible dans toutes vos pages, et ainsi, les ch'tit robots n'auront plus d'excuses pour ne pas indexer toutes vos catégories facilement .....Et en plus, vos visiteurs auront toutes les catégories de votre site d'un seul clic .... C'est très utile pour les sites qui ont beaucoup de catégories...
Voilou.
Merci à JeanLuc et Isnogood pour leurs coups de pouces ....
Bon, me reste plus qu'a faire fonctionner la box catégorie avec ce système et ce sera du tout bon ......Au passage, l'affichage des catégo en fonctions de conditions, c'était mon post d'origine....
patotoche65
11 Jun 2004, 18:30
Re,
Bon, en fait, si j'ai bien compris, i faut fouiller du côté de catalog/includes/boxes/ dans le fichier de categories.php pour pouvoir modifier le contenu de la box .....
J'explique :
Par rapport à mon post initial, je désire, grace à des liens placés dans mon header, faire varier la box catégorie pour qu'elle n'affiche QUE les sous catégories correspondantes .....
Si un codeur passe par la, car je vois pas comment y toucher la dedans .....
patotoche65
11 Jun 2004, 20:57
Yop,
Une bonne avancée ...
L'affichage des produits contenus dans la catégorie principale est OK.
C'est a dire qu'en cliquant sur les liens de mon header, le developpement de l'arborescence de la catégorie dans la box se fait comme il faut, et si il y a des produits dans la catégorie principale, ils sont affichés tout a fait comme les autres produits. (tiens, je sais pas si je suis clair la ....

)
Il ne reste donc plus qu'a exclure les catégo indésirables pour n'avoir l'affichage que de la catégorie sélectionnée, avec ses sous catégories, bien sur ....
Ca avance, ça avance .....
patotoche65
11 Jun 2004, 22:15
Yop,
En creusant, je sais plus si je dois faire les modifs sur catalog/includes/boxes/categories.php ou alors sur catalog/templates/montemplates/boxes/categorie.php
J'ai bidouillé le code (a la sauvage, mais avec sauvegarde... hé, hé) dans ces 2 fichiers et j'arrive pas à exclure les catégories indésirables ....
PS : en fait, pas besoin de la contrib Show all categories, enfin je pense .... Pas grave, la communauté aura gagnée une contrib pour ms2 et une adapt pour la créload6.
patotoche65
11 Jun 2004, 22:40
Yop,
Un souvenir flash (si, si, ça m'arrive des fois

)
Fissiaux m'avais filé ce tips pour ne pas faire apparaître une catégorie dans la box categorie.php (il s'agissait de la catégorie "cadeaux") :
| QUOTE |
| $categories_query = tep_db_query("select c.categories_id, cd.categories_name , c.parent_id from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.parent_id = '0' and cd.categories_name <> 'Cadeaux' and c.categories_id = cd.categories_id and cd.language_id=' " . (int)$languages_id ."' order by sort_order, cd.categories_name "); |
Bon, maintenant, comment faire pour lier ce bout de code avec ma demande initiale .... hum, hum .....
fissiaux
11 Jun 2004, 22:46
Excuse moi, mais on a l'impression que tout ce qui a été fait entre temps s'évapore.
Peux-tu reformuler ton besoin, ton problème ?
patotoche65
11 Jun 2004, 22:52
Bonsoir Fissiaux,
| QUOTE |
| Excuse moi, mais on a l'impression que tout ce qui a été fait entre temps s'évapore. |
Entièrement d'accord, à force de chercher ...
Bon, voila :
Dans mon header, j'ai un tableau avec des liens textes qui sont en fait mes titres de catégories.
Je désire que lorsque je clique sur un de ces liens, la box catégorie ne fasse apparaître que la catégorie et les sous-catégories concernées avec une arborescence développée.
J'arrive à faire la selectiondes catégo, à développer l'arborescence.
Il ne reste plus que l'exclusion des catégories non concernées à faire ....
En fait, c'est un menu en 2 parties ....
fissiaux
11 Jun 2004, 22:55
Peux tu afficher le contenu de la box categories sur le template que tu utilises ?
patotoche65
11 Jun 2004, 22:57
Et voilou (templates Original) :
| QUOTE |
<?php /* $Id: categories.php,v 1.1.1.1 2003/09/18 19:06:16 wilt Exp $
osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com
Copyright © 2002 osCommerce
Released under the GNU General Public License
Shoppe Enhancement Controller - Copyright © 2003 WebMakers.com Linda McGrath - osCommerce@WebMakers.com */
function tep_show_category($counter) { global $foo, $categories_string, $id, $aa;
for ($a=0; $a<$foo[$counter]['level']; $a++) { if ($a == $foo[$counter]['level']-1) { $categories_string .= ">"; } else { $categories_string .= "<font color='#0000FF'> </font>"; }
} if ($foo[$counter]['level'] == 0) { if ($aa == 1) { $categories_string .= "<hr>"; } else {$aa=0;}
}
$categories_string .= '<nobr><a nowrap href="';
if ($foo[$counter]['parent'] == 0) { $cPath_new = 'cPath=' . $counter; } else { $cPath_new = 'cPath=' . $foo[$counter]['path']; }
$categories_string .= tep_href_link(FILENAME_DEFAULT, $cPath_new); $categories_string .= '">';
if ( ($id) && (in_array($counter, $id)) ) { $categories_string .= "<b><font color='#0000FF'>"; }
// display category name $categories_string .= $foo[$counter]['name'];
if ( ($id) && (in_array($counter, $id)) ) { $categories_string .= '</font></b>'; }
// if (tep_has_category_subcategories($counter)) { // $categories_string .= '->'; // }
$categories_string .= '</nobr></a>';
// if (SHOW_COUNTS == 'true') { // $products_in_category = tep_count_products_in_category($counter); // if ($products_in_category > 0) { // $categories_string .= ' (' . $products_in_category . ')'; // } }
$categories_string .= '<br>';
if ($foo[$counter]['next_id']) { tep_show_category($foo[$counter]['next_id']); } } ?> <!-- categories //--> <tr> <td> <TABLE WIDTH=173 BORDER=0 CELLPADDING=0 CELLSPACING=0> <TR> <TD COLSPAN=3><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="175" height="30"> <param name="movie" value="http://www.mikroo-bootik.com/images/Flash/bandeau_categories.swf"> <param name=quality value=high> <embed src="http://www.mikroo-bootik.com/images/Flash/bandeau_categories.swf" quality=high pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="175" height="30"></embed> </object></TD> </TR> <TR> <td> <?php
$categories_string = '';
$categories_query = tep_db_query("select c.categories_id, cd.categories_name, c.parent_id from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.parent_id = '0' and c.categories_id = cd.categories_id and cd.language_id='" . $languages_id ."' order by sort_order, cd.categories_name"); while ($categories = tep_db_fetch_array($categories_query)) { $foo[$categories['categories_id']] = array( 'name' => $categories['categories_name'], 'parent' => $categories['parent_id'], 'level' => 0, 'path' => $categories['categories_id'], 'next_id' => false );
if (isset($prev_id)) { $foo[$prev_id]['next_id'] = $categories['categories_id']; }
$prev_id = $categories['categories_id'];
if (!isset($first_element)) { $first_element = $categories['categories_id']; } }
//------------------------ if ($cPath) { $new_path = ''; $id = split('_', $cPath); reset($id); while (list($key, $value) = each($id)) { unset($prev_id); unset($first_id); $categories_query = tep_db_query("select c.categories_id, cd.categories_name, c.parent_id from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.parent_id = '" . $value . "' and c.categories_id = cd.categories_id and cd.language_id='" . $languages_id ."' order by sort_order, cd.categories_name"); $category_check = tep_db_num_rows($categories_query); if ($category_check > 0) { $new_path .= $value; while ($row = tep_db_fetch_array($categories_query)) { $foo[$row['categories_id']] = array( 'name' => $row['categories_name'], 'parent' => $row['parent_id'], 'level' => $key+1, 'path' => $new_path . '_' . $row['categories_id'], 'next_id' => false );
if (isset($prev_id)) { $foo[$prev_id]['next_id'] = $row['categories_id']; }
$prev_id = $row['categories_id'];
if (!isset($first_id)) { $first_id = $row['categories_id']; }
$last_id = $row['categories_id']; } $foo[$last_id]['next_id'] = $foo[$value]['next_id']; $foo[$value]['next_id'] = $first_id; $new_path .= '_'; } else { break; } } } tep_show_category($first_element);
$info_box_contents = array(); $info_box_contents[] = array('align' => 'left', 'text' => $categories_string ); $categories_array = tep_get_category_tree(0, '', 0); if ($cPath != '') { $categories_array = tep_get_category_tree($cPath, '', 0); } else { $categories_array = tep_get_category_tree(0, '', 0); }
// $info_box_contents[] = array('align' => 'center" valign="top', // 'text' => '<hr><a href="' . tep_href_link(FILENAME_ALLPRODS, '', 'NONSSL') . '">' . BOX_INFORMATION_ALLPRODS . '</a>');
//modif rewriting
//end modif
new infoBox($info_box_contents);
?> </TD> </TR> </TABLE> </td> </tr>
<!-- categories_eof //--> |
fissiaux
11 Jun 2004, 23:16
Dans le code
| CODE |
| $categories_query = tep_db_query("select c.categories_id, cd.categories_name, c.parent_id from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.parent_id = '0' and c.categories_id = cd.categories_id and cd.language_id='" . $languages_id ."' order by sort_order, cd.categories_name"); |
il faudrait remplacer
| CODE |
| where c.parent_id = '0' |
par
| CODE |
| where c.parent_id = '". $header_categorie ."' |
où $header_categorie est la valeur de la catégorie que tu cliques
patotoche65
11 Jun 2004, 23:22
Re,
| QUOTE |
| où $header_categorie est la valeur de la catégorie que tu cliques |

je fais comment pour lui envoyer une valeur ??
J'ai fais la modif, ras, rien ne se passe, j'ai du oublier un truc ...
fissiaux
11 Jun 2004, 23:25
Tu la passes par l'URL, genre
http://www...............&header_categorie=5Ton menu header est un ensemble d'images cliquables, chaque image renoyant une valeur de header_categorie correspondant à la catégorie qu'elle représente.
patotoche65
11 Jun 2004, 23:32
Re,
Ca correspond exactement à ce que je veux ... par contre :
Ch'tit soucis ....
Pour le test, j'ai fais 2 liens dans le header (Accessoires et Cables, dans l'ordre)
Voici les liens :
| QUOTE |
<td> <?php $cPath = tep_get_path($header_categorie=291); echo '<a href="' . tep_href_link(FILENAME_DEFAULT, $cPath_nouveau) . '">' . 'Accessoires' . '</a>'; ?> </td> <td> <?php $cPath = tep_get_path($header_categorie=315); echo '<a href="' . tep_href_link(FILENAME_DEFAULT, $cPath_nouveau) . '">' . 'Cables' . '</a>'; ?> </td> |
Lorsque j'arrive sur l'index, j'ai automatiquement les sous catégo de "Cables" qui sont affichées et je ne peut pas avoir "Accessoire" ....
fissiaux
12 Jun 2004, 07:01
Essaie cela :
| CODE |
<td> <?php $header_categorie=291; $cPath = tep_get_path(291); echo '<a href="' . tep_href_link(FILENAME_DEFAULT, $cPath_nouveau) . '">' . 'Accessoires' . '</a>'; ?> </td> <td> <?php $cPath = tep_get_path(315); echo '<a href="' . tep_href_link(FILENAME_DEFAULT, $cPath_nouveau) . '">' . 'Cables' . '</a>'; ?> </td> |
L'instruction $header_categorie=291 sert à affecter une valeur par défaut.
patotoche65
12 Jun 2004, 08:42
Re,
J'ai plus aucun param de passé dans mon url, je reste toujour la page d'acceuil .....
avec la sélection de accessoire par défault.
Url renvoyée par les liens (Accessoires et Cables) :
fissiaux
12 Jun 2004, 09:09
| CODE |
<td> <?php $header_categorie=291; $cPath_nouveau = tep_get_path(291); echo '<a href="' . tep_href_link(FILENAME_DEFAULT, $cPath_nouveau . '&header_categorie=' . $header_catgegorie) . '">' . 'Accessoires' . '</a>'; ?> </td> <td> <?php $cPath_nouveau = tep_get_path(315); echo '<a href="' . tep_href_link(FILENAME_DEFAULT, $cPath_nouveau . '&header_categorie=' . $header_catgegorie) . '">' . 'Cables' . '</a>'; ?> </td> |
patotoche65
12 Jun 2004, 09:20
Re,
Pour accessoires, c'est OK,
Pour Cables c'est ko,pourtant j'ai bien le param qui passe dans l'url.
Par contre il garde le $header_catgegorie, c'est peut être à cause de ça.
Format du lien :
| QUOTE |
| catalog/index.php?cPath=315&header_categorie= |
fissiaux
12 Jun 2004, 09:21
| CODE |
<td> <?php $header_categorie=291; $cPath_nouveau = tep_get_path(291); echo '<a href="' . tep_href_link(FILENAME_DEFAULT, $cPath_nouveau . '&header_categorie=' . $header_catgegorie) . '">' . 'Accessoires' . '</a>'; ?> </td> <td> <?php $header_categorie=315; $cPath_nouveau = tep_get_path(315); echo '<a href="' . tep_href_link(FILENAME_DEFAULT, $cPath_nouveau . '&header_categorie=' . $header_catgegorie) . '">' . 'Cables' . '</a>'; ?> </td> |
patotoche65
12 Jun 2004, 09:29
ça fonctionne pour Cables mais plus pour Accessoires.
Format du lien :
| QUOTE |
| catalog/index.php?cPath=315 |
fissiaux
12 Jun 2004, 09:33
Tu as du oublié que je suis dyslexique....
| CODE |
<td> <?php $header_categorie=291; $cPath_nouveau = tep_get_path(291); echo '<a href="' . tep_href_link(FILENAME_DEFAULT, $cPath_nouveau . '&header_categorie=' . $header_categorie) . '">' . 'Accessoires' . '</a>'; ?> </td> <td> <?php $header_categorie=315; $cPath_nouveau = tep_get_path(315); echo '<a href="' . tep_href_link(FILENAME_DEFAULT, $cPath_nouveau . '&header_categorie=' . $header_categorie) . '">' . 'Cables' . '</a>'; ?> </td> |
patotoche65
12 Jun 2004, 09:42
mdr
Pour Cables => OK,
Par contre, même avec la correction de la dyslexie

, je ne peut pas avoir Accessoires.
Pourtant les param passent bien dans l'url :
| QUOTE |
| catalog/index.php?cPath=291&header_categorie=291 |
Malgrès ça, je reste sur Cables ....
isnogood
12 Jun 2004, 09:48
Eh pourquoi ne pas essayer cela :
| CODE |
<td> <?php $cPath_nouveau = tep_get_path(291); echo '<a href="' . tep_href_link(FILENAME_DEFAULT, $cPath_nouveau . '&header_categorie=291') . '">' . 'Accessoires' . '</a>'; ?> </td> <td> <?php $cPath_nouveau = tep_get_path(315); echo '<a href="' . tep_href_link(FILENAME_DEFAULT, $cPath_nouveau . '&header_categorie=315') . '">' . 'Cables' . '</a>'; ?> </td> |
patotoche65
12 Jun 2004, 09:54
Salut Isnogood

,
Bon, avec ton bout de code, je passe bien de Accessoires à Cables et les sous catégories s'affichent bien
Par contre, lorsque je clique sur une sous catégorie, j'ai de nouveau le menu complet de la box qui s'affiche .... faudrais pas
isnogood
12 Jun 2004, 10:11
Peux tu donner un exemple d'URL d'une de tes sous-catégories ?
patotoche65
12 Jun 2004, 10:15
Voilou :
| QUOTE |
| catalog/index.php?cPath=315_324 |
catégorie Cables => sous catégorie Electrique
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.