I'm having trouble with this now since installing a neat drop down filter. I've merged my new filter with the modifications made previously in this thread to default_filter.php:

PHP Code:
<?php
/**
 * default_filter.php  for index filters
 *
 * index filter for the default product type
 * show the products of a specified manufacturer
 *
 * @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: default_filter.php 6912 2007-09-02 02:23:45Z drbyte $
 */
if (!defined('IS_ADMIN_FLAG')) {
  die(
'Illegal Access');
}
  if (isset(
$_GET['alpha_filter_id']) && (int)$_GET['alpha_filter_id'] > 0) {
    
//$alpha_sort = " and pd.products_name LIKE '" . chr((int)$_GET['alpha_filter_id']) . "%' ";
    
$filterid = (int)$_GET['alpha_filter_id'];
    switch(
$filterid)
    {
            case 
1:
                
$alpha_sort " order by pd.products_viewed";
                break;
            case 
2:
                
$alpha_sort " order by p.products_price";
                break;
            case 
3:
                
$alpha_sort " order by p.products_price DESC";
                break;
            case 
4:
                
$alpha_sort " order by pd.products_name";
                break;
            case 
5:
                
$alpha_sort " order by m.manufacturers_name";
                break;
            case 
6:
                
$alpha_sort " order by p.products_date_added";
                break;
            case 
7:
                
$alpha_sort " order by p.products_date_added DESC";
                break;
                
                
            
        
    }
  } else {
    
$alpha_sort '';
  }
  if (!isset(
$select_column_list)) $select_column_list "";
   
// show the products of a specified manufacturer
  
if (isset($_GET['manufacturers_id']) && $_GET['manufacturers_id'] != '' ) {
    if (isset(
$_GET['filter_id']) && zen_not_null($_GET['filter_id'])) {
// We are asked to show only a specific category
      
$listing_sql "select distinct " $select_column_list " p.products_id, p.products_type, p.master_categories_id, p.manufacturers_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_MANUFACTURERS " m, " .
       
TABLE_PRODUCTS_TO_CATEGORIES " p2c
       where p.products_status = 1
         and p.manufacturers_id = m.manufacturers_id
         and m.manufacturers_id = '" 
. (int)$_GET['manufacturers_id'] . "'
         and p.products_id = p2c.products_id
         and pd.products_id = p2c.products_id
         and pd.language_id = '" 
. (int)$_SESSION['languages_id'] . "'
         "
;/* bof all_sub_cats_products */
         
if(!empty($sub_cats)) 
             
$listing_sql .=  "and p2c.categories_id IN($sub_cats)" .
         
$alpha_sort;
         else 
/* eof all_sub_cats_products*/ $listing_sql .=  "
         and p2c.categories_id = '" 
. (int)$_GET['filter_id'] . "'" .
         
$alpha_sort;
    } else {
// We show them all
      
$listing_sql "select distinct " $select_column_list " p.products_id, p.products_type, p.master_categories_id, p.manufacturers_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_MANUFACTURERS " m
      where p.products_status = 1
        and pd.products_id = p.products_id
        and pd.language_id = '" 
. (int)$_SESSION['languages_id'] . "'
        "
;/* bof all_sub_cats_products */
         
if(!empty($sub_cats)) 
             
$listing_sql .=  "and p2c.categories_id IN($sub_cats)" .
         
$alpha_sort;
         else 
/* eof all_sub_cats_products*/ $listing_sql .=  "
        and p.manufacturers_id = m.manufacturers_id
        and m.manufacturers_id = '" 
. (int)$_GET['manufacturers_id'] . "'" .
        
$alpha_sort;
    }
  } 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 distinct " $select_column_list " p.products_id, p.products_type, p.master_categories_id, p.manufacturers_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_MANUFACTURERS " m, " .
      
TABLE_PRODUCTS_TO_CATEGORIES " p2c
      where p.products_status = 1
        and p.manufacturers_id = m.manufacturers_id
        and m.manufacturers_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'] . "'
        "
;/* bof all_sub_cats_products */
         
if(!empty($sub_cats)) 
             
$listing_sql .=  "and p2c.categories_id IN($sub_cats)" .
         
$alpha_sort;
         else 
/* eof all_sub_cats_products*/ $listing_sql .=  "
        and p2c.categories_id = '" 
. (int)$current_category_id "'" .
        
$alpha_sort;
    } else {
// We show them all
      
$listing_sql "select distinct " $select_column_list " p.products_id, p.products_type, p.master_categories_id, p.manufacturers_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_MANUFACTURERS " m on p.manufacturers_id = m.manufacturers_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'] . "'
         "
;/* bof all_sub_cats_products */
         
if(!empty($sub_cats)) 
             
$listing_sql .=  "and p2c.categories_id IN($sub_cats)" .
         
$alpha_sort;
         else 
/* eof all_sub_cats_products*/ $listing_sql .=  "
         and p2c.categories_id = '" 
. (int)$current_category_id "'" .
         
$alpha_sort;
    }
  }

// 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'])) || (isset($_GET['sort']) && !ereg('[1-8][ad]'$_GET['sort'])) || (substr($_GET['sort'], 01) > sizeof($column_list)) ) {
      for (
$i=0$n=sizeof($column_list); $i<$n$i++) {
        if (isset(
$column_list[$i]) && $column_list[$i] == 'PRODUCT_LIST_NAME') {
          
$_GET['sort'] = $i+'a';
          
//$listing_sql .= " order by p.products_sort_order, pd.products_name";
          
break;
        } else {
// sort by products_sort_order when PRODUCT_LISTING_DEFAULT_SORT_ORDER is left blank
// for reverse, descending order use:
//       $listing_sql .= " order by p.products_sort_order desc, pd.products_name";
          //$listing_sql .= " order by p.products_date_added DESC, 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'], 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_name " . ($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['manufacturers_id']) && $_GET['manufacturers_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
      where p.products_status = 1
        and p.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 p.manufacturers_id = '" 
. (int)$_GET['manufacturers_id'] . "'
      order by cd.categories_name"
;
    } else {
      
$filterlist_sql"select distinct m.manufacturers_id as id, m.manufacturers_name as name
      from " 
TABLE_PRODUCTS " p, " .
      
TABLE_PRODUCTS_TO_CATEGORIES " p2c, " .
      
TABLE_MANUFACTURERS " m
      where p.products_status = 1
        and p.manufacturers_id = m.manufacturers_id
        and p.products_id = p2c.products_id
        and p2c.categories_id = '" 
. (int)$current_category_id "'
      order by m.manufacturers_name"
;
    }
    
$do_filter_list false;
    
$filterlist $db->Execute($filterlist_sql);
    if (
$filterlist->RecordCount() > 1) {
        
$do_filter_list true;
      if (isset(
$_GET['manufacturers_id'])) {
        
$getoption_set =  true;
        
$get_option_variable 'manufacturers_id';
        
$options = array(array('id' => '''text' => TEXT_ALL_CATEGORIES));
      } else {
        
$options = array(array('id' => '''text' => TEXT_ALL_MANUFACTURERS));
      }
      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 (isset(
$_GET['manufacturers_id'])) {
    
$sql "select manufacturers_image
              from   " 
TABLE_MANUFACTURERS "
              where      manufacturers_id = '" 
. (int)$_GET['manufacturers_id'] . "'";

    
$image_name $db->Execute($sql);
    
$image $image_name->fields['manufacturers_image'];

  } elseif (
$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'];
  }
?>
This is working well, but the default sort order is coming through as old to new. I want the reverse, new to old.

You'll notice that line 155 is commented out:

PHP Code:
//$listing_sql .= " order by p.products_date_added DESC, pd.products_name"; 
When I remove the comments, it sorts the default order to new to old. You'd think problem would be solved, as it looks ok until you choose a filter option from the drop down. For some reason line 155 is causing a 1064 MYSQL syntax error as reported here:

http://www.zen-cart.com/forum/showthread.php?t=133166

I've also tried changing the default sort order in admin. At present I've left it blank, but as soon as I change it, say to 2a for example, it just creates the same 1064 error as line 155 does.

Can anyone help me please? How can I make my default sort order NEW to OLD??