v2.4.x Fehler in "xtc_get_product_path.inc.php"

Thema wurde von Avenger, 23. September 2015 erstellt.

  1. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    In Gambio wird der (erste) Kategorienpfad eines Artikels aus der "products_id" mit dieser Routine ermittelt:

    PHP:
      function xtc_get_product_path($products_id) {
        
    $cPath '';

        
    $category_query "select p2c.categories_id from " TABLE_PRODUCTS " p, " TABLE_PRODUCTS_TO_CATEGORIES " p2c where p.products_id = '" . (int)$products_id "' and p.products_status = '1' and p.products_id = p2c.products_id and p2c.categories_id != 0 limit 1";
        
    $category_query  xtDBquery($category_query);
        if (
    xtc_db_num_rows($category_query,true)) {
          
    $category xtc_db_fetch_array($category_query);

          
    $categories = array();
          
    xtc_get_parent_categories($categories$category['categories_id']);

          
    $categories array_reverse($categories);

          
    $cPath implode('_'$categories);

          if (
    xtc_not_null($cPath)) $cPath .= '_';
          
    $cPath .= $category['categories_id'];
        }

        return 
    $cPath;
      }
    Dabei wird allerdings nicht berücksichtigt, ob diese "Heimat"-Kategorie den "categories_status" "1" hat, so dass u.U. eine inaktive Kategorie als "Heimat"-Kategorie ermittelt wird.

    Die folgende Version löst das Problem:

    PHP:
      function xtc_get_product_path($products_id) {
        
    $cPath '';
        
    $category_query "
        SELECT DISTINCT
          p2c.categories_id
        FROM
          " 
    TABLE_PRODUCTS " p,
          " 
    TABLE_PRODUCTS_TO_CATEGORIES " p2c,
          " 
    TABLE_CATEGORIES " c
        WHERE
          p.products_id = '" 
    . (int)$products_id "' AND
          p.products_status = '1' AND
          p.products_id = p2c.products_id AND
          c.categories_id= p2c.categories_id AND
          p2c.categories_id != 0 AND
          c.categories_status=1
        LIMIT 1"
    ;
        
    $category_query  xtDBquery($category_query);
        if (
    xtc_db_num_rows($category_query,true))
        {
          
    $category xtc_db_fetch_array($category_query);
          
    $categories = array();
          
    xtc_get_parent_categories($categories$category['categories_id']);
          
    $categories array_reverse($categories);
          
    $cPath implode('_'$categories);
          if (
    xtc_not_null($cPath)) $cPath .= '_';
          
    $cPath .= $category['categories_id'];
        }
        return 
    $cPath;
      }
    Das Problem ist in allen Gambio-Versionen vorhanden.
     
  2. Torben Wark

    Torben Wark Gambio GmbH

    Registriert seit:
    15. Juli 2014
    Beiträge:
    2.581
    Danke erhalten:
    1.178
    Danke vergeben:
    399