Jump to content
Sign in to follow this  
mitjan

Problem with "Show Subs" contribution

Recommended Posts

Installed this contribution (i'm using oscommerce-2.2ms1). Everything is fine but when one is on subcategory page there is something wrong with main category links:

 

The generated path is like this default.php?cPath=21_22_21

but it should be like this default.php?cPath=21

 

You can see it here

http://www.astrologija.org/trgovina/defaul...php?cPath=21_22

(wrong links are bolded in left column).

 

Here is the code (catalog/includes/boxes/categories.php):

<?php

/*

 $Id: show_subcategories.php,v 1.0 2003/01/08 10:37:00 Exp $



 osCommerce, Open Source E-Commerce Solutions

 http://www.oscommerce.com/



 Based on: main_categories.php Ver. 1.0 by Gustavo Barreto



 History: 1.0 Creation



 Released under the GNU General Public License



*/



// Preorder tree traversal

 function preorder($cid, $level, $foo, $cpath)

 {

   global $categories_string, $HTTP_GET_VARS;



// 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') {

       $products_in_category = tep_count_products_in_category($cid);

       if ($products_in_category > 0) {

         $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>

           <TABLE WIDTH=135 BORDER=0 CELLPADDING=0 CELLSPACING=0>

<TR>

<TD COLSPAN=3 class="infoBoxHeading"><img src="images/infobox/2oddelki.gif" border="0" alt="Oddelki" width="135" height="60" hspace="0" vspace="0"></TD>

</TR>

<TR>

<TD>



<?php

global $css_class;

global $cell_padding;

$css_class = "infoBoxContents";

$cell_padding = "5";

$info_box_contents_info = array();





/*

//////////

// Display box heading

//////////

 $info_box_contents = array();

 $info_box_contents[] = array('align' => 'left', 'text'  => BOX_HEADING_CATEGORIES);

 new infoBoxHeading($info_box_contents, true, false);

 */





//////////

// 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) {

   $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') . '"><br>' . $subcategories['categories_name'] . '</a>' . " ";

               } // if

    } // While Interno

   $info_box_contents[$row] = array('align' => 'left',

                                          'params' => 'class="smallText" width="135" valign="top"',

                                          'text' => '<a href="' . tep_href_link(FILENAME_DEFAULT, $cPath_new, 'NONSSL') . '"><b>' . $categories['categories_name'] . '</b></a>' . $text_subcategories);

   $col ++;

   if ($col > 0) {

     $col = 0;

     $row ++;

   }

  }

 }

 $info_box_contents[] = array('align' => 'left',

                              'text'  => '<small><a href="' . tep_href_link(FILENAME_ALLPRODS, '', 'NONSSL') . '"><img src="images/puscica2.gif" border="0" alt="" width="4" height="12" hspace="0" vspace="0" align="absbottom"> ' . BOX_INFORMATION_ALLPRODS . '</a></small>');



 new infoBox($info_box_contents);

?>

           

</TD>

</TR>

</TABLE>

</td>

         </tr>

<!-- show_subcategories_eof //-->

 

Can anybody help, please???


Mitja

Share this post


Link to post
Share on other sites
You can see it here

http://www.astrologija.org/trgovina/defaul...php?cPath=21_22

(wrong links are bolded in left column).

 

Mitjan, looking at your site now it seems as if you've figured out how to fix this bug. I've been having the same problem with the code. Could you share with us how you fixed it? It would be great if you could post your fixed categories.php code here for the rest of us!

 

Thanks!

 

-

Mike

Share this post


Link to post
Share on other sites

Hm, dont remember what i did.

 

Here is my categories.php, hope its usefull:

 

<?php

/*

 $Id: show_subcategories.php,v 1.0 2003/01/08 10:37:00 Exp $



 osCommerce, Open Source E-Commerce Solutions

 http://www.oscommerce.com/



 Based on: main_categories.php Ver. 1.0 by Gustavo Barreto



 History: 1.0 Creation



 Released under the GNU General Public License



*/



// Preorder tree traversal

 function preorder($cid, $level, $foo, $cpath)

 {

   global $categories_string, $HTTP_GET_VARS;



// 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') {

       $products_in_category = tep_count_products_in_category($cid);

       if ($products_in_category > 0) {

         $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>

           <TABLE WIDTH=135 BORDER=0 CELLPADDING=0 CELLSPACING=0>

<TR>

<TD COLSPAN=3 class="infoBoxHeading"><img src="images/infobox/2oddelki.gif" border="0" alt="Oddelki" width="135" height="60" hspace="0" vspace="0"></TD>

</TR>

<TR>

<TD>



<?php

global $css_class;

global $cell_padding;

$css_class = "infoBoxContents";

$cell_padding = "5";

$info_box_contents_info = array();





/*

//////////

// Display box heading

//////////

 $info_box_contents = array();

 $info_box_contents[] = array('align' => 'left', 'text'  => BOX_HEADING_CATEGORIES);

 new infoBoxHeading($info_box_contents, true, false);

 */





//////////

// 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) {

   $cPath_new = "cPath="  .$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') . '"><br>' . $subcategories['categories_name'] . '</a>' . " ";

               } // if

    } // While Interno

   $info_box_contents[$row] = array('align' => 'left',

                                          'params' => 'class="smallText" width="135" valign="top"',

                                          'text' => '<a href="' . tep_href_link(FILENAME_DEFAULT, $cPath_new, 'NONSSL') . '"><b>' . $categories['categories_name'] . '</b></a>' . $text_subcategories);

   $col ++;

   if ($col > 0) {

     $col = 0;

     $row ++;

   }

  }

 }

 $info_box_contents[] = array('align' => 'left',

                              'text'  => '<small><a href="' . tep_href_link(FILENAME_ALLPRODS, '', 'NONSSL') . '"><img src="images/puscica1.gif" border="0" alt="" width="6" height="12" hspace="0" vspace="0" align="middle"> ' . BOX_INFORMATION_ALLPRODS . '</a></small>');



 new infoBox($info_box_contents);

?>

           

</TD>

</TR>

</TABLE>

</td>

         </tr>

<!-- show_subcategories_eof //-->


Mitja

Share this post


Link to post
Share on other sites

I had the same problem. Thanks for posting your code! Mine was different in the Dispaly Box Contents section and this line of yours is what fixed it for me:

 

$cPath_new = "cPath="  .$categories['categories_id'];$text_subcategories = '';

 

-shaun

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×