Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

COLLAPSABLE CATEGORIES


metade

Recommended Posts

Posted

How I can I make it just so the "CATEGORY" Box would show all even the subcategories?

Posted

Here is one of my sites includes/boxes/categories.php. It works, but if you sub-sub-categories, they do not show with this code (its pretty old code, maybe someone will elaborate if they've used similar). I just had one level of subcategories, so this works for me.

 

<?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
*/

// Preorder tree traversal
function preorder($cid, $level, $foo, $cpath)
{
global $categories_string, $HTTP_GET_VARS;
$products_in_category = tep_count_products_in_category($counter);
if ($products_in_category > 0) {

// Display link
if ($cid != 0) {
for ($i=0; $i<$level; $i++)
$categories_string .= ' ';
$categories_string .= '<a href="' . tep_href_link(FILENAME_DEFAULT, 'cPath
=' . $cpath . $cid) . '">';

// 1.6 Are we on the "path" to selected category?
$bold = strstr($HTTP_GET_VARS['cPath'], $cpath . $cid . '_') || $HTTP_GET_VARS['cPath'] == $cpath . $cid;
// 1.6 If yes, use <b>
if ($bold)
$categories_string .= '<b>';
$categories_string .= $foo[$cid]['name'];
if ($bold)
$categories_string .= '</b>';
$categories_string .= '</a>';
// 1.4 SHOW_COUNTS is 'true' or 'false', not true or false
if (SHOW_COUNTS == 'true') {
$categories_string .= ' (' . $products_in_category . ')';
}
$categories_string .= '<br>';
}
}

// Traverse category tree- this is for older snapshots pre-November 2002
/* foreach ($foo as $key => $value) {
if ($foo[$key]['parent'] == $cid) {
// print "$key, $level, $cid, $cpath<br>";
preorder($key, $level+1, $foo, ($level != 0 ? $cpath . $cid . '_' : ''))
;
} */
// Function used for post November 2002 snapshots
function tep_show_category($counter) {
global $foo, $categories_string, $id;

for ($a=0; $a<$foo[$counter]['level']; $a++) {
$categories_string .= " ";
}
}
}

?>
<!-- show_subcategories //-->
<tr>
<td class="infoBox_left">

<?php

//////////
// Display box heading
//////////
$info_box_contents = array();
$info_box_contents[] = array('align' => 'left', 'text' => BOX_HEADING_CATEGORIES);
new infoBoxHeading($info_box_contents, true, false, false, true);

//////////
// Get categories list
//////////
// 1.2 Test for presence of status field for compatibility with older versions
// $status = tep_db_num_rows(tep_db_query('describe categories status')); used for older snapshots
$status = tep_db_num_rows(tep_db_query('describe ' . TABLE_CATEGORIES . ' status'));


$query = "select c.categories_id, cd.categories_name, c.parent_id, c.categories_image
from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd
where c.categories_id = cd.categories_id";
// 1.3 Can't have 'where' in an if statement!
if ($status >0)
$query.= " and c.status = '1'";
$query.= " and cd.language_id='" . $languages_id ."'
order by sort_order, cd.categories_name";

$categories_query = tep_db_query($query);


// Initiate tree traverse
$categories_string = '';
preorder(0, 0, $foo, '');

//////////
// Display box contents
//////////
$info_box_contents = array();
$row = 0;
$col = 0;
while ($categories = tep_db_fetch_array($categories_query)) {
if ($categories['parent_id'] == 0)
{
$temp_cPath_array = $cPath_array; //Johan's solution - kill the array but save it for the rest of the site
unset($cPath_array);

$cPath_new = tep_get_path($categories['categories_id']);

$text_subcategories = '';
$subcategories_query = tep_db_query($query);
while ($subcategories = tep_db_fetch_array($subcategories_query))
{

if ($subcategories['parent_id'] == $categories['categories_id'])
{

$cPath_new_sub = "cPath=" . $categories['categories_id'] . "_" . $subcategories['categories_id'];

$text_subcategories .= '' . '<a href="' . tep_href_link(FILENAME_DEFAULT, $cPath_new_sub, 'NONSSL') . '" class="menusubcateg">' . '' . $subcategories['categories_name'] . '</a><br>' . " ";
} // if
} // While Interno
$info_box_contents[$row] = array('align' => 'left',
'params' => 'class="smallText" width="180" valign="top"',
'text' => '' . '<a href="' . tep_href_link(FILENAME_DEFAULT, $cPath_new, 'NONSSL') . '" class="menucateg"><b><u>' . '' . $categories['categories_name'] . '</b></u></a><br>' . $text_subcategories);
$col ++;
if ($col > 0)
{
$col = 0;
$row ++;
}
$cPath_array = $temp_cPath_array; //Re-enable the array for the rest of the code
}
}


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

 

You'll also need to add this to your stylesheet (and edit it to fit your preference)

.menucateg {
font-family :arial,helvetica,sans-serif;
font-size : 13px;
color : #26321a;
margin-left : 1px;
margin-right : 5px;
margin-bottom : 0;
}

.menusubcateg {
font-family :arial,helvetica,sans-serif;
font-size : 13px;
color : #11420f;
margin-left : 5px;
margin-right : 1px;
margin-bottom : 0;
}

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...