I'm working on adding an additional product type in a redesign of one of my customer's sites. First of all, I'm doing this specifically to add new filters, no new fields, at least at this time are planned for the product_info.
I've been totally successful in every area except the sidebox, and my issue is baffling to me. The list of names of my fields are not displaying, instead two little dots, that by the way do take me to the correctly link.
Again, in the admin all is perfect, so I know my tables are designed correctly; however I double checked (actually triple checked) to be sure all variables match my code. The extras box displays just perfect to include the names of the fields, but not in the catalog sidebox.
I'm actually adding two filters, but for the moment working on just one on the catalog side (the other one is next).
Here are my two new tables in question:
Table structure for table `zen_departments`
`departments_id` int(11) NOT NULL auto_increment,
`departments_name` varchar(32) NOT NULL,
`date_added` datetime default NULL,
`last_modified` datetime default NULL,
PRIMARY KEY (`departments_id`),
KEY `idx_departments_name_zen` (`departments_name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
Dumping data for table `zen_departments`
--
INSERT INTO `zen_departments` (`departments_id`, `departments_name`, `date_added`, `last_modified`) VALUES
(1, 'Men', '2008-11-11 14:27:50', NULL),
(2, 'Women', '2008-11-11 14:27:50', NULL),
(3, 'Girls', '2008-11-13 23:53:43', '2008-11-23 11:26:43'),
(4, 'Boys', '2008-11-13 23:53:48', '2008-11-23 11:28:17'),
(5, 'Infants', '2008-11-13 23:54:19', '2008-11-22 18:49:31');
Table structure for table `zen_product_shoes_extra`
`products_id` int(11) NOT NULL default '0',
`departments_id` int(11) NOT NULL default '0',
`style_id` int(11) NOT NULL default '0',
PRIMARY KEY (`products_id`),
KEY `idx_departments_id_zen` (`departments_id`),
KEY `idx_style_id_zen` (`style_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
(dump not relative for our purpose here)
My modules/sideboxes/departments.php code:
<?php
/**
* departments sidebox - displays list of available departments to filter on
*
* @package templateSystem
* @copyright Copyright 2003-2005 Zen Cart Development Team
* @copyright Portions Copyright 2003 osCommerce
* @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
* @version $Id: departments.php 2834 2006-01-11 22:16:37Z birdbrain $
*/
error_reporting(E_ALL);
$departments_query = "select departments_id, departments_name
from " . TABLE_DEPARTMENTS . "
order by departments_name";
$departments = $db->Execute($departments_query);
if ($departments->RecordCount()>0) {
$number_of_rows = $departments->RecordCount()+1;
// Display a list
$departments_array = array();
if (!isset($_GET['departments_id']) || $_GET['departments_id'] == '' ) {
$departments_array[] = array('id' => '', 'text' => PULL_DOWN_ALL);
} else {
$departments_array[] = array('id' => '', 'text' => PULL_DOWN_DEPARTMENTS);
}
while (!$departments->EOF) {
$departments_name = ((strlen($departments->fields['departments_name']) > MAX_DISPLAY_DEPARTMENTS_NAME_LEN) ? substr($departments->fields['departments_name'], 0, MAX_DISPLAY_DEPARTMENTS_NAME_LEN) . '..' : $departments->fields['departments_name']);
$departments_array[] = array('id' => $departments->fields['departments_id'],
'text' => $departments_name);
$departments->MoveNext();
}
require($template->get_template_dir('tpl_departments_select.php',DIR_WS_TEMPLATE, $current_page_base,'sideboxes'). '/tpl_departments_select.php');
$title = '<label>' . BOX_HEADING_DEPARTMENTS . '</label>';
$title_link = false;
require($template->get_template_dir($column_box_default, DIR_WS_TEMPLATE, $current_page_base,'common') . '/' . $column_box_default);
}
?>
Next this is my departments_filter.php code
<?php
/**
* departments_filter.php for index filters
*
* index filter for the shoe product type
* show the products of a specified departments ie: mens/womens etc.
*
* @package productTypes
* @copyright Copyright 2003-2007 Zen Cart Development Team
* @copyright Portions Copyright 2003 osCommerce
* @todo Need to add/fine-tune ability to override or insert entry-points on a per-product-type basis
* @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
* @version $Id: departments_filter.php 6912 2008-11-22 02:23:45Z rwoody $
*/
if (!defined('IS_ADMIN_FLAG')) {
die('Illegal Access');
}
if (!isset($select_column_list)) $select_column_list = "";
// show the products of a specified departments
if (isset($_GET['departments_id']))
{
if (isset($_GET['filter_id']) && zen_not_null($_GET['filter_id']))
{
// We are asked to show only a specific category
$listing_sql = "select " . $select_column_list . " p.products_id, p.products_type, p.master_categories_id, p.products_price, p.products_tax_class_id, pd.products_description, if(s.status = 1, s.specials_new_products_price, NULL) AS specials_new_products_price, IF(s.status = 1, s.specials_new_products_price, p.products_price) as final_price, p.products_sort_order, p.product_is_call, p.product_is_always_free_shipping, p.products_qty_box_status
from " . TABLE_PRODUCTS . " p, " .
TABLE_PRODUCTS_DESCRIPTION . " pd, " .
TABLE_PRODUCT_SHOES_EXTRA . " pse left join " . TABLE_SPECIALS . " s on pse.products_id = s.products_id, " .
TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " .
TABLE_DEPARTMENTS . " d
where d.departments_id = '" . (int)$_GET['departments_id'] . "'
and p.products_id = pse.products_id
and p.products_status = 1
and pse.departments_id = '" . (int)$_GET['departments_id'] . "'
and pse.products_id = p2c.products_id
and pd.products_id = p2c.products_id
and pd.language_id = '" . (int)$_SESSION['languages_id'] . "'
and p2c.categories_id = '" . (int)$_GET['filter_id'] . "'";
} else {
// We show them all
$listing_sql = "select " . $select_column_list . " pse.products_id, p.products_type, p.master_categories_id, p.products_price, p.products_tax_class_id, pd.products_description, IF(s.status = 1, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status = 1, s.specials_new_products_price, p.products_price) as final_price, p.products_sort_order, p.product_is_call, p.product_is_always_free_shipping, p.products_qty_box_status
from " . TABLE_PRODUCTS . " p, " .
TABLE_PRODUCTS_DESCRIPTION . " pd, " .
TABLE_PRODUCT_SHOES_EXTRA . " pse left join " . TABLE_SPECIALS . " s on pse.products_id = s.products_id, " .
TABLE_DEPARTMENTS . " d
where d.departments_id = '" . (int)$_GET['departments_id'] . "'
and p.products_id = pse.products_id
and p.products_status = 1
and pd.products_id = pse.products_id
and pd.language_id = '" . (int)$_SESSION['languages_id'] . "'
and pse.departments_id = '" . (int)$_GET['departments_id'] . "'";
}
} else {
// show the products in a given category
if (isset($_GET['filter_id']) && zen_not_null($_GET['filter_id']))
{
// We are asked to show only specific category
$listing_sql = "select " . $select_column_list . " p.products_id, p.products_type, p.master_categories_id, d.departments_id, p.products_price, p.products_tax_class_id, pd.products_description, IF(s.status = 1, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status = 1, s.specials_new_products_price, p.products_price) as final_price, p.products_sort_order, p.product_is_call, p.product_is_always_free_shipping, p.products_qty_box_status
from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " .
TABLE_PRODUCTS_DESCRIPTION . " pd, " .
TABLE_DEPARTMENTS . " d, " .
TABLE_PRODUCTS_SHOES_EXTRA . " pse, " .
TABLE_PRODUCTS_TO_CATEGORIES . " p2c
where p.products_status = 1
and pse.departments_id = d.departments_id
and d.departments_id = '" . (int)$_GET['filter_id'] . "'
and p.products_id = p2c.products_id
and pd.products_id = p2c.products_id
and pd.language_id = '" . (int)$_SESSION['languages_id'] . "'
and p2c.categories_id = '" . (int)$current_category_id . "'";
} else {
// We show them all
if ($current_categories_id) {
$listing_sql = "select " . $select_column_list . " p.products_id, p.products_type, p.master_categories_id, d.departments_id, p.products_price, p.products_tax_class_id, pd.products_description, IF(s.status = 1, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status = 1, s.specials_new_products_price, p.products_price) as final_price, p.products_sort_order, p.product_is_call, p.product_is_always_free_shipping, p.products_qty_box_status
from " . TABLE_PRODUCTS_DESCRIPTION . " pd, " .
TABLE_PRODUCTS . " p left join " . TABLE_DEPARTMENTS . " d, " . TABLE_PRODUCT_SHOES_EXTRA . " pse on pse.departments_id = d.departments_id, " .
TABLE_PRODUCTS_TO_CATEGORIES . " p2c left join " . TABLE_SPECIALS . " s on p2c.products_id = s.products_id
where p.products_status = 1
and p.products_id = p2c.products_id
and pd.products_id = p2c.products_id
and pd.language_id = '" . (int)$_SESSION['languages_id'] . "'
and p2c.categories_id = '" . (int)$current_category_id . "'";
} else {
$listing_sql = "select " . $select_column_list . " p.products_id, p.products_type, p.master_categories_id, d.departments_id, p.products_price, p.products_tax_class_id, pd.products_description, IF(s.status = 1, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status = 1, s.specials_new_products_price, p.products_price) as final_price, p.products_sort_order, p.product_is_call, p.product_is_always_free_shipping, p.products_qty_box_status
from " . TABLE_PRODUCTS_DESCRIPTION . " pd, " .
TABLE_PRODUCTS . " p left join " . TABLE_DEPARTMENTS . " d, " . TABLE_PRODUCT_SHOES_EXTRA . " pse on pse.departments_id = d.departments_id, " .
TABLE_PRODUCTS_TO_CATEGORIES . " p2c left join " . TABLE_SPECIALS . " s on p2c.products_id = s.products_id
where p.products_status = 1
and p.products_id = p2c.products_id
and pd.products_id = p2c.products_id
and pd.language_id = '" . (int)$_SESSION['languages_id'] . "'";
}
}
}
// set the default sort order setting from the Admin when not defined by customer
if (!isset($_GET['sort']) and PRODUCT_LISTING_DEFAULT_SORT_ORDER != '') {
$_GET['sort'] = PRODUCT_LISTING_DEFAULT_SORT_ORDER;
}
if (isset($column_list)) {
if ( (!isset($_GET['sort'])) || (!ereg('[1-8][ad]', $_GET['sort'])) || (substr($_GET['sort'], 0, 1) > sizeof($column_list)) )
{
for ($i=0, $n=sizeof($column_list); $i<$n; $i++)
{
if ($column_list[$i] == 'PRODUCT_LIST_NAME')
{
$_GET['sort'] = $i+1 . 'a';
$listing_sql .= " order by p.products_sort_order, pd.products_name";
break;
}
}
// if set to nothing use products_sort_order and PRODUCTS_LIST_NAME is off
if (PRODUCT_LISTING_DEFAULT_SORT_ORDER == '') {
$_GET['sort'] = '20a';
}
} else {
$sort_col = substr($_GET['sort'], 0 , 1);
$sort_order = substr($_GET['sort'], 1);
$listing_sql .= ' order by ';
switch ($column_list[$sort_col-1])
{
case 'PRODUCT_LIST_MODEL':
$listing_sql .= "p.products_model " . ($sort_order == 'd' ? 'desc' : '') . ", pd.products_name";
break;
case 'PRODUCT_LIST_NAME':
$listing_sql .= "pd.products_name " . ($sort_order == 'd' ? 'desc' : '');
break;
case 'PRODUCT_LIST_MANUFACTURER':
$listing_sql .= "m.manufacturers" . ($sort_order == 'd' ? 'desc' : '') . ", pd.products_name";
break;
case 'PRODUCT_LIST_QUANTITY':
$listing_sql .= "p.products_quantity " . ($sort_order == 'd' ? 'desc' : '') . ", pd.products_name";
break;
case 'PRODUCT_LIST_IMAGE':
$listing_sql .= "pd.products_name";
break;
case 'PRODUCT_LIST_WEIGHT':
$listing_sql .= "p.products_weight " . ($sort_order == 'd' ? 'desc' : '') . ", pd.products_name";
break;
case 'PRODUCT_LIST_PRICE':
// $listing_sql .= "final_price " . ($sort_order == 'd' ? 'desc' : '') . ", pd.products_name";
$listing_sql .= "p.products_price_sorter " . ($sort_order == 'd' ? 'desc' : '') . ", pd.products_name";
break;
}
}
}
// optional Product List Filter
if (PRODUCT_LIST_FILTER > 0)
{
if (isset($_GET['departments_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, " .
TABLE_PRODUCT_SHOES_EXTRA . " pse
where p.products_status = 1
and pme.products_id = p2c.products_id
and p2c.categories_id = c.categories_id
and p2c.categories_id = cd.categories_id
and cd.language_id = '" . (int)$_SESSION['languages_id'] . "'
and pse.departments_id = '" . (int)$_GET['departments_id'] . "'
order by cd.categories_name";
} else {
$filterlist_sql= "select distinct d.departments_id as id, d.departments_name as name
from " . TABLE_PRODUCTS . " p, " .
TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " .
TABLE_PRODUCT_SHOES_EXTRA . " pse, " .
TABLE_DEPARTMENTS . " d
where p.products_status = 1
and pse.departments_id = d.departments_id
and p.products_id = p2c.products_id
and p2c.categories_id = '" . (int)$current_category_id . "'
order by d.departments_name";
}
$getoption_set = false;
$filterlist = $db->Execute($filterlist_sql);
$do_filter_list = false;
if ($filterlist->RecordCount() > 1)
{
$do_filter_list = true;
if (isset($_GET['departments_id']))
{
//die('here');
$getoption_set = true;
$get_option_variable = 'departments_id';
$options = array(array('id' => '', 'text' => TEXT_ALL_CATEGORIES));
} else {
$options = array(array('id' => '', 'text' => TEXT_ALL_DEPARTMENTS));
}
while (!$filterlist->EOF) {
$options[] = array('id' => $filterlist->fields['id'], 'text' => $filterlist->fields['name']);
$filterlist->MoveNext();
}
}
}
// Get the right image for the top-right
$image = DIR_WS_TEMPLATE_IMAGES . 'table_background_list.gif';
if ($current_category_id) {
$sql = "select categories_image from " . TABLE_CATEGORIES . "
where categories_id = '" . (int)$current_category_id . "'";
$image_name = $db->Execute($sql);
$image = $image_name->fields['categories_image'];
}
?>
Here's my tpl_departments_select.php
<?php
/**
* Side Box Template
*
* @package templateSystem
* @copyright Copyright 2003-2006 Zen Cart Development Team
* @copyright Portions Copyright 2003 osCommerce
* @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
* @version $Id: tpl_departments_select.php 4773 2006-10-17 06:10:58Z drbyte $
*/
$content = "";
$content .= '<div id="' . str_replace('_', '-', $box_id . 'Content') . '" class="sideBoxContent centeredContent">';
$content .= zen_draw_form('departments_form', zen_href_link(FILENAME_DEFAULT, '', 'NONSSL', false), 'get');
$content .= zen_draw_hidden_field('main_page', FILENAME_DEFAULT) . zen_hide_session_id() . zen_draw_hidden_field('typefilter', 'departments');
$content .= zen_draw_pull_down_menu('departments_id', $departments_array, (isset($_GET['departments_id']) ? $_GET['departments_id'] : ''), 'onchange="this.form.submit();" size="' . MAX_PRODUCTS_DEPARTMENTS_LIST . '" style="width: 90%; margin: auto;"');
$content .= '</form>';
$content .= '</div>';
?>
I'm thinking I must have a typo and I'm just not seeing it. There are no errors showing on the pag. I added the enable_error_logging.php, loaded, but no errors are being displayed in the cache file either.
This is running on a PHP version 5.2.5 / MySQL version 5.0.67
Apache server.
I've been going over and over this code for two days :frusty: and I cannot find my error. If someone has a moment and can take a look at my code with a fresh set of eyes, I would really appreciate it. I do believe when you stare at something too long, you can't see the forest for the trees as they say.
Ruth