osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

4 Pages V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Img des catégories mères&filles dans la boxe catégories, ---| Résolu & optimisé ! |---
NoZic
posté 17 Sep 2008, 07:01
Message #51


Ceinture noire OSC
Icône de groupe

Groupe : Membres
Messages : 2872
Inscrit : 27-June 07
Lieu : Elancourt (78)
Membre no 18127



Par contre, perso, je reste sur l'idée que le code de cette boxe est beaucoup trop lourd et qu'il y a moyen d'alléger en faisant du spécifique (en partant du cPath il doit même y avoir un moyen de faire beaucoup plus simple que cette usine à gaz qu'est la boxe d'origine... c'est tellement lourd à requêter que les concepteurs l'ont mise en cache, on comprend pourquoi....)

Ce message a été modifié par gentag - 17 Sep 2008, 07:01.


--------------------
"Les solutions existent toujours depuis longtemps, il suffit de les trouver."
Go to the top of the page
 
shoprun
posté 17 Sep 2008, 07:09
Message #52


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Citation (gentag @ 17 Sep 2008, 09:48) *
Sinon l'erreur avec mon code n'est pas impossible car comme je zappe toute la partie de la construction des catégories principales et qu'il reste une ligne commentée pour dire de passer à une principale suivante (à ne pas décommenter, voilà le bordel sinon...)

Si tu pense que c'est cette partie qui cause problème, et bien j'ai modifier comme ceci en faite :
Code
    if ((int)$tree[$counter]['parent'] > 0) {
        for ($i=0; $i<$tree[$counter]['level']; $i++) {
            $categories_string .= "&nbsp;&nbsp;";
        }
    ... etc ...
    }
Donc on zappe bien les catégories dont les parent = 0, du coup pas de problème.


Ceci dit je ne pense pas que ce soit cette partie, car l'erreur vient avant d'après le retour d'erreur, quand on construit le tableau $tree, dans la 2ème requête, donc avant l'appel à la fonction tep_show_category().

Je n'est pas cette erreur, je ne sais même pas comment provoquée cette erreur.
L'erreur dit que le $tree[] n'est pas défini à un moment, donc j'en conclu qu'à un moment donné la requête retourne un $row['categorie_id'] null ou vide ou rien. Ce qui sous entends que cela viendrait de la requête, d'une ligne quelle retourne pas très conforme.
Enfin, je vois pas autre chose.

Ce message a été modifié par shoprun - 17 Sep 2008, 07:13.


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
NoZic
posté 17 Sep 2008, 08:20
Message #53


Ceinture noire OSC
Icône de groupe

Groupe : Membres
Messages : 2872
Inscrit : 27-June 07
Lieu : Elancourt (78)
Membre no 18127



En fait, le truc que j'avais fait n'affichait rien si level 0 mais le tree n'était pas touché normalement... mais sans le code (edit: et le site pour tester, le code était là dans le post...) je n'étais plus sûr de rien, je vais voir... mais je persiste en pensant que c'est vraiment trop tout ce toutim pour juste le besoin de coconimo... mrgreen.gif

Ce message a été modifié par gentag - 17 Sep 2008, 08:21.


--------------------
"Les solutions existent toujours depuis longtemps, il suffit de les trouver."
Go to the top of the page
 
cocomino
posté 17 Sep 2008, 08:55
Message #54


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1690
Inscrit : 10-October 06
Lieu : Rives du Lez
Membre no 12571



heu, pour l'erreur Undefined offset: 10, c'était sur mon code, pas sur les vôtres. mrgreen.gif -> changement de la première requête de la boxe avec le c.parent_id = '" . $cPath . "' qui automatiquement créé le tableau de sous catégories (et non des catégories parentes) -> je me demande si le chemin ne passe pas par là pour alléger le code.
en attendant, on se retrouve bien avec une requête de plus dans la boxe (celle même qu'on voulait éviter par fonction) :
Code
    $cat_name_query = tep_db_query("select c.categories_id , c.categories_image, cd.categories_name  from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = '" . $main_cat . "' and cd.categories_id = c.categories_id and cd.language_id='" . (int)$languages_id ."'");

alors pour, ceux qui suivent le sujet (et bien ils sont forts, parce que y'a de la matière tongue.gif wink.gif ), voici donc le code de gentag & shoprun compilé :
Code
<?php
/*
  $Id: categories.php,v 1.25 2003/07/09 01:13:58 hpdl Exp $

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2003 osCommerce

  Released under the GNU General Public License
*/
$cat_image = null;
function tep_show_category($counter) {
    global $tree, $categories_string, $cPath_array, $cat_image;
    
    if ((int)$tree[$counter]['parent'] > 0) {
        for ($i=0; $i<$tree[$counter]['level']; $i++) {
            $categories_string .= "&nbsp;&nbsp;";
        }
        $categories_string .= '<a href="';
        $cPath_new = 'cPath=' . $tree[$counter]['path'];
        $categories_string .= tep_href_link(FILENAME_DEFAULT, $cPath_new) . '">';
        if (isset($cPath_array) && in_array($counter, $cPath_array)) {
            //
            $cat_image = '<a href="'.tep_href_link(FILENAME_DEFAULT, $cPath_new).'">'.tep_image(DIR_WS_IMAGES.$tree[$counter]['image'], $tree[$counter]['name'], 128, 128).'</a>';
            //
            $categories_string .= '<b>';
        }
        // display category name
        $categories_string .= $tree[$counter]['name'];
        
        if (isset($cPath_array) && in_array($counter, $cPath_array)) {
            $categories_string .= '</b>';
        }
        
        if (tep_has_category_subcategories($counter)) {
            $categories_string .= '-&gt;';
        }
        
        $categories_string .= '</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 ($tree[$counter]['next_id'] != false) {
    tep_show_category($tree[$counter]['next_id']);
    }
}
?>
<!-- categories //-->
          <tr>
            <td>
<?php
if ($cPath != 0) {
    $arr = explode('_', $cPath);
    $main_cat = $arr[0];
    $cat_name_query = tep_db_query("select c.categories_id , c.categories_image, cd.categories_name  from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = '" . $main_cat . "' and cd.categories_id = c.categories_id and cd.language_id='" . (int)$languages_id ."'");
    if (tep_db_num_rows($cat_name_query) > 0) {
        $cat_name = tep_db_fetch_array($cat_name_query);
        $strg_cat_name = $cat_name['categories_name'];
        $cat_image = '<a href="'.tep_href_link(FILENAME_DEFAULT, 'cPath='.$cat_name['categories_id']).'">'.tep_image(DIR_WS_IMAGES.$cat_name['categories_image'], $cat_name['categories_name'], 128, 128).'</a>';
    }
    else {
        $strg_cat_name = BOX_HEADING_CATEGORIES;
    }
}
  $info_box_contents = array();
  $info_box_contents[] = array('text' => $strg_cat_name);

  new infoBoxHeading($info_box_contents, true, true);

  $categories_string = '';
  $tree = array();

  $categories_query = tep_db_query("select c.categories_id, cd.categories_name, c.categories_image, 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='" . (int)$languages_id ."' order by sort_order, cd.categories_name");
  while ($categories = tep_db_fetch_array($categories_query))  {
    $tree[$categories['categories_id']] = array('name' => $categories['categories_name'],
                                                'image' => $categories['categories_image'],
                                                'parent' => $categories['parent_id'],
                                                'level' => 0,
                                                'path' => $categories['categories_id'],
                                                'next_id' => false);

    if (isset($parent_id)) {
      $tree[$parent_id]['next_id'] = $categories['categories_id'];
    }

    $parent_id = $categories['categories_id'];

    if (!isset($first_element)) {
      $first_element = $categories['categories_id'];
    }
  }
  

  //------------------------
  if (tep_not_null($cPath)) {
    $new_path = '';
    reset($cPath_array);
    while (list($key, $value) = each($cPath_array)) {
      unset($parent_id);
      unset($first_id);
      $categories_query = tep_db_query("select c.categories_id, cd.categories_name, c.categories_image, c.parent_id from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.parent_id = '" . (int)$value . "' and c.categories_id = cd.categories_id and cd.language_id='" . (int)$languages_id ."' order by sort_order, cd.categories_name");
      if (tep_db_num_rows($categories_query)) {
        $new_path .= $value;
        while ($row = tep_db_fetch_array($categories_query)) {
          $tree[$row['categories_id']] = array('name' => $row['categories_name'],
                                               'image' => $row['categories_image'],
                                               'parent' => $row['parent_id'],
                                               'level' => $key+1,
                                               'path' => $new_path . '_' . $row['categories_id'],
                                               'next_id' => false);

          if (isset($parent_id)) {
            $tree[$parent_id]['next_id'] = $row['categories_id'];
          }

          $parent_id = $row['categories_id'];

          if (!isset($first_id)) {
            $first_id = $row['categories_id'];
          }

          $last_id = $row['categories_id'];
        }
        $tree[$last_id]['next_id'] = $tree[$value]['next_id'];
        $tree[$value]['next_id'] = $first_id;
        $new_path .= '_';
      } else {
        break;
      }
    }
  }
tep_show_category($first_element);  
$info_box_contents = array();
$info_box_contents[] = array('text' => $strg_cat_name);

$info_box_contents = array();
$info_box_contents[] = array('text' => $categories_string);

if (tep_not_null($cat_image)) {
    $info_box_contents[] = array('text' => $cat_image);
}
new infoBox($info_box_contents);
?>
            </td>
          </tr>
<!-- categories_eof //-->



--------------------
"Pourquoi vois-tu la paille qui est dans l'oeil de ton frère et n'aperçois-tu pas la poutre qui est dans ton oeil ?".(Saint Luc, VI-41)
Go to the top of the page
 
shoprun
posté 17 Sep 2008, 08:58
Message #55


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Citation (gentag @ 17 Sep 2008, 11:20) *
c'est vraiment trop tout ce toutim pour juste le besoin de coconimo... mrgreen.gif

Disons qu'au départ je pensais que son besoin était bien moindre que cette box d'origine, mais c'était bien une erreur d'appréciation de ma part, c'est clair.
Mais maintenant, si on regarde bien, son besoin est presque le même, à part que les catégories mères ne sont pas listés, c'est tout.
Donc finalement, je ne vois pas comment lister/déployer les catégories au fur et à mesure sans parser la catégorie de départ.
Il faut boucler, je ne pense pas que ce soit possible autrement, du moins je vois pas comment faire autrement.
Dans ce cas, la mise en cache est essentiel, surtout si on a beaucoup de catégories.

Mais ce n'est pas si énorme que ça en faite, le truc le plus gourmant la dedans c'est si on veux mettre le nombre de produit total dans chaque catégorie, c'est la condition -> if (SHOW_COUNTS == 'true'), et là c'est chaud, tu as la fonction -> tep_count_products_in_category() qui est effectuée en boucle ... Là si on a beaucoup de produits, ça peux mettre en vrac osC. Il y a un sujet épinglé la dessus il me semble.


[optimisation]
En regardant encore un le truc, il me semble qu'il y a moyen d'économiser une requête, c'est pour le nom de la catégorie mère dans l'entête du menu catégorie, car son nom peut être récupéré dans la requête qui permet de construire le breadcrumb, dans le application_top (ligne 477).
Code
// add category names or the manufacturer name to the breadcrumb trail
$strg_cat_name = null; // Initialisation de la variable
if (isset($cPath_array)) {
    for ($i=0, $n=sizeof($cPath_array); $i<$n; $i++) {
        $categories_query = tep_db_query("select categories_name from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$cPath_array[$i] . "' and language_id = '" . (int)$languages_id . "'");
        if (tep_db_num_rows($categories_query) > 0) {
            $categories = tep_db_fetch_array($categories_query);
            // Le premier enregistrement correspond à la catégorie mère
            if ($i == 0) $strg_cat_name = $categories['categories_name'];
            //
            $breadcrumb->add($categories['categories_name'], tep_href_link(FILENAME_DEFAULT, 'cPath=' . implode('_', array_slice($cPath_array, 0, ($i+1)))));
        } else {
            break;
        }
    }
}
elseif (isset($HTTP_GET_VARS['manufacturers_id'])) {
    $manufacturers_query = tep_db_query("select manufacturers_name from " . TABLE_MANUFACTURERS . " where manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "'");
    if (tep_db_num_rows($manufacturers_query)) {
        $manufacturers = tep_db_fetch_array($manufacturers_query);
        $breadcrumb->add($manufacturers['manufacturers_name'], tep_href_link(FILENAME_DEFAULT, 'manufacturers_id=' . $HTTP_GET_VARS['manufacturers_id']));
    }
}

Ensuite, dans la box catégorie, on avait ceci :
Code
if ($cPath != 0) {
    $arr = explode('_', $cPath);
    ... etc ...
}

A remplacer par :
Code
if (tep_not_null($strg_cat_name)) {
    $info_box_contents = array();
    $info_box_contents[] = array('text' => $strg_cat_name);
    new infoBoxHeading($info_box_contents, true, false);
}


Ce message a été modifié par shoprun - 17 Sep 2008, 09:07.


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
NoZic
posté 17 Sep 2008, 09:10
Message #56


Ceinture noire OSC
Icône de groupe

Groupe : Membres
Messages : 2872
Inscrit : 27-June 07
Lieu : Elancourt (78)
Membre no 18127



Euh là je dirais qu'il n'y a presque plus que du shoprun... mais comme d'hab, ça fonctionne nickel, c'est le but smile.gif

Je savais que ce n'était pas si compliqué que ça, juste que c'est vrai que c'est un peu lourd (le tree est toujours intégral si je ne me trompe pas...), heureusement il y a le cache... si tu en fait une contrib', indique bien dans l'install' ou la description que l'activation du cache est recommandée (bon de toute façon, l'activation du cache EST recommandée).

Bon, c'est vrai, ça ne changeras pas le temps de chargement de la page par rapport au code normal, mais c'est justement ça le problème, ça devrait... si tu as dix catégories principales contenant chacunes dix catégories (déjà vu... et même pire...), tu devrais économiser 90 requêtes, ce qui n'est pas négligeable et devrait se ressentir...

Sinon, bah... champagne ! cool.gif ça y est c'est fait... (un petit RESOLU dans le titre pour respecter les règles d'usage du forum svp biggrin.gif )


--------------------
"Les solutions existent toujours depuis longtemps, il suffit de les trouver."
Go to the top of the page
 
shoprun
posté 17 Sep 2008, 09:19
Message #57


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Citation (gentag @ 17 Sep 2008, 12:10) *
Euh là je dirais qu'il n'y a presque plus que du shoprun..

Ce n'était pas le but, mais pour enfoncer un peu le bouchon quand même, c'est que les 2 idées ici je les avaient données depuis le début, mon premier post.
Citation
Ceci dit, il me semble qu'il peut avoir au moins 2 moyens d'obtenir le nom de l'image de la catégorie courante.
1/ La première peut ce faire dans la box categories, suffit de rajouter le champ categories_image dans les requêtes et aussi dans les tableaux.
2/ Dans le application_top.php aussi il devrait avoir moyen, (ligne 477).


Mais je crois bien que c'est moi qui foutu tout ce bordel aussi mrgreen.gif laugh.gif

M'enfin, c'est le résultat qui compte smile.gif

Ce message a été modifié par shoprun - 17 Sep 2008, 09:26.


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
cocomino
posté 17 Sep 2008, 09:33
Message #58


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1690
Inscrit : 10-October 06
Lieu : Rives du Lez
Membre no 12571



bah non c pas bon si on supprime le code de gentag, on a plus l'image de la cat principale unsure.gif


--------------------
"Pourquoi vois-tu la paille qui est dans l'oeil de ton frère et n'aperçois-tu pas la poutre qui est dans ton oeil ?".(Saint Luc, VI-41)
Go to the top of the page
 
shoprun
posté 17 Sep 2008, 09:39
Message #59


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Citation (coconimo @ 17 Sep 2008, 12:33) *
bah non c pas bon si on supprime le code de gentag, on a plus l'image de la cat principale unsure.gif

Faut pas le supprimer, mais le remplacer par le nouveau, mais avant faut récupérer son nom en exploitant la requête qui ce fait dans le application_top.php

Ok, je vois le problème.

Mais bon, faut arrêter de faire des réponses à l'emporte pièce.
Tu veux à chaque fois un code finalisé, tu te concentre pas sur l'idée.
Si on obtien son nom, c'est qu'il y a moyen de récupérer son image, non ?

Donc faut juste créer 2 variables ou je quoi d'autre (une juste pour le nom, et une autre pour le lien/image).
Cependant, c'est vrai qu'il faut modifier la requête, pour récupérer le nom de l'image qui elle ce trouve dans la table categorie, ce n'est qu'une question d'ajout de la table, du nom du champ, son ID, et une jointure.

Enfin, plus tard je vois ça, mais il y a moyen d'économiser une requête en exploitant celle ci ...

Ce message a été modifié par shoprun - 17 Sep 2008, 09:49.


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
cocomino
posté 17 Sep 2008, 09:48
Message #60


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1690
Inscrit : 10-October 06
Lieu : Rives du Lez
Membre no 12571



Citation (shoprun @ 17 Sep 2008, 10:58) *
Citation (gentag @ 17 Sep 2008, 11:20) *
c'est vraiment trop tout ce toutim pour juste le besoin de coconimo... mrgreen.gif


[optimisation]
En regardant encore un le truc, il me semble qu'il y a moyen d'économiser une requête, c'est pour le nom de la catégorie mère dans l'entête du menu catégorie, car son nom peut être récupéré dans la requête qui permet de construire le breadcrumb, dans le application_top (ligne 477).
Code
// add category names or the manufacturer name to the breadcrumb trail
$strg_cat_name = null; // Initialisation de la variable
if (isset($cPath_array)) {
    for ($i=0, $n=sizeof($cPath_array); $i<$n; $i++) {
        $categories_query = tep_db_query("select categories_name from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$cPath_array[$i] . "' and language_id = '" . (int)$languages_id . "'");
        if (tep_db_num_rows($categories_query) > 0) {
            $categories = tep_db_fetch_array($categories_query);
            // Le premier enregistrement correspond à la catégorie mère
            if ($i == 0) $strg_cat_name = $categories['categories_name'];
            //
            $breadcrumb->add($categories['categories_name'], tep_href_link(FILENAME_DEFAULT, 'cPath=' . implode('_', array_slice($cPath_array, 0, ($i+1)))));
        } else {
            break;
        }
    }
}
elseif (isset($HTTP_GET_VARS['manufacturers_id'])) {
    $manufacturers_query = tep_db_query("select manufacturers_name from " . TABLE_MANUFACTURERS . " where manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "'");
    if (tep_db_num_rows($manufacturers_query)) {
        $manufacturers = tep_db_fetch_array($manufacturers_query);
        $breadcrumb->add($manufacturers['manufacturers_name'], tep_href_link(FILENAME_DEFAULT, 'manufacturers_id=' . $HTTP_GET_VARS['manufacturers_id']));
    }
}

Ensuite, dans la box catégorie, on avait ceci :
Code
if ($cPath != 0) {
    $arr = explode('_', $cPath);
    ... etc ...
}

A remplacer par :
Code
if (tep_not_null($strg_cat_name)) {
    $info_box_contents = array();
    $info_box_contents[] = array('text' => $strg_cat_name);
    new infoBoxHeading($info_box_contents, true, false);
}



appliqué à la lettre.
si je te suis bien, je remplace la boucle complète (donc la requète s'en va avec) :
Code
if ($cPath != 0) {
    $arr = explode('_', $cPath);
    $main_cat = $arr[0];
    $cat_name_query = tep_db_query("select c.categories_id , c.categories_image, cd.categories_name  from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = '" . $main_cat . "' and cd.categories_id = c.categories_id and cd.language_id='" . (int)$languages_id ."'");
    if (tep_db_num_rows($cat_name_query) > 0) {
        $cat_name = tep_db_fetch_array($cat_name_query);
        $strg_cat_name = $cat_name['categories_name'];
        $cat_image = '<a href="'.tep_href_link(FILENAME_DEFAULT, 'cPath='.$cat_name['categories_id']).'">'.tep_image(DIR_WS_IMAGES.$cat_name['categories_image'], $cat_name['categories_name'], 128, 128).'</a>';
    }
    else {
        $strg_cat_name = BOX_HEADING_CATEGORIES;
    }
}
  $info_box_contents = array();
  $info_box_contents[] = array('text' => $strg_cat_name);

  new infoBoxHeading($info_box_contents, true, true);

?


--------------------
"Pourquoi vois-tu la paille qui est dans l'oeil de ton frère et n'aperçois-tu pas la poutre qui est dans ton oeil ?".(Saint Luc, VI-41)
Go to the top of the page
 
cocomino
posté 17 Sep 2008, 09:52
Message #61


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1690
Inscrit : 10-October 06
Lieu : Rives du Lez
Membre no 12571



oki shoprun, donc j'exploite la requète du breadcrumb dans le fichier application_top pour appeler l'image également, ça je sais faire à l'aise avec la jointure sur la table categories)
heu, je demande pas du tout cuit, il me semble que je ne fonctionne pas comme cela sur ce forum (ça fait 2 fois que la reflexion est faite, c'est assez vexant ... mrgreen.gif )

Ce message a été modifié par coconimo - 17 Sep 2008, 09:56.


--------------------
"Pourquoi vois-tu la paille qui est dans l'oeil de ton frère et n'aperçois-tu pas la poutre qui est dans ton oeil ?".(Saint Luc, VI-41)
Go to the top of the page
 
NoZic
posté 17 Sep 2008, 09:57
Message #62


Ceinture noire OSC
Icône de groupe

Groupe : Membres
Messages : 2872
Inscrit : 27-June 07
Lieu : Elancourt (78)
Membre no 18127



Juste si je peux me permettre tep_not_null() est une fonction faite pour simplifier le code pour ceux qui ne savent pas ce qu'ils vont tester (vu que ce n'est pas ton cas shoprun, je suis même étonné que tu l'utilises...), c'est une grosse usine à gaz aussi...

J'utilises au maximum les fonctions d'osc mais là franchement celle là... si tu sais que tu testes une chaîne, un simple : $strg != "" ou encore mais moins optimisé strlen($strg) != 0 ou à la delete (mais j'aime moins, c'est trop compter sur la permissivité du php, on sait jamais, si un jour ça change faudra tout réécrire) $strg


--------------------
"Les solutions existent toujours depuis longtemps, il suffit de les trouver."
Go to the top of the page
 
shoprun
posté 17 Sep 2008, 10:26
Message #63


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Citation (coconimo @ 17 Sep 2008, 12:52) *
heu, je demande pas du tout cuit, il me semble que je ne fonctionne pas comme cela sur ce forum (ça fait 2 fois que la reflexion est faite, c'est assez vexant ... mrgreen.gif )

Ok, désolé, excuse moi wink.gif

N'empêche faut pas perdre de vu qu'on est sur un forum, on ne se vois pas, alors on interprète les choses, cela inconsciemment.

J'ai donné une solution, certes pas abouti, mais 5 minutes après tu dis en une seule phase "ça marche pas en le supprimant" ?
Alors que veux tu, j'interprète ça mal aussi, car je me dis quand bien même que ça marche pas, l'idée est là.
Aussi, j'attendais plus une réponse du genre : "Je ne comprends, car l'image ne s'affiche plus, comment ce fait il " ...

Donc répondre du tac o tac "ça marche pas" j'ai jamais apprécié ça, que je raconte des craks ou pas ...

Mais t'inquietes pas, je me focalise pas sur ce genre de détail, je t'ai répondu aussi du "tac o tac", ça m'a énervé de lire ta réponse je te l'accorde, mais je me calme aussi vite ...


Maintenant que l'idée et là et que tu peux être sûr qu'il y a moyen d'économiser cette requête, faut juste trouver "le truc".



@Gentag
Et bien je vais t'étonner, mais j'utilise couramment cette fonction. Peut être par flemmardise, mais par (mauvaise) habitude surement.
Mais pas à tour de bras, il y a des cas ou cette fonction est trompeuse, elle est a évitée, un empty() tout seul et de loin préférable, voir le seul moyen.
Donc je sais l'éviter quand il faut, la dessus t'inquiètes pas ...
J'ai moi même dit sur ce forum que osC à tendance à mélanger les types (null, vide, false, 0) et cette fonction en fait partie, je le sais.
Mais c'est vrai qu'un simple strlen() est tout aussi efficace dans des cas comme ici, et même plus rapide, c'est certain.
Je note la remarque ... ceci dit ...

Ce message a été modifié par shoprun - 17 Sep 2008, 10:33.


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
cocomino
posté 17 Sep 2008, 10:27
Message #64


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1690
Inscrit : 10-October 06
Lieu : Rives du Lez
Membre no 12571



oki, la jointure est faite :
j'ai donc mis dans application_top :
Code
// add category names or the manufacturer name to the breadcrumb trail
  $strg_cat_name = null; // Initialisation de la variable
  $parent_image = null; // initialisation de la variable image
  if (isset($cPath_array)) {
    for ($i=0, $n=sizeof($cPath_array); $i<$n; $i++) {
      $categories_query = tep_db_query("select cd.categories_name, c.categories_image from " . TABLE_CATEGORIES_DESCRIPTION . " cd, " . TABLE_CATEGORIES . " c where cd.categories_id = '" . (int)$cPath_array[$i] . "' and c.categories_id = '" . (int)$cPath_array[$i] . "' and language_id = '" . (int)$languages_id . "'");
      if (tep_db_num_rows($categories_query) > 0) {
        $categories = tep_db_fetch_array($categories_query);
        if ($i == 0) {
        $strg_cat_name = $categories['categories_name'];
        $parent_image = '<a href="'.tep_href_link(FILENAME_DEFAULT, 'cPath='.(int)$cPath_array[$i]).'">'.tep_image(DIR_WS_IMAGES.$categories['categories_image'], $categories['categories_name'], 128, 128).'</a>';
        }
        $breadcrumb->add($categories['categories_name'], tep_href_link(FILENAME_DEFAULT, 'cPath=' . implode('_', array_slice($cPath_array, 0, ($i+1)))));
      } else {
        break;
      }
    }

et dans la boxe catégories:
rajouter à global mon $parent_image; nan, suis je c..., y'en a pas utilité !
et dans la construction de l'info_box :
Code
if (tep_not_null($cat_image)) {
    $info_box_contents[] = array('text' => $cat_image);
}
elseif (tep_not_null($parent_image)) {
    $info_box_contents[] = array('text' => $parent_image);
}

j'ai même mis un tep_not_null pour faire plaisir à gentag ... cool.gif

le code fonctionne, delà à dire qu'il soit le plus juste ... c'est autre chose ...

Ce message a été modifié par coconimo - 17 Sep 2008, 10:34.


--------------------
"Pourquoi vois-tu la paille qui est dans l'oeil de ton frère et n'aperçois-tu pas la poutre qui est dans ton oeil ?".(Saint Luc, VI-41)
Go to the top of the page
 
NoZic
posté 17 Sep 2008, 11:46
Message #65


Ceinture noire OSC
Icône de groupe

Groupe : Membres
Messages : 2872
Inscrit : 27-June 07
Lieu : Elancourt (78)
Membre no 18127



Re,

Bah ton attention me touche coconimo, vrai, mais tu n'as pas dû bien lire ce que j'ai mis... je disais que si on connait le type de ce que l'on teste, il faut proscrire cette fonction (certes confortable) mais qui franchement est bien compliquée pour tester une chaîne... (si on retranscrit tout ça en ce qui va être interprété par le proc' bah à mon avis, tu fais vingt pages ecran pour interpréter le tep_not_null alors que tu dois rester dans les 5-6 pages ecran pour un test de base, c'est lourd l'assembleur...)

Ce message a été modifié par gentag - 17 Sep 2008, 11:46.


--------------------
"Les solutions existent toujours depuis longtemps, il suffit de les trouver."
Go to the top of the page
 
cocomino
posté 17 Sep 2008, 12:26
Message #66


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1690
Inscrit : 10-October 06
Lieu : Rives du Lez
Membre no 12571



sauf que strlen() ne s'applique pas dans ce cas, car lorsqu'une catégorie n'a pas d'image, le champs se met à NULL, donc 4 caractères ...
d'ailleurs le test tep_not_null ne remplit pas son rôle puisque j'ai une image vide mais avec le chemin relatif au répertoire image...

Ce message a été modifié par coconimo - 17 Sep 2008, 12:39.


--------------------
"Pourquoi vois-tu la paille qui est dans l'oeil de ton frère et n'aperçois-tu pas la poutre qui est dans ton oeil ?".(Saint Luc, VI-41)
Go to the top of the page
 
shoprun
posté 17 Sep 2008, 13:04
Message #67


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



@Coconimo
Je viens d'essayer ton code, ça me parais tout à fait correcte, nickel même.
Peut être la fin de cette étape ...

@Gentag
(Pas de polémique, on discute smile.gif )
Que cette fonction tep_not_null soit une usine à gaz, alors là quand même pas, faut pas exagérer.
La fonction (d'origine) la voici :
Code
  function tep_not_null($value) {
    if (is_array($value)) {
      if (sizeof($value) > 0) {
        return true;
      } else {
        return false;
      }
    } else {
      if (($value != '') && (strtolower($value) != 'null') && (strlen(trim($value)) > 0)) {
        return true;
      } else {
        return false;
      }
    }
  }
Ca casse pas des briques, je ne vois pas qu'est ce qui pourrait provoquer des ralentissement.

Puis le choix d'utiliser tep_not_null() au lieu d'un strlen() peut ce justifier, car cette fonction tep_not_null() élimine en quelque sorte toutes variables : null, vide, 0, false

Exemple tout simple.
On a une variable qui est égale à 0 :
$test = 0;
Si on fait un -> if (tep_not_null($test)) cette condition est Faux, entre pas dans la condition, $test est considéré comme null.
Si on fait un -> if (strlen($test) != 0) cette condition est Vrai, on entre dans la condition. 0 est converti en une chaine contenant 1 caractère. Si on mets $test = 20; -> 2 caractères, donc toujours vrai.

C'est quand même pas la même chose, non ?

Un strlen() c'est piégeant en fin de compte, becarefull !
J'avais jamais fait ce petit test, je viens de le faire, c'est assez surprenant, mais logique en fin de compte.

Ce message a été modifié par shoprun - 17 Sep 2008, 13:27.


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
NoZic
posté 17 Sep 2008, 13:35
Message #68


Ceinture noire OSC
Icône de groupe

Groupe : Membres
Messages : 2872
Inscrit : 27-June 07
Lieu : Elancourt (78)
Membre no 18127



Eh ! Mais euh !
Je sais bien que je suis un poil "épidermique" mais c'est pas la peine de prendre des gants avec moi à chaque fois... rolleyes.gif
EDIT : et puis depuis notre discussion sur le flash, je sais qu'on peut discuter ensemble, pas de soucis (même si ça ressemblait à une joute, ça m'a bien fait marrrer...)

Effectivement vu comme ça... mais bon ce que je disais en gros, c'est que plus on fait court, plus on optimise, rappeler une fonction à chaque fois pour faire des tests qu'on peut faire sans, c'est pas LE super truc... vu qu'on parlait d'optimisation...

L'exemple le plus flagrant que j'ai vu, c'est mon prof d'info (ça fait loin...) qui l'a mis en évidence en C (mais c'est pareil pour tous les langages) avec une fonction d'affichage (printf je crois...) et une équivalente plus pratique à utiliser définie, dont on avait le code pour être plus précis... (je ne sais plus laquelle...) -> il a fait une équivalence en assembleur à printf et une à la fonction équivalente -> 5 pages écran de plus... wouaie...

[EDIT de relecture] pour ton exemple, c'est tiré par les cheveux, tu ne vas pas faire un strlen d'un entier, c'est un peu "béta", c'est pour ça que je spécifiais si l'on sait ce que l'on teste...

Ce message a été modifié par gentag - 17 Sep 2008, 14:51.


--------------------
"Les solutions existent toujours depuis longtemps, il suffit de les trouver."
Go to the top of the page
 
cocomino
posté 17 Sep 2008, 13:45
Message #69


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1690
Inscrit : 10-October 06
Lieu : Rives du Lez
Membre no 12571



pouuuuuuuuuuuuuce !!!
pas la peine d'argumenter, dans les deux cas, si la catégorie/ss catégorie n'a pas d'image, on se retrouve avec une image vide (portant le nom de la cat ou ss cat), bref les chaînes $cat_image et $parent_image ne sont jamais vide.
j'avais gérer ça avec ma fonction, vais retourner dans mon ancien code sortir le truc ...
en l'état, le code est presque fini...


--------------------
"Pourquoi vois-tu la paille qui est dans l'oeil de ton frère et n'aperçois-tu pas la poutre qui est dans ton oeil ?".(Saint Luc, VI-41)
Go to the top of the page
 
shoprun
posté 17 Sep 2008, 13:51
Message #70


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Citation
c'est que plus on fait court, plus on optimise

Exacte, je suis d'accord, sans compter que c'est un peu ça qui a fait le succès de Php, c'est permissif, on fait des test minimum, simple à faire et à comprendre, et surtout, ça va vite, très vite ...

Cependant, la tendance actuelle est de faire de en plus complexe, et la POO par exemple contribue à rendre les applications de plus en plus lourdes, les test et autre traitements sont de plus en verrouillés, beaucoup de codes, etc, etc ...

Dans le cadre ici, je me contenterais effectivement de faire des test assez simple, du baba.
Etant donné que l'on part sur le faite d'afficher l'image des catégories, alors le minimum et de faire en sorte que cette image soit présente.
Du coup, là ou il faudrait un minimum verrouiller le truc, c'est du coté admin.
En premier, la BDD actuelle et sur le champ categories_image accepte les NULL, et bien il faudrait ne pas accepter de NULL, donc avoir ceci -> `categories_image` varchar(64) NOT NULL

Ensuite, dans le code coté admin toujours, faire en sorte de ne pas pouvoir créer ou modifier une catégorie sans qu'il y est une image.
En faisant ceci on limite pas mal le problème du manque d'image.

Ce message a été modifié par shoprun - 17 Sep 2008, 13:56.


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
delete
posté 17 Sep 2008, 13:52
Message #71


2eme dan OSC
Icône de groupe

Groupe : Bannis
Messages : 3022
Inscrit : 12-November 07
Lieu : Massilia
Membre no 19718



Citation (gentag @ 17 Sep 2008, 14:35) *
(je ne sais plus laquelle...) -> il a fait une équivalence en assembleur à printf et une à la fonction équivalente -> 5 pages écran de plus... wouaie...


Oulà mais nous ne sommes plus à l'époque du proc 286, AT86 ou pire ...

En C je mettait les strings dans des structures car un strcpy faisait autant d'instructions CPU/assembleur qu'il y avait de caractères,
Alors qu'avec une copie de structure, ça faisait 3 instructions en assembleur quelle que soit sa taille. D'où un gain de performances énorme.

Mais maintenant, de l'interprété, au vue de la performance des processeurs actuels, ce n'est pas un frein. La fonction tep_not_null remplit parfaitement sa mission. Pourtant dans mon cas j'ai plus tendance à faire autrement. Mais la sémantique osC n'est pas du tout mauvaise à ce niveau du code.

Ce qui est *PENALISANT*, ce sont les multiples requêtes SQL pour rien à tous les niveaux du code. C'est certainement pour ca que Coconimo est aller chercher un bout de code que j'ai pondu (je ne sais plus où il est) afin d'avoir l'ensemble des catégories et sous catégories en une requête (enfin j'imagine, si c'est pas le cas il vaut mieux le faire).

D'ailleurs, aujourd'hui ca fait deux posts que j'actualise sur le sujet en question.

Désolé : C'est la Saint-Gentag aujourd'hui wink.gif wink.gif wink.gif

tongue.gif



Go to the top of the page
 
cocomino
posté 17 Sep 2008, 14:06
Message #72


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1690
Inscrit : 10-October 06
Lieu : Rives du Lez
Membre no 12571



pour une categorie mère sans image, il suffit de rajouter la conditionnelle :
Code
if(tep_not_null($categories['categories_image'])){

dans l'application_top,
et pour les catégories filles, il suffit de rajouter la conditionnelle :
Code
if (tep_not_null($tree[$counter]['image'])){

avant la construction de la variable $cat_image.

Bon, hé bien tous les cas de figure maintenant sont gérés, le code est nikel (pas de notice ou d'erreur), je vais publier un dernier post qui va résumer tout ça.


Ce message a été modifié par coconimo - 17 Sep 2008, 15:00.


--------------------
"Pourquoi vois-tu la paille qui est dans l'oeil de ton frère et n'aperçois-tu pas la poutre qui est dans ton oeil ?".(Saint Luc, VI-41)
Go to the top of the page
 
cocomino
posté 17 Sep 2008, 15:14
Message #73


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1690
Inscrit : 10-October 06
Lieu : Rives du Lez
Membre no 12571



alors la solution suivante est :
pour un affichage des sous catégories (et leurs filles) avec ou sans leurs images dans la boxe catégories (sachant que les catégories doivent restées accessible par un menu dans le header, biensûr):
fichier catalog/includes/column_left.php :
ajouter avant :
Code
if ((USE_CACHE == 'true') && empty($SID)) {

ce code :
Code
if ($cPath != 0){

et après celui :
Code
include(DIR_WS_BOXES . 'categories.php');
  }

ceci :
Code
}

dans le fichier catalog/includes/application_top.php :
changer :
Code
if (isset($cPath_array)) {
    for ($i=0, $n=sizeof($cPath_array); $i<$n; $i++) {
      $categories_query = tep_db_query("select categories_name from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$cPath_array[$i] . "' and language_id = '" . (int)$languages_id . "'");
      if (tep_db_num_rows($categories_query) > 0) {
        $categories = tep_db_fetch_array($categories_query);
        $breadcrumb->add($categories['categories_name'], tep_href_link(FILENAME_DEFAULT, 'cPath=' . implode('_', array_slice($cPath_array, 0, ($i+1)))));
      } else {
        break;
      }
    }

par :
Code
$strg_cat_name = null; // Initialisation de la variable
  $parent_image = null; // initialisation de la variable image
  if (isset($cPath_array)) {
    for ($i=0, $n=sizeof($cPath_array); $i<$n; $i++) {
      $categories_query = tep_db_query("select cd.categories_name, c.categories_image from " . TABLE_CATEGORIES_DESCRIPTION . " cd, " . TABLE_CATEGORIES . " c where cd.categories_id = '" . (int)$cPath_array[$i] . "' and c.categories_id = '" . (int)$cPath_array[$i] . "' and language_id = '" . (int)$languages_id . "'");
      if (tep_db_num_rows($categories_query) > 0) {
        $categories = tep_db_fetch_array($categories_query);
        if ($i == 0) {
        $strg_cat_name = $categories['categories_name'];
        if(tep_not_null($categories['categories_image'])){
        $parent_image = '<a href="'.tep_href_link(FILENAME_DEFAULT, 'cPath='.(int)$cPath_array[$i]).'">'.tep_image(DIR_WS_IMAGES. $categories['categories_image'], $categories['categories_name'], SUBCATEGORY_IMAGE_WIDTH, SUBCATEGORY_IMAGE_WIDTH).'</a>';
        }
        }
        $breadcrumb->add($categories['categories_name'], tep_href_link(FILENAME_DEFAULT, 'cPath=' . implode('_', array_slice($cPath_array, 0, ($i+1)))));
      } else {
        break;
      }
    }

enfin changer le code complet du fichier catalog/includes/boxes/categories.php avec celui ci :
Code
<?php
/*
  $Id: categories.php,v 1.25 2003/07/09 01:13:58 hpdl Exp $

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2003 osCommerce

  Released under the GNU General Public License
*/
$cat_image = null;
function tep_show_category($counter) {
    global $tree, $categories_string, $cPath_array, $cat_image;
    
    if ((int)$tree[$counter]['parent'] > 0) {
        for ($i=0; $i<$tree[$counter]['level']; $i++) {
            $categories_string .= "&nbsp;&nbsp;";
        }
        $categories_string .= '<a href="';
        $cPath_new = 'cPath=' . $tree[$counter]['path'];
        $categories_string .= tep_href_link(FILENAME_DEFAULT, $cPath_new) . '">';
        if (isset($cPath_array) && in_array($counter, $cPath_array)) {
            //construction de l'image des catégories filles.
            if (tep_not_null($tree[$counter]['image'])){            
            $cat_image = '<a href="'.tep_href_link(FILENAME_DEFAULT, $cPath_new).'">'.tep_image(DIR_WS_IMAGES. $tree[$counter]['image'], $tree[$counter]['name'], SUBCATEGORY_IMAGE_WIDTH, SUBCATEGORY_IMAGE_WIDTH).'</a>';
            }
        
            $categories_string .= '<b>';
        }
        // display category name
        $categories_string .= $tree[$counter]['name'];
        
        if (isset($cPath_array) && in_array($counter, $cPath_array)) {
            $categories_string .= '</b>';
        }
        
        if (tep_has_category_subcategories($counter)) {
            $categories_string .= '-&gt;';
        }
        
        $categories_string .= '</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 ($tree[$counter]['next_id'] != false) {
    tep_show_category($tree[$counter]['next_id']);
    }
}
?>
<!-- categories //-->
          <tr>
            <td>
<?php

if (tep_not_null($strg_cat_name)) {
    $info_box_contents = array();
    $info_box_contents[] = array('text' => $strg_cat_name);

}
  
  new infoBoxHeading($info_box_contents, true, true);
  $categories_string = '';
  $tree = array();

  $categories_query = tep_db_query("select c.categories_id, cd.categories_name, c.categories_image, 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='" . (int)$languages_id ."' order by sort_order, cd.categories_name");
  
  while ($categories = tep_db_fetch_array($categories_query))  {
    $tree[$categories['categories_id']] = array('name' => $categories['categories_name'],
                                                'image' => $categories['categories_image'],
                                                'parent' => $categories['parent_id'],
                                                'level' => 0,
                                                'path' => $categories['categories_id'],
                                                'next_id' => false);
    
    if (isset($parent_id)) {
      $tree[$parent_id]['next_id'] = $categories['categories_id'];
    }

    $parent_id = $categories['categories_id'];

    if (!isset($first_element)) {
      $first_element = $categories['categories_id'];
    }
    
    
  }
  

  //------------------------
  if (tep_not_null($cPath)) {
    $new_path = '';
    reset($cPath_array);
    while (list($key, $value) = each($cPath_array)) {
      unset($parent_id);
      unset($first_id);
      $categories_query = tep_db_query("select c.categories_id, cd.categories_name, c.categories_image, c.parent_id from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.parent_id = '" . (int)$value . "' and c.categories_id = cd.categories_id and cd.language_id='" . (int)$languages_id ."' order by sort_order, cd.categories_name");
      
       if (tep_db_num_rows($categories_query)) {
      
        $new_path .= $value;
        while ($row = tep_db_fetch_array($categories_query)) {
          $tree[$row['categories_id']] = array('name' => $row['categories_name'],
                                               'image' => $row['categories_image'],
                                               'parent' => $row['parent_id'],
                                               'level' => $key+1,
                                               'path' => $new_path . '_' . $row['categories_id'],
                                               'next_id' => false);
        

          if (isset($parent_id)) {
            $tree[$parent_id]['next_id'] = $row['categories_id'];
          }

          $parent_id = $row['categories_id'];

          if (!isset($first_id)) {
            $first_id = $row['categories_id'];
          }

          $last_id = $row['categories_id'];
          
        
        }
        $tree[$last_id]['next_id'] = $tree[$value]['next_id'];
        $tree[$value]['next_id'] = $first_id;
        $new_path .= '_';
        
      } else {
        break;
      }
    }
  }
tep_show_category($first_element);  
$info_box_contents = array();
$info_box_contents[] = array('text' => $strg_cat_name);

$info_box_contents = array();
$info_box_contents[] = array('text' => $categories_string);

if ($cat_image) {    
    $info_box_contents[] = array('text' => $cat_image);
}else{    
    $info_box_contents[] = array('text' => $parent_image);
}

new infoBox($info_box_contents);
?>
            </td>
          </tr>
<!-- categories_eof //-->


specials thanks : shoprun & gentag & coconimo cool.gif

je laisse le mot de la fin aux deux premiers intervenants.


--------------------
"Pourquoi vois-tu la paille qui est dans l'oeil de ton frère et n'aperçois-tu pas la poutre qui est dans ton oeil ?".(Saint Luc, VI-41)
Go to the top of the page
 
shoprun
posté 17 Sep 2008, 15:42
Message #74


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Citation (coconimo @ 17 Sep 2008, 18:14) *
je laisse le mot de la fin aux deux premiers intervenants.

Impeccable tout ça.
Pour ma part il y a plus rien à dire ... J'vais m'ennuyer du coup laugh.gif

En tout cas, vu tous les post qu'il a fallut pour modifier un menu, j'ose même pas imaginer les gars qui font des applications entières comme osC ...
Ca doit être la croix et la bannière ... huh.gif

C'est le mot de la fin ... smile.gif


PS : @Coconimo
Encore désolé pour les petits reproches etc ...


Ce message a été modifié par shoprun - 17 Sep 2008, 15:53.


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
cocomino
posté 5 Oct 2008, 20:20
Message #75


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1690
Inscrit : 10-October 06
Lieu : Rives du Lez
Membre no 12571



alors, le mot de la fin de la fin cette fois ci:
Si on active le cache, les images et les titres des catégories ne s'affichent pas ! mrgreen.gif
aussi, il faut modifier le fichier catalog/includes/functions/cache.php:
changer :
Code
function tep_cache_categories_box($auto_expire = false, $refresh = false) {
    global $cPath, $language, $languages_id, $tree, $cPath_array, $categories_string;

    $cache_output = '';

    if (($refresh == true) || !read_cache($cache_output, 'categories_box-' . $language . '.cache' . $cPath, $auto_expire)) {
      ob_start();
      include(DIR_WS_BOXES . 'categories.php');
      $cache_output = ob_get_contents();
      ob_end_clean();
      write_cache($cache_output, 'categories_box-' . $language . '.cache' . $cPath);
    }

    return $cache_output;
  }

avec :
Code
function tep_cache_categories_box($auto_expire = false, $refresh = false) {
    global $cPath, $language, $languages_id, $tree, $cPath_array, $categories_string, $cat_image, $parent_image, $strg_cat_name;

    $cache_output = '';

    if (($refresh == true) || !read_cache($cache_output, 'categories_box-' . $language . '.cache' . $cPath, $auto_expire)) {
      ob_start();
      include(DIR_WS_BOXES . 'categories.php');
      $cache_output = ob_get_contents();
      ob_end_clean();
      write_cache($cache_output, 'categories_box-' . $language . '.cache' . $cPath);
    }

    return $cache_output;
  }


The End.


--------------------
"Pourquoi vois-tu la paille qui est dans l'oeil de ton frère et n'aperçois-tu pas la poutre qui est dans ton oeil ?".(Saint Luc, VI-41)
Go to the top of the page
 

4 Pages V  < 1 2 3 4 >
Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 16th April 2024 - 10:36
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)