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_raw, MAX_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 > 0 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 == 1 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 > 0 and $show_submit == true and $products_all_split->number_of_rows > 0) and (PRODUCT_ALL_LISTING_MULTIPLE_ADD_TO_CART == 1 or PRODUCT_ALL_LISTING_MULTIPLE_ADD_TO_CART == 3)) ) {
$show_top_submit_button = true;
} else {
$show_top_submit_button = false;
}
if ( (($how_many > 0 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]
Bookmarks