Special listing, all listing, new listing, category listing. .....

Ever feel so frustrated because you have to edit too many template files to get a consistent look for your site?

Here is a trick on how to use just one template (tested)

1. First, let me go on a bit about the way ZC works (assuming I understand it correctly):
When you visit a page, say index.php?main_page=products_all, ZC will load the file header_php.php inside includes/modules/pages/products_all.
This file usually contains the code that will gather all information needed before displaying.

The the template file will be loaded at includes/templates/your_template/templates/tpl_products_all_default.php
This file uses all info gathered in the header file, then displays it.

2. Here goes the trick: what if we can use the same template file? wouldn't it be cool?
KK, lets peek into includes/modules/pages/products_all/header_php.php
PHP Code:
<?php
/**
 * products_all  header_php.php
 *
 * @package page
 * @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: header_php.php 4261 2006-08-25 04:35:20Z ajeh $
 */

  
require(DIR_WS_MODULES zen_get_module_directory('require_languages.php'));



  
$breadcrumb->add(NAVBAR_TITLE);
// display order dropdown
  
$disp_order_default PRODUCT_ALL_LIST_SORT_DEFAULT;
  require(
DIR_WS_MODULES zen_get_module_directory(FILENAME_LISTING_DISPLAY_ORDER));

  
$products_all_array = array();

  
$products_all_query_raw "SELECT p.products_type, p.products_id, pd.products_name, p.products_image, p.products_price, p.products_tax_class_id,
                                    p.products_date_added, m.manufacturers_name, p.products_model, p.products_quantity, p.products_weight, p.product_is_call,
                                    p.product_is_always_free_shipping, p.products_qty_box_status
                             FROM " 
TABLE_PRODUCTS " p
                             LEFT JOIN " 
TABLE_MANUFACTURERS " m ON (p.manufacturers_id = m.manufacturers_id), " TABLE_PRODUCTS_DESCRIPTION " pd
                             WHERE p.products_status = 1
                             AND p.products_id = pd.products_id
                             AND pd.language_id = :languageID " 
$order_by;

  
$products_all_query_raw $db->bindVars($products_all_query_raw':languageID'$_SESSION['languages_id'], 'integer');
  
$products_all_split = new splitPageResults($products_all_query_rawMAX_DISPLAY_PRODUCTS_ALL);

//check to see if we are in normal mode ... not showcase, not maintenance, etc
  
$show_submit zen_run_normal();

// check whether to use multiple-add-to-cart, and whether top or bottom buttons are displayed
  
if (PRODUCT_ALL_LISTING_MULTIPLE_ADD_TO_CART and $show_submit == true and $products_all_split->number_of_rows 0) {

    
// check how many rows
    
$check_products_all $db->Execute($products_all_split->sql_query);
    
$how_many 0;
    while (!
$check_products_all->EOF) {
      if (
zen_has_product_attributes($check_products_all->fields['products_id'])) {
      } else {
// needs a better check v1.3.1
        
if ($check_products_all->fields['products_qty_box_status'] != 0) {
          if (
zen_get_products_allow_add_to_cart($check_products_all->fields['products_id']) !='N') {
            if (
$check_products_all->fields['product_is_call'] == 0) {
              if ((
SHOW_PRODUCTS_SOLD_OUT_IMAGE == and $check_products_all->fields['products_quantity'] > 0) or SHOW_PRODUCTS_SOLD_OUT_IMAGE == 0) {
                if (
$check_products_all->fields['products_type'] != 3) {
                  if (
zen_has_product_attributes($check_products_all->fields['products_id']) < 1) {
                    
$how_many++;
                  }
                }
              }
            }
          }
        }
      }
      
$check_products_all->MoveNext();
    }

    if ( ((
$how_many and $show_submit == true and $products_all_split->number_of_rows 0) and (PRODUCT_ALL_LISTING_MULTIPLE_ADD_TO_CART == or  PRODUCT_ALL_LISTING_MULTIPLE_ADD_TO_CART == 3)) ) {
      
$show_top_submit_button true;
    } else {
      
$show_top_submit_button false;
    }
    if ( ((
$how_many and $show_submit == true and $products_all_split->number_of_rows 0) and (PRODUCT_ALL_LISTING_MULTIPLE_ADD_TO_CART >= 2)) ) {
      
$show_bottom_submit_button true;
    } else {
      
$show_bottom_submit_button false;
    }
  }
?>
Huhm, so it basically just queries the products, then doing some checking and such.
Now lets look at includes/templates/your_template/templates/tpl_products_all_default.php (assuming we are using the default one here)
[to be continued-typing]