[Résolu] Problème fonction tep_manufacturers_list

Nouvelle génération du moteur osCSS
téléchargement osCSS 2.x.x

[Résolu] Problème fonction tep_manufacturers_list

Messagepar Ayatus » Lun 25 Oct 2010, 13:45

Bonjour,

Il ne s'agit pas d'un mais de trois problèmes.

Si vous rencontrez un message d'erreur de ce type :
Code: Tout sélectionner
Fatal error: Call to a member function __destruct() on a non-object in ../oscss2/oscss_data/core_lib_min-3eb626b0a99031bbc92171ac14dfcf6e.cache on line 413

C'est que vous avez modifié l'option Configuration/Apparence/Liste produits/[listing] Affichage du filtre Catégorie/Fabricant qui n'a pas d'état apparent post-install.
Il s'avère en consultant la table configuration que la clé de configuration PRODUCT_LIST_FILTER a une valeur de 1 et qu'elle est associée à la fonction tep_cfg_select_option(array('true', 'false'),).
Par conséquent, modifier cette option revient à lui assigner les valeurs true ou false.

Ce qui nous amène au second problème, la construction de la fonction tep_manufacturers_list dans le fichier html_output.php :
Code: Tout sélectionner
function tep_manufacturers_list($current_category_id='', $cPath=''){
  global $languages_id;
  $DB=Database::getInstance();
  if (PRODUCT_LIST_FILTER > 0) {
    if (isset($_GET['manufacturers_id'])) {
      $filterlist_sql = "select distinct c.categories_id as id, cd.categories_name as name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where p.products_status = '1' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id and p2c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "' and p.manufacturers_id = '" . (int)$_GET['manufacturers_id'] . "' order by cd.categories_name";
    } else {
      $filterlist_sql= "select distinct m.manufacturers_id as id, m.manufacturers_name as name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_MANUFACTURERS . " m where p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and p.products_id = p2c.products_id and p2c.categories_id = '" . (int)$current_category_id . "' order by m.manufacturers_name";
    }

    $filterlist_query = $DB->query($filterlist_sql);
    $manufacturer_filter = '';
    if ($filterlist_query->__get('numRows') > 1) {
      $manufacturer_filter .= tep_draw_form('filter', FILENAME_DEFAULT, 'get') . "\n";
      $manufacturer_filter .= '<fieldset class="manufacturerFilter">' . "\n";
      $manufacturer_filter .= '<p>'. "\n" ;
      $manufacturer_filter .= '<label for="filter_id">' . TEXT_SHOW . '</label>' . "\n";
      if (isset($_GET['manufacturers_id'])) {
  $manufacturer_filter .= tep_draw_hidden_field('manufacturers_id', $_GET['manufacturers_id']);
  $options = array(array('id' => '', 'text' => TEXT_ALL_CATEGORIES));
      } else {
  $manufacturer_filter .= tep_draw_hidden_field('cPath', $cPath);
  $options = array(array('id' => '', 'text' => TEXT_ALL_MANUFACTURERS));
      }
      if(isset($_GET['sort'])) $manufacturer_filter .= tep_draw_hidden_field('sort', $_GET['sort']);
      while ($filterlist = $filterlist_query->fetchAssoc()) {
  $options[] = array('id' => $filterlist['id'], 'text' => $filterlist['name']);
  if (isset($_GET['manufacturers_id']) && $filterlist['id']==$_GET['manufacturers_id']) $categ =$filterlist['name'];
      }
      $manufacturer_filter .= tep_draw_pull_down_menu('filter_id', 'filter_id',$options, (isset($_GET['filter_id']) ? $_GET['filter_id'] : ''), 'onchange="this.form.submit()"');
      $manufacturer_filter .= '</p>'. "\n". '</fieldset>' . "\n";
      $manufacturer_filter .= '</form>'. "\n";
    }
  }
  tep_db_free_result($filterlist_query);
  return $manufacturer_filter;
}
 

Nous constatons que la condition première était vérifiée tant que l'on modifie pas l'option associée, en revanche dés lors où nous modifions cette option la condition n'est plus vérifiable.
Il en résultera systématiquement une erreur dans la mesure où tep_db_free_result($filterlist_query); et return $manufacturer_filter; sont situées après la condition première et ne seront donc pas définies.

En modifiant ainsi cette fonction :
Code: Tout sélectionner
function tep_manufacturers_list($current_category_id='', $cPath=''){
  global $languages_id;
  $DB=Database::getInstance();
  if (PRODUCT_LIST_FILTER === true) {
    if (isset($_GET['manufacturers_id'])) {
      $filterlist_sql = "select distinct c.categories_id as id, cd.categories_name as name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where p.products_status = '1' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id and p2c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "' and p.manufacturers_id = '" . (int)$_GET['manufacturers_id'] . "' order by cd.categories_name";
    } else {
      $filterlist_sql= "select distinct m.manufacturers_id as id, m.manufacturers_name as name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_MANUFACTURERS . " m where p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and p.products_id = p2c.products_id and p2c.categories_id = '" . (int)$current_category_id . "' order by m.manufacturers_name";
    }

    $filterlist_query = $DB->query($filterlist_sql);
    $manufacturer_filter = '';
    if ($filterlist_query->__get('numRows') > 1) {
      $manufacturer_filter .= tep_draw_form('filter', FILENAME_DEFAULT, 'get') . "\n";
      $manufacturer_filter .= '<fieldset class="manufacturerFilter">' . "\n";
      $manufacturer_filter .= '<p>'. "\n" ;
      $manufacturer_filter .= '<label for="filter_id">' . TEXT_SHOW . '</label>' . "\n";
      if (isset($_GET['manufacturers_id'])) {
  $manufacturer_filter .= tep_draw_hidden_field('manufacturers_id', $_GET['manufacturers_id']);
  $options = array(array('id' => '', 'text' => TEXT_ALL_CATEGORIES));
      } else {
  $manufacturer_filter .= tep_draw_hidden_field('cPath', $cPath);
  $options = array(array('id' => '', 'text' => TEXT_ALL_MANUFACTURERS));
      }
      if(isset($_GET['sort'])) $manufacturer_filter .= tep_draw_hidden_field('sort', $_GET['sort']);
      while ($filterlist = $filterlist_query->fetchAssoc()) {
  $options[] = array('id' => $filterlist['id'], 'text' => $filterlist['name']);
  if (isset($_GET['manufacturers_id']) && $filterlist['id']==$_GET['manufacturers_id']) $categ =$filterlist['name'];
      }
      $manufacturer_filter .= tep_draw_pull_down_menu('filter_id', 'filter_id',$options, (isset($_GET['filter_id']) ? $_GET['filter_id'] : ''), 'onchange="this.form.submit()"');
      $manufacturer_filter .= '</p>'. "\n". '</fieldset>' . "\n";
      $manufacturer_filter .= '</form>'. "\n";
    }
    tep_db_free_result($filterlist_query);
    return $manufacturer_filter;
 }
}
  

Je n'ai plus d'erreurs en revanche je n'obtiens toujours pas d'affichage de ce champs select dans mes pages. Ce qui constitue le troisième problème.
Avatar de l’utilisateur
Ayatus
Site Admin
 
Messages: 280
Inscription: Sam 19 Avr 2008, 17:23

Re: Problème fonction tep_manufacturers_list

Messagepar oscim » Lun 25 Oct 2010, 14:18

Il s'agit d'un pbs lors de la destruction du resultat de la db via la class Database.

Html_ouput e ligne 392.

Commenté dans la function tep_manufacturers_list
Code: Tout sélectionner
//   tep_db_free_result($filterlist_query);
Pour un web au normes du W3C, pour un web plus propre !

- Download osCSS Toutes versions
- stable osCSS 2.1.0 (help|info|new dev) Official help|wiki|Tuto for osCSS 2 | doc doxygen
- Utiliser le tracker pour suivre les évolutions et développements
- Inscrivez vos sites sur oscss pour présenter vos réalisations
Avatar de l’utilisateur
oscim
Site Admin
 
Messages: 1643
Inscription: Mar 25 Sep 2007, 11:33

Re: Problème fonction tep_manufacturers_list

Messagepar Ayatus » Lun 25 Oct 2010, 14:42

Sans les modif que je propose, j'ai :
Code: Tout sélectionner
Undefined variable: manufacturer_filter, ../oscss2/oscss_data/core_lib-59639397800b617c2097b2d19dc0d5bc.cache, 1399

Avec mes modif je me traine :
Code: Tout sélectionner
Use of undefined constant PRODUCT_LIST_FILTER - assumed 'PRODUCT_LIST_FILTER', ../oscss2/oscss_data/core_lib-59639397800b617c2097b2d19dc0d5bc.cache, 1367
Avatar de l’utilisateur
Ayatus
Site Admin
 
Messages: 280
Inscription: Sam 19 Avr 2008, 17:23

Re: Problème fonction tep_manufacturers_list

Messagepar oscim » Lun 25 Oct 2010, 14:45

Utilise les fonction interne, les controle de boolean ou assimilé sur les constantes sont a proscrire!

La valeur de la db, n'est pas un boolean mais un string !

Donc plutot
Code: Tout sélectionner
if(_cst_bool('PRODUCT_LIST_FILTER')) {


De plus, pour un debugg , il es plus simple de descativer le cache.. la , ca ne parle pas.
Pour un web au normes du W3C, pour un web plus propre !

- Download osCSS Toutes versions
- stable osCSS 2.1.0 (help|info|new dev) Official help|wiki|Tuto for osCSS 2 | doc doxygen
- Utiliser le tracker pour suivre les évolutions et développements
- Inscrivez vos sites sur oscss pour présenter vos réalisations
Avatar de l’utilisateur
oscim
Site Admin
 
Messages: 1643
Inscription: Mar 25 Sep 2007, 11:33

Re: Problème fonction tep_manufacturers_list

Messagepar Ayatus » Lun 25 Oct 2010, 14:51

Ok, ça ne change rien au fait que ce fichu formulaire ne s'affiche toujours pas dans mes pages listing.

En faite si, fallait juste que je trouve une catégorie remplissant toutes les conditions. :bienjoue:
Avatar de l’utilisateur
Ayatus
Site Admin
 
Messages: 280
Inscription: Sam 19 Avr 2008, 17:23

Re: Problème fonction tep_manufacturers_list

Messagepar Ayatus » Lun 25 Oct 2010, 15:08

En revanche, maintenant c'est un problème de requête sql :
Code: Tout sélectionner
Database reported: Unknown column 'm.manufacturers_id' in 'where clause' (Errno: 1054)
Avatar de l’utilisateur
Ayatus
Site Admin
 
Messages: 280
Inscription: Sam 19 Avr 2008, 17:23

Re: Problème fonction tep_manufacturers_list

Messagepar oscim » Lun 25 Oct 2010, 15:42

Dans une boxe ? dans index_listing ?

tu a activé quelle boite / quel module ?

PS, il ne t'affiche pas la requtes ?

sinon, active OSCSS_SHOW_QUERIES dans les logs de l'admin
Pour un web au normes du W3C, pour un web plus propre !

- Download osCSS Toutes versions
- stable osCSS 2.1.0 (help|info|new dev) Official help|wiki|Tuto for osCSS 2 | doc doxygen
- Utiliser le tracker pour suivre les évolutions et développements
- Inscrivez vos sites sur oscss pour présenter vos réalisations
Avatar de l’utilisateur
oscim
Site Admin
 
Messages: 1643
Inscription: Mar 25 Sep 2007, 11:33

Re: Problème fonction tep_manufacturers_list

Messagepar Ayatus » Lun 25 Oct 2010, 15:46

heu, toujours lié à cette fonction, lorsque je sélectionne un fabriquant.

NB : seul la catégorie "Compacts" affiche ce formulaire.
Avatar de l’utilisateur
Ayatus
Site Admin
 
Messages: 280
Inscription: Sam 19 Avr 2008, 17:23

Re: Problème fonction tep_manufacturers_list

Messagepar oscim » Lun 25 Oct 2010, 15:49

Ayatus a écrit:NB : seul la catégorie "Compacts" affiche ce formulaire.


Ca veut dire que c'est la seul qui contient plus de 2 fabricant dans sa rubrique.

Et la requetes sql ?

Chez moi , je n'ai pas de soucis :(
Pour un web au normes du W3C, pour un web plus propre !

- Download osCSS Toutes versions
- stable osCSS 2.1.0 (help|info|new dev) Official help|wiki|Tuto for osCSS 2 | doc doxygen
- Utiliser le tracker pour suivre les évolutions et développements
- Inscrivez vos sites sur oscss pour présenter vos réalisations
Avatar de l’utilisateur
oscim
Site Admin
 
Messages: 1643
Inscription: Mar 25 Sep 2007, 11:33

Re: Problème fonction tep_manufacturers_list

Messagepar oscim » Lun 25 Oct 2010, 15:56

Ok ,

Dans index.php

Lig 192

Remplacer
Code: Tout sélectionner
     $listing_sql .=" and m.manufacturers_id = '" . (int)$_GET['filter_id'] . "'";


Par

Code: Tout sélectionner
     $listing_sql .=" and p.manufacturers_id = '" . (int)$_GET['filter_id'] . "'";
Pour un web au normes du W3C, pour un web plus propre !

- Download osCSS Toutes versions
- stable osCSS 2.1.0 (help|info|new dev) Official help|wiki|Tuto for osCSS 2 | doc doxygen
- Utiliser le tracker pour suivre les évolutions et développements
- Inscrivez vos sites sur oscss pour présenter vos réalisations
Avatar de l’utilisateur
oscim
Site Admin
 
Messages: 1643
Inscription: Mar 25 Sep 2007, 11:33

Re: Problème fonction tep_manufacturers_list

Messagepar Ayatus » Lun 25 Oct 2010, 16:04

C'est bon de ce coté là.
Ca veut dire que c'est la seul qui contient plus de 2 fabricant dans sa rubrique.

Certe, mais quid des catégories parents ?
Avatar de l’utilisateur
Ayatus
Site Admin
 
Messages: 280
Inscription: Sam 19 Avr 2008, 17:23

Re: Problème fonction tep_manufacturers_list

Messagepar oscim » Lun 25 Oct 2010, 16:29

La fonction tep_manufacturers_list ne traite que la var $current_category_id.

Pour obtenir le resutat en prenant en compte les catgeorie parent, il faut exploiter la var cpath, qui contient le parent.

Cela dis, c'est une erreur d'apres moi d'affiché les parent de la cat en cours.

PAr contre, pour que la cat en cours, qui conteint des sous cat prennent dans cette appel les element des sous cat, alors il faut developper la requete.

Dans ce cas, il faut exploiter les element contenu dans la variable categories du contructeur.

Cette var, conteint en effet les enfants de la cat encours, qu'il soit des produit, ou des pages, leur nombre, et les id de sous cat.

Pour l'exploiter, il faut faire appel

Code: Tout sélectionner
$categories=$page->the_var('categories');


DEtail de cette var

Code: Tout sélectionner
            objectInfo Object
(
    [categories_id] => 10
    [parent_id] => 0
    [categories_description] => Vente matériel photo Reflex, bridge, compact
    [categories_image] => photo.png
    [categories_name] => Appareils photos
    [href] => http://xxxx/product_info.php?language=fr&amp;categories_id=10
    [key] => 10
    [id] => 10
    [title] => Appareils photos
    [name] => Appareils photos
    [list] => '12','14','15'
    [categories_total] => 3
)
 


Et dans ce cas, ajouter les element de list dans la clause sql
Pour un web au normes du W3C, pour un web plus propre !

- Download osCSS Toutes versions
- stable osCSS 2.1.0 (help|info|new dev) Official help|wiki|Tuto for osCSS 2 | doc doxygen
- Utiliser le tracker pour suivre les évolutions et développements
- Inscrivez vos sites sur oscss pour présenter vos réalisations
Avatar de l’utilisateur
oscim
Site Admin
 
Messages: 1643
Inscription: Mar 25 Sep 2007, 11:33

Re: Problème fonction tep_manufacturers_list

Messagepar Ayatus » Lun 25 Oct 2010, 16:45

Pour obtenir le resutat en prenant en compte les catgeorie parent, il faut exploiter la var cpath, qui contient le parent.

Cela dis, c'est une erreur d'apres moi d'affiché les parent de la cat en cours.


Quelle drôle d'idée, il me semblait évident qu'il s'agissait d'afficher le filtre dans les catégories parent et non de lister les fabriquants de la catégorie parent...

Toutefois, ceci n'étant pas un bug de fonctionnement mais plus un enrichissement de la fonction, je passe le sujet en résolu.
Avatar de l’utilisateur
Ayatus
Site Admin
 
Messages: 280
Inscription: Sam 19 Avr 2008, 17:23


Retourner vers Bug / Aides [fr]

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron