Pulling Catagories or subcategories from a database


#1

Hi All,

Im wondering if you could help me with a little problem.
I currently have a box on my site that displays a list of categories one below the other with the number of items in that category displayed at the side of each (see catboxstd.jpg image attached)

If I click on a category then it will display a list of sub categories if any below that category as well as taking the visitor to the category clicked. (see catboxclicked.jpg image attached)

What I require is for this to be split into two seperate boxes. One box to display horizontaly all the main categories with no subcategories or number of items. The other to be displayed as in the cartboxstd but only displaying the subcategories of whatever main category the visitor is in, if any.

The code for the current set up is below.
I would be very gratefull for any assistance with this problem. Thank You.

[code]<?php
function tep_show_category($counter) {
global $tree, $categories_string, $cPath_array;

for ($i=0; $i<$tree[$counter]['level']; $i++) {
  $categories_string .= "&nbsp;&nbsp;";
}

$categories_string .= '<a href="';

if ($tree[$counter]['parent'] == 0) {
  $cPath_new = 'cPath=' . $counter;
} else {
  $cPath_new = 'cPath=' . $tree[$counter]['path'];
}

$categories_string .= tep_href_link(FILENAME_DEFAULT, $cPath_new) . '">';

if (isset($cPath_array) && in_array($counter, $cPath_array)) {
  $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']);
}

}
?>

      <tr>
        <td>
<?php $info_box_contents = array(); $info_box_contents[] = array('text' => BOX_HEADING_CATEGORIES); new infoBoxHeading($info_box_contents, true, false); $categories_string = ''; $tree = array(); $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='" . (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'], '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.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'], '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' => $categories_string); new infoBox($info_box_contents); ?>
        </td>
      </tr>

[/code]


#2

It appears (to me anyway) that you are using a canned package from osCommerce. ( http://www.oscommerce.com/ ). I don’t believe you are going to get a simple solution to this problem by editing this one file. You would likely have to edit SEVERAL files. A task that I suspect is not for the faint at heart.

If indeed this is from osCommerce, then you might be better served at their support community at http://forums.oscommerce.com/


#3

Hi Peg thanks for the reply.

It is OsCommerce, but you tend to only get help in the oscom forums with things that have already been accomplished. Help with new things is far less forthcoming.

Ive edited plenty of things in the store and added tons of contributions so Im not scared about editing things. The categories box though is the only file that needs any real editing in this case. Just not sure how to go about it. It is the file that tells oscommerce how to display the categories. So it needs spliting into two version categories.php and categories2.php Ill have to add a few includes in other files to get the categories2.php to display but thats by the by. One needs to have the subcategories part of the code removed and displayed horizontaly rather than in a vertical list. and categories2.php will need the code removed that displays the main categories. Not sure at this stage if it will need some code added to check what category its in and if its not in any then to not display the box at all. But getting to the first part would be a good step.

Any help would be appreciated.