Aide - Recherche - Membres - Calendrier
Version complète : [Resolu] affichage des catégo sous conditions
Forum osCommerce-fr > Adapter OsCommerce MS2 > Echanges développeurs
Pages : 1, 2
patotoche65
Bonjour à tous,

J'ai cherché et j'ai pas trouvé ..... confused.gif 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
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
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 biggrin.gif

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 biggrin.gif
JeanLuc
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
Salut Jean-luc,

Le fichier est brut de pomme, c'est l'original.
Pour le rewrit.... blush.gif 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
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... wink.gif
patotoche65
Re,

Je te le fais pas dire ....
QUOTE
Cela devrait le faire mieux...
effectivement, la contrib est beaucoup moins bancale maintenant biggrin.gif

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 wink.gif

Bon, par contre, vois tu une piste pour ma question principale ?
JeanLuc
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 . '&nbsp;&nbsp;&nbsp;', $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... wink.gif
patotoche65
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 ..... biggrin.gif )
JeanLuc
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... wink.gif
patotoche65
blink.gif Yop blink.gif ,

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 blush.gif :

**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 biggrin.gif ))
**comment faire un lien avec ce petit bout de code ?

Merci de ta réponse ..... blush.gif
isnogood


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 biggrin.gif )
patotoche65
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


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
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
Je vois qu'Iznogood a repris le relais hier soir... smile.gif
Ca marche ti maintenant?
patotoche65
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.... biggrin.gif
JeanLuc
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... wink.gif
patotoche65
Re,

La je dis que c'est du caviar de bosser comme ça.

Bon allez, au boulot Patotoche..... biggrin.gif

Je fais les modifs et le reste et je reviens !

Merci !
patotoche65
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 ..... blush.gif

JeanLuc
biggrin.gif biggrin.gif

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... smile.gif
patotoche65
Merci blush.gif ,

mrgreen.gif Oh , c'est trop gros la comme bourde ça...... blush.gif Faudra penser à effacer tout le post sinon tous le monde va se moquer..... biggrin.gif biggrin.gif biggrin.gif

Au moins, je te fait rire, c'est déja pas mal ....(je t'ai entendu exploser de rire depuis chez moi ... tongue.gif )

blush.gif Bon, je reviens.....
patotoche65
Re,

Ca y est, ça fonctionne nickel ..... biggrin.gif

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
smile.gif Tiens-nous au courant...

Bon code... wink.gif
patotoche65
Euuuuh, c'est clair, je pense que c'est la moindre des choses ........ biggrin.gif

Bon allez, zou... je m'y colle !

A+
patotoche65
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 . '&nbsp;&nbsp;&nbsp;', $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... biggrin.gif

Voilou.

Merci à JeanLuc et Isnogood pour leurs coups de pouces .... wink.gif

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.... biggrin.gif
patotoche65
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 ..... confused.gif

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 ..... blush.gif
patotoche65
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 .... blush.gif )

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
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 .... blush.gif

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
Yop,

Un souvenir flash (si, si, ça m'arrive des fois biggrin.gif )

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 ..... shock.gif
fissiaux


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
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 .... confused.gif

En fait, c'est un menu en 2 parties ....
fissiaux

Peux tu afficher le contenu de la box categories sur le template que tu utilises ?
patotoche65
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'>&nbsp;&nbsp;&nbsp;&nbsp;</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 .= '-&gt;';
   // }

    $categories_string .= '</nobr></a>';

   // if (SHOW_COUNTS == 'true') {
   //   $products_in_category = tep_count_products_in_category($counter);
   //   if ($products_in_category > 0) {
   //     $categories_string .= '&nbsp;(' . $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
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
Re,

QUOTE
où $header_categorie est la valeur de la catégorie que tu cliques


blink.gif 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


Tu la passes par l'URL, genre http://www...............&header_categorie=5

Ton 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
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" .... blink.gif blink.gif
fissiaux
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
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) :
QUOTE
catalog/index.php?

fissiaux
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
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
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
blink.gif

ça fonctionne pour Cables mais plus pour Accessoires. biggrin.gif

Format du lien :
QUOTE
catalog/index.php?cPath=315
fissiaux
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>



Il fallait me corriger mes $header_catgegorie en $header_categorie biggrin.gif biggrin.gif biggrin.gif biggrin.gif
patotoche65
mdr biggrin.gif

Pour Cables => OK,
Par contre, même avec la correction de la dyslexie biggrin.gif , 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 .... blink.gif
isnogood


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
Salut Isnogood wink.gif ,

Bon, avec ton bout de code, je passe bien de Accessoires à Cables et les sous catégories s'affichent bien biggrin.gif

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
Peux tu donner un exemple d'URL d'une de tes sous-catégories ?
patotoche65
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.
Invision Power Board © 2001-2013 Invision Power Services, Inc.