Jump to content

bobsi18

Members
  • Content count

    436
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by bobsi18

  1. bobsi18

    [Contribution] STS v4

    THANKS!!!
  2. Hi there all... I've just modified the standard zones based shipping module to suit my needs for international shipping options (I had another post about it here: http://forums.oscommerce.com/index.php?showtopic=211768). Basically, I set it up only for international options, there will be no domestic price for this option. So I wanted to limit it, so that only international customers get this option, but domestic customers don't. I've tried playing around with the 'shipping zone' section of the flat rate module, but have been unable to make it work. If a shipping zone isn't set, the module works for everyone, no matter where they're from. If a shipping zone is set (for example, 'World Zones'), it doesn't work for anyone... Does anyone have any pointers? I'd be very grateful!!! Thanks, ~barbara~
  3. Ok... I've found this contribution (Zone Shipping with the support of Insurance Charge) and have modified it to my needs... I've only one small problem, I don't want this shipping method to show for Australian customers, I only want it to show for international customers. So I tried adding a 'shipping zone' (like what is used for the flat rate shipping), but I can't get it to work. The module works fine if there's without the 'shipping zone', it's when I try to integrate it that's I'm having troubles... So I'm wondering if any of you geniuses can take a look for me... Thanks, :) barbara /includes/modules/shipping/zones1.php... <?php /* $Id: zones1.php,v 1.20 2003/06/15 19:48:09 thomasamoulton Exp $ osCommerce, Open Source E-Commerce Solutions [url=http://www.oscommerce.com]http://www.oscommerce.com[/url] Copyright © 2003 osCommerce Released under the GNU General Public License */ class zones1 { var $code, $title, $description, $enabled, $num_zones1; // class constructor function zones1() { $this->code = 'zones1'; $this->title = MODULE_SHIPPING_ZONES1_TEXT_TITLE; $this->description = MODULE_SHIPPING_ZONES1_TEXT_DESCRIPTION; $this->sort_order = MODULE_SHIPPING_ZONES1_SORT_ORDER; $this->icon = ''; $this->tax_class = MODULE_SHIPPING_ZONES1_TAX_CLASS; $this->enabled = ((MODULE_SHIPPING_ZONES1_STATUS == 'True') ? true : false); if ( ($this->enabled == true) && ((int)MODULE_SHIPPING_ZONES1_ZONE > 0) ) { $check_flag = false; $check_query = tep_db_query("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_SHIPPING_ZONES1_ZONE . "' and zone_country_id = '" . $order->delivery['country']['id'] . "' order by zone_id"); while ($check = tep_db_fetch_array($check_query)) { if ($check['zone_id'] < 1) { $check_flag = true; break; } elseif ($check['zone_id'] == $order->delivery['zone_id']) { $check_flag = true; break; } } if ($check_flag == false) { $this->enabled = false; } } // CUSTOMIZE THIS SETTING FOR THE NUMBER OF ZONES1 NEEDED $this->num_zones1 = 4; } // class methods function quote($method = '') { global $order, $cart, $shipping_weight, $shipping_num_boxes; $dest_country = $order->delivery['country']['iso_code_2']; $dest_zone = 0; $error = false; // Zone insurance enhancement $order_total = $cart->show_total(); // Zone insurance enhancement for ($i=1; $i<=$this->num_zones1; $i++) { $countries_table = constant('MODULE_SHIPPING_ZONES1_COUNTRIES_' . $i); $country_zones1 = split("[,]", $countries_table); if (in_array($dest_country, $country_zones1)) { $dest_zone = $i; break; } } if ($dest_zone == 0) { $error = true; } else { $shipping = -1; $insurance = -1; $zones1_cost = constant('MODULE_SHIPPING_ZONES1_COST_' . $dest_zone); // Zone insurance enhancement $zones1_insurance = constant('MODULE_SHIPPING_ZONES1_INSURANCE_' . $dest_zone); // Zone insurance enhancement $zones1_table = split("[:,]" , $zones1_cost); $size = sizeof($zones1_table); for ($i=0; $i<$size; $i+=2) { if ($shipping_weight <= $zones1_table[$i]) { $shipping = $zones1_table[$i+1]; $shipping_method = MODULE_SHIPPING_ZONES1_TEXT_WAY . ' ' . $dest_country . ' : ' . $shipping_weight . ' ' . MODULE_SHIPPING_ZONES1_TEXT_UNITS; break; } } // Zone insurance enhancement $zones1_table_insurance = split("[:,]" , $zones1_insurance); $size = sizeof($zones1_table_insurance); for ($i=0; $i<$size; $i+=2) { if ($order_total <= $zones1_table_insurance[$i]) { $insurance = $zones1_table_insurance[$i+1]; break; } } // Zone insurance enhancement if ($shipping == -1 or $insurance == -1) { $shipping_cost = 0; $insurance = 0; $shipping_method = MODULE_SHIPPING_ZONES1_UNDEFINED_RATE; } else { $shipping_cost = ($shipping * $shipping_num_boxes) + $insurance + constant('MODULE_SHIPPING_ZONES1_HANDLING_' . $dest_zone); } } $this->quotes = array('id' => $this->code, 'module' => MODULE_SHIPPING_ZONES1_TEXT_TITLE, 'methods' => array(array('id' => $this->code, 'title' => $shipping_method, 'cost' => $shipping_cost))); if ($this->tax_class > 0) { $this->quotes['tax'] = tep_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']); } if (tep_not_null($this->icon)) $this->quotes['icon'] = tep_image($this->icon, $this->title); if ($error == true) $this->quotes['error'] = MODULE_SHIPPING_ZONES1_INVALID_ZONE; return $this->quotes; } function check() { if (!isset($this->_check)) { $check_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_ZONES1_STATUS'"); $this->_check = tep_db_num_rows($check_query); } return $this->_check; } function install() { tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) VALUES ('Enable ECI', 'MODULE_SHIPPING_ZONES1_STATUS', 'True', 'Do you want to offer Express Courier International?', '6', '0', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())"); tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Tax Class', 'MODULE_SHIPPING_ZONES1_TAX_CLASS', '0', 'Use the following tax class on the postage fee.', '6', '0', 'tep_get_tax_class_title', 'tep_cfg_pull_down_tax_classes(', now())"); tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort Order', 'MODULE_SHIPPING_ZONES1_SORT_ORDER', '0', 'Sort order of display.', '6', '0', now())"); tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Shipping Zone', 'MODULE_SHIPPING_ZONES1_ZONE', '0', 'If a zone is selected, only enable this shipping method for that zone.', '6', '0', 'tep_get_zone_class_title', 'tep_cfg_pull_down_zone_classes(', now())"); for ($i = 1; $i <= $this->num_zones1; $i++) { if ($i == 1) { $code = 'A'; $codedet = 'A (New Zealand)'; } if ($i == 2) { $code = 'B'; $codedet = 'B (Asia/Pacific)'; } if ($i == 3) { $code = 'C'; $codedet = 'C (USA/Canada/Middle East)'; } if ($i == 4) { $code = 'D'; $codedet = 'D (Rest of the World'; } $default_countries = ''; if ($i == 1) { $default_countries = 'NZ'; } if ($i == 2) { $default_countries = 'BD,BT,BN,KH,CN,CK,TP,FJ,PF,GU,HK,IN,ID,JP,KI,KR,LA,MO,MY,MV,MH,FM,MM,NR,NP,N C,NU,PK,PW,PG,PH,PN,WS,SG,SB,LK,TW,TH,TK,TO,TV,VU,VN,WF'; } if ($i == 3) { $default_countries = 'AF,BH,CA,KM,CY,IR,IL,JO,KW,MG,MU,OM,QU,RE,SA,PM,SY,AE,US,YE'; } if ($i == 4) { $default_countries = 'AL,DZ,AO,AI,AG,AR,AM,AT,AZ,BS,BB,BY,BE,BZ,BJ,BM,BO,BA,BW,BR,IO,BG,BF,BI,CM,C V,KY,CF,TD,CL,CO,CG,CR,CI,HR,CU,CZ,DK,DJ,DM,DO,EC,EG,SV,GQ,ER,EE,ET,FK,FO,FI,FR,G F,GA,GM,GE,DE,GH,GI,GR,GL,GD,GP,GT,GN,GW,GY,HT,HN,HU,IS,IE,IT,JM,KZ,KE,KG,LV,LS,L R,LY,LI,LT,LU,MK,MW,ML,MT,MO,MR,MD,MC,MN,MS,MA,MZ,NA,NL,AN,NI,NE,NG,NO,PA,PY,PE,P L,PT,PR,RO,RU,RW,KN,LC,VC,ST,SN,SC,SL,SK,SI,SO,ZA,ES,SD,SR,SZ,SE,CH,TJ,TZ,TG,TT,T N,TR,TM,TC,UG,UA,GB,UY,UZ,VA,VE,VG,VI,ZM,ZW'; } tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Zone " . $code ." Countries', 'MODULE_SHIPPING_ZONES1_COUNTRIES_" . $i ."', '" . $default_countries . "', 'Comma separated list of two character ISO country codes that are part of Zone " . $codedet . ".', '6', '0', now())"); if ($i == 1) { tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Zone A Postage Table', 'MODULE_SHIPPING_ZONES1_COST_" . $i ."', '.475:37.50,.975:42.00,1.975:49.50,2.975:57.00,4.975:72.50,7.475:92.50,9.975:113. 00,12.475:133.00,14.975:153.00,17.475:173.00,19.975:193.00,200:1000.00,', 'Postage rates to Zone A (New Zealand)', '6', '0', now())"); } if ($i == 2) { tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Zone " . $code ." Postage Table', 'MODULE_SHIPPING_ZONES1_COST_" . $i ."', '.475:40.00,.975:46.50,1.975:55.50,2.975:67.50,4.975:88.00,7.475:115.50,9.975:143 .00,12.475:170.50,14.975:198.00,17.475:225.50,19.975:253.00,200:1000.00,', 'Postage rates to Zone B (Asia/Pacific)', '6', '0', now())"); } if ($i == 3) { tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Zone C Postage Table', 'MODULE_SHIPPING_ZONES1_COST_" . $i ."', '.475:43.50,.975:52.00,1.975:62.50,2.975:79.00,4.975:104.00,7.475:139.00,9.975:17 4.00,12.475:211.00,14.975:248.50,17.475:286.00,19.975:323.50,200:1000.00,', 'Postage rates to Zone C (USA/Canada/Middle East)', '6', '0', now())"); } if ($i == 4) { tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Zone D Postage Table', 'MODULE_SHIPPING_ZONES1_COST_" . $i ."', '.475:45.50,.975:55.00,1.975:69.50,2.975:86.50,4.975:120.50,7.475:163.00,9.975:20 5.50,12.475:248.00,14.975:290.50,17.475:333.00,19.975:375.50,200:1000.00,', 'Postage rates to Zone D (Rest of the World)', '6', '0', now())"); } // Zone insurance enhancement tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Zone " . $code ." Insurance Table', 'MODULE_SHIPPING_ZONES1_INSURANCE_" . $i ."', '100:7.50,200:9.50,300:11.50,400:13.50,500:15.50,600:17.50,700:19.50,800:21.50,90 0:23.50,10000:10000.00', 'Insurance rates based on the value order ($5.50 plus $2 per $100 ordered)', '6', '0', now())"); // Zone insurance enhancement tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Zone " . $code ." Handling Fee', 'MODULE_SHIPPING_ZONES1_HANDLING_" . $i."', '4', 'Handling Fee for this postage zone (cost of packaging, etc.)', '6', '0', now())"); } } function remove() { tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')"); } function keys() { $keys = array('MODULE_SHIPPING_ZONES1_STATUS', 'MODULE_SHIPPING_ZONES1_TAX_CLASS', 'MODULE_SHIPPING_ZONES1_SORT_ORDER', 'MODULE_SHIPPING_ZONES1_ZONE'); for ($i=1; $i<=$this->num_zones1; $i++) { $keys[] = 'MODULE_SHIPPING_ZONES1_COUNTRIES_' . $i; $keys[] = 'MODULE_SHIPPING_ZONES1_COST_' . $i; // Zone insurance enhancement $keys[] = 'MODULE_SHIPPING_ZONES1_INSURANCE_' . $i; // Zone insurance enhancement $keys[] = 'MODULE_SHIPPING_ZONES1_HANDLING_' . $i; } return $keys; } } ?>
  4. bobsi18

    Active Countries

    Great, just tried it, works well, thanks again! ~barbara~
  5. bobsi18

    Active Countries

    THANKS! I don't have time to try t out right now, but will give it a whirl tonight. Yes, it does use states, but I've actually turned them 'off', so you can't see them - so the customer just enters in their country and zip code (that's all I need for postage :)).. cheers, ~barbara~
  6. bobsi18

    Active Countries

    Thanks for your response but unfortunatly it isn't that simple :( These two contributions have no files in common - it's something different that's causing the (potential) problems. Ship in cart provides an estimate of shipping costs in the shopping cart - before the customer has started to checkout. The script uses a drop down list of countries to find out what country the customer is from in order to charge the right shipping. My problem is that list - It's a complete list of the countries - but I've used the Active Countries contribution to turn most of the countries 'off'. So I need it to show only the countries I have selected in admin. I'm still *hoping* some-ones already done it, otherwise I'm gunna have to dive in! ~barbara~
  7. bobsi18

    Active Countries

    Hi there... To begin with - a fantastic contribution, just what (I didn't know) I needed!!! THANKS!!! What I'm wondering is - is anyone using it with 'Ship in Cart' (http://www.oscommerce.com/community/contributions,1781/category,all/search,ship+cart)? I'd love to get these two working together and I'll start giving it a shot, but I'm still very much a beginner and am *hoping* some-one already done it :thumbsup: Thanks, ~Barbara~
  8. bobsi18

    Discount for X number of the same product.

    I think this is what you're looking for... http://www.oscommerce.com/community/contri...antity+discount You can set different prices based on how much of the same product is ordered. E.g. Buy 1 widget, price= $5 Buy 10 widgets, price = $3.50 per widget Buy 50 widgets, price = $2 per widget
  9. Hi there... Thanks for the reply :) Yep, I'm looking to add an expiry date in the top, that applies to everything in the category (your number 1). I reguarily have week-long sales that apply to whole categories, and it would be great for them to automatically expire. I've started looking at the code, but have realised it's going to take a fair bit more time than I thought - I've got the display to add the date working, I just don't know how to get that to add the date to the database... Thanks for any advice... ~Barbara~ p.s. the earlier post about expiry dates wasn't from me, I just noticed someone asking about them and thought I'd check up to see if anything had been done :thumbsup:
  10. Hi there... First off, fantastic contrib :) Didn't know I needed it, but man I did!!! Second question (it was asked earlier in the thread, about page 3) - has anyone managed to get it working with an expiry date? I'm just about to go off and start fiddling myself, but thought I'd better check, in case someone already has the answer for me :lol: So any ideas? Thanks, ~Barbara~
  11. bobsi18

    Specials valid from

    I'm just wondering if any-one's using this contribution successfully (http://www.oscommerce.com/community/contributions,2520/category,all/search,specials+valid+from)? It's a great idea, but I'm having a fair bit of trouble implementing it in a store with SPPC installed. At the moment, when a special is modified, it doesn't save the modification and it enters a new special into the database with products_id = 0. This means that everything in my store changes it's price to this new special's. Any one out there with some hints? Thanks, ~Barbara~
  12. bobsi18

    [Contribution] STS v4

    :blush: :blush: :blush: Ignore my above post :) I found a post that said said the $content tage grabs all the content between the left and right columsn.... Before I installed STS, I commented out the righthand column, I didn't want it displaying. Cos it was commented out, the $content tag was grabbing nothing. All fixed now :)
  13. bobsi18

    [Contribution] STS v4

    Hi there... I thought I'd gotten past the 'newbe' stage and I'd be ready to stop asking studid questions, appears I was wrong :( I've installed STS v4.0.7 and have it working correctly (I think). I've been playing around with designs, and have things displaying nicely. My problem? $content is doing nothing at all. I have the category list on the side, all the other boxes, the logo up the top etc etc, I just don't have ANY content?! I know this is probably really simple, so please indulge me, what am I doing wrong? I thought I just have to display '$content', and the product info, or the main page or... etc will just show? HELP!! THANKS :blush: ~Barbara~
  14. Hi... This might seem like a stupid question.. but have you tried the UPS fix on the contributions page? If not, I'd suggest trying that. If not, I'd suggest setting up a different module that displays shipping weights (I'm using the AusPost one cose I'm in australia, but there are others that are probably more relevant) and just test it to see if the problem's with the 'add-to-weight' contrib, or the UPS sontrib. ~Barbara~
  15. I feel like I'm talking to myself on these forums... oh well! I think it's working (at least it's working in the initital tests)... My advanced_search_results are as follows (where 'manufacturer2' is the name of my second manufacturer)... **NOTE - I have made a few changes to this file, so don't copy and paste!!!*** <?php /* $Id: advanced_search_result.php,v 1.72 2003/06/23 06:50:11 project3000 Exp $ adapted for Separate Pricing Per Customer 2005/02/06 adapted for enable/disable categories 26/3/06 adapted for quantity breaks v1.2 adapted for products extra fields v2.0 osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2003 osCommerce Released under the GNU General Public License */ require('includes/application_top.php'); require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_ADVANCED_SEARCH); $error = false; if ( (isset($HTTP_GET_VARS['keywords']) && empty($HTTP_GET_VARS['keywords'])) && (isset($HTTP_GET_VARS['dfrom']) && (empty($HTTP_GET_VARS['dfrom']) || ($HTTP_GET_VARS['dfrom'] == DOB_FORMAT_STRING))) && (isset($HTTP_GET_VARS['dto']) && (empty($HTTP_GET_VARS['dto']) || ($HTTP_GET_VARS['dto'] == DOB_FORMAT_STRING))) && (isset($HTTP_GET_VARS['pfrom']) && !is_numeric($HTTP_GET_VARS['pfrom'])) && (isset($HTTP_GET_VARS['pto']) && !is_numeric($HTTP_GET_VARS['pto'])) ) { $error = true; $messageStack->add_session('search', ERROR_AT_LEAST_ONE_INPUT); } else { $dfrom = ''; $dto = ''; $pfrom = ''; $pto = ''; $keywords = ''; if (isset($HTTP_GET_VARS['dfrom'])) { $dfrom = (($HTTP_GET_VARS['dfrom'] == DOB_FORMAT_STRING) ? '' : $HTTP_GET_VARS['dfrom']); } if (isset($HTTP_GET_VARS['dto'])) { $dto = (($HTTP_GET_VARS['dto'] == DOB_FORMAT_STRING) ? '' : $HTTP_GET_VARS['dto']); } if (isset($HTTP_GET_VARS['pfrom'])) { $pfrom = $HTTP_GET_VARS['pfrom']; } if (isset($HTTP_GET_VARS['pto'])) { $pto = $HTTP_GET_VARS['pto']; } if (isset($HTTP_GET_VARS['keywords'])) { $keywords = $HTTP_GET_VARS['keywords']; } $date_check_error = false; if (tep_not_null($dfrom)) { if (!tep_checkdate($dfrom, DOB_FORMAT_STRING, $dfrom_array)) { $error = true; $date_check_error = true; $messageStack->add_session('search', ERROR_INVALID_FROM_DATE); } } if (tep_not_null($dto)) { if (!tep_checkdate($dto, DOB_FORMAT_STRING, $dto_array)) { $error = true; $date_check_error = true; $messageStack->add_session('search', ERROR_INVALID_TO_DATE); } } if (($date_check_error == false) && tep_not_null($dfrom) && tep_not_null($dto)) { if (mktime(0, 0, 0, $dfrom_array[1], $dfrom_array[2], $dfrom_array[0]) > mktime(0, 0, 0, $dto_array[1], $dto_array[2], $dto_array[0])) { $error = true; $messageStack->add_session('search', ERROR_TO_DATE_LESS_THAN_FROM_DATE); } } $price_check_error = false; if (tep_not_null($pfrom)) { if (!settype($pfrom, 'double')) { $error = true; $price_check_error = true; $messageStack->add_session('search', ERROR_PRICE_FROM_MUST_BE_NUM); } } if (tep_not_null($pto)) { if (!settype($pto, 'double')) { $error = true; $price_check_error = true; $messageStack->add_session('search', ERROR_PRICE_TO_MUST_BE_NUM); } } if (($price_check_error == false) && is_float($pfrom) && is_float($pto)) { if ($pfrom >= $pto) { $error = true; $messageStack->add_session('search', ERROR_PRICE_TO_LESS_THAN_PRICE_FROM); } } if (tep_not_null($keywords)) { if (!tep_parse_search_string($keywords, $search_keywords)) { $error = true; $messageStack->add_session('search', ERROR_INVALID_KEYWORDS); } } } if (empty($dfrom) && empty($dto) && empty($pfrom) && empty($pto) && empty($keywords)) { $error = true; $messageStack->add_session('search', ERROR_AT_LEAST_ONE_INPUT); } if ($error == true) { tep_redirect(tep_href_link(FILENAME_ADVANCED_SEARCH, tep_get_all_get_params(), 'NONSSL', true, false)); } $breadcrumb->add(NAVBAR_TITLE_1, tep_href_link(FILENAME_ADVANCED_SEARCH)); $breadcrumb->add(NAVBAR_TITLE_2, tep_href_link(FILENAME_ADVANCED_SEARCH_RESULT, tep_get_all_get_params(), 'NONSSL', true, false)); ?> <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"> <html <?php echo HTML_PARAMS; ?>> <head> <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>"> <?php // BOF: WebMakers.com Changed: Header Tag Controller v2.5.2 // Replaced by header_tags.php if ( file_exists(DIR_WS_INCLUDES . 'header_tags.php') ) { require(DIR_WS_INCLUDES . 'header_tags.php'); } else { ?> <title><?php echo TITLE; ?></title> <?php } // EOF: WebMakers.com Changed: Header Tag Controller v2.5.2 ?> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0"> <!-- header //--> <?php require(DIR_WS_INCLUDES . 'header.php'); ?> <!-- header_eof //--> <!-- body //--> <table border="0" width="100%" cellspacing="3" cellpadding="3"> <tr> <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2"> <!-- left_navigation //--> <?php require(DIR_WS_INCLUDES . 'column_left.php'); ?> <!-- left_navigation_eof //--> </table></td> <!-- body_text //--> <td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td class="pageHeading"><?php echo HEADING_TITLE_2; ?></td> <td class="pageHeading" align="right"><?php echo tep_image(DIR_WS_IMAGES . 'table_background_browse.gif', HEADING_TITLE_2, HEADING_IMAGE_WIDTH, HEADING_IMAGE_HEIGHT); ?></td> </tr> </table></td> </tr> <tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td> </tr> <tr> <td> <?php // create column list $define_list = array('PRODUCT_LIST_MODEL' => PRODUCT_LIST_MODEL, 'PRODUCT_LIST_NAME' => PRODUCT_LIST_NAME, 'PRODUCT_LIST_MANUFACTURER' => PRODUCT_LIST_MANUFACTURER, 'PRODUCT_LIST_PRICE' => PRODUCT_LIST_PRICE, 'PRODUCT_LIST_QUANTITY' => PRODUCT_LIST_QUANTITY, 'PRODUCT_LIST_WEIGHT' => PRODUCT_LIST_WEIGHT, 'PRODUCT_LIST_IMAGE' => PRODUCT_LIST_IMAGE, 'PRODUCT_LIST_BUY_NOW' => PRODUCT_LIST_BUY_NOW); asort($define_list); $column_list = array(); reset($define_list); while (list($key, $value) = each($define_list)) { if ($value > 0) $column_list[] = $key; } // BOF Separate Pricing Per Customer if(!tep_session_is_registered('sppc_customer_group_id')) { $customer_group_id = '0'; } else { $customer_group_id = $sppc_customer_group_id; } // EOF Separate Pricing Per Customer $select_column_list = ''; for ($i=0, $n=sizeof($column_list); $i<$n; $i++) { switch ($column_list[$i]) { case 'PRODUCT_LIST_MODEL': $select_column_list .= 'p.products_model, '; break; case 'PRODUCT_LIST_MANUFACTURER': $select_column_list .= 'm.manufacturers_name, '; break; case 'PRODUCT_LIST_QUANTITY': $select_column_list .= 'p.products_quantity, '; break; case 'PRODUCT_LIST_IMAGE': $select_column_list .= 'p.products_image, '; break; case 'PRODUCT_LIST_WEIGHT': $select_column_list .= 'p.products_weight, '; break; } } // BOF Separate Pricing Per Customer $status_tmp_product_prices_table = false; $status_need_to_get_prices = false; // find out if sorting by price has been requested if ( (isset($HTTP_GET_VARS['sort'])) && (ereg('[1-8][ad]', $HTTP_GET_VARS['sort'])) && (substr($HTTP_GET_VARS['sort'], 0, 1) <= sizeof($column_list)) ){ $_sort_col = substr($HTTP_GET_VARS['sort'], 0 , 1); if ($column_list[$_sort_col-1] == 'PRODUCT_LIST_PRICE') { $status_need_to_get_prices = true; } } if ((tep_not_null($pfrom) || tep_not_null($pto) || $status_need_to_get_prices == true) && $customer_group_id != '0') { $product_prices_table = TABLE_PRODUCTS_GROUP_PRICES.$customer_group_id; // the table with product prices for a particular customer group is re-built only a number of times per hour // (setting in /includes/database_tables.php called MAXIMUM_DELAY_UPDATE_PG_PRICES_TABLE, in minutes) // to trigger the update the next function is called (new function that should have been // added to includes/functions/database.php) tep_db_check_age_products_group_prices_cg_table($customer_group_id); $status_tmp_product_prices_table = true; } elseif ((tep_not_null($pfrom) || tep_not_null($pto) || $status_need_to_get_prices == true) && $customer_group_id == '0') { // to be able to sort on retail prices we *need* to get the special prices instead of leaving them // NULL and do product_listing the job of getting the special price // first make sure that table exists and needs no updating tep_db_check_age_specials_retail_table(); $status_tmp_special_prices_table = true; } // end elseif ((tep_not_null($pfrom) || (tep_not_null($pfrom)) && .... if ($status_tmp_product_prices_table == true) { $select_str = "select distinct " . $select_column_list . " m.manufacturers_id, bs.manufacturer2_id, p.products_id, pd.products_name, tmp_pp.products_price, p.products_price1, p.products_price2, p.products_price3, p.products_price4, p.products_price5, p.products_price6, p.products_price7, p.products_price8, p.products_price1_qty, p.products_price2_qty, p.products_price3_qty, p.products_price4_qty, p.products_price5_qty, p.products_price6_qty, p.products_price7_qty, p.products_price8_qty, p.products_qty_blocks, p.products_tax_class_id, if(tmp_pp.status, tmp_pp.specials_new_products_price, NULL) as specials_new_products_price, IF(tmp_pp.status, tmp_pp.specials_new_products_price, tmp_pp.products_price) as final_price "; } elseif ($status_tmp_special_prices_table == true) { $select_str = "select distinct " . $select_column_list . " m.manufacturers_id, bs.manufacturer2_id, p.products_id, pd.products_name, p.products_price, p.products_tax_class_id, if(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, if(s.status, s.specials_new_products_price, p.products_price) as final_price "; } else { $select_str = "select distinct " . $select_column_list . " m.manufacturers_id, bs.manufacturer2_id, p.products_id, pd.products_name, p.products_price, p.products_tax_class_id, NULL as specials_new_products_price, NULL as final_price "; } // next line original select query // $select_str = "select distinct " . $select_column_list . " m.manufacturers_id, p.products_id, pd.products_name, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price "; if ( (DISPLAY_PRICE_WITH_TAX == 'true') && (tep_not_null($pfrom) || tep_not_null($pto)) ) { $select_str .= ", SUM(tr.tax_rate) as tax_rate "; } if ($status_tmp_product_prices_table == true) { $from_str = "from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m using(manufacturers_id) left join " . TABLE_MANUFACTURER2 . " bs using(manufacturer2_id), " . TABLE_PRODUCTS_DESCRIPTION . " pd left join " . $product_prices_table . " as tmp_pp using(products_id), " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c"; } elseif ($status_tmp_special_prices_table == true) { $from_str = "from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m using(manufacturers_id) left join " . TABLE_MANUFACTURER2 . " bs using(manufacture2_id), " . TABLE_PRODUCTS_DESCRIPTION . " pd left join " . TABLE_SPECIALS_RETAIL_PRICES . " s on p.products_id = s.products_id , " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c"; } else { // START: Extra Fields Contribution // $from_str = "from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m using(manufacturers_id), " . TABLE_PRODUCTS_DESCRIPTION . " pd left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c"; $from_str = "from (" . TABLE_PRODUCTS . " p left join " . TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS . " p2pef on p.products_id=p2pef.products_id) left join " . TABLE_MANUFACTURERS . " m on m.manufacturers_id=p.manufacturers_id left join " . TABLE_MANUFACTURER2 . " bs on bs.manufacturer2_id=p.manufacturer2_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c"; // END: Extra Fields Contribution } // EOF Separate Pricing Per Customer if ( (DISPLAY_PRICE_WITH_TAX == 'true') && (tep_not_null($pfrom) || tep_not_null($pto)) ) { if (!tep_session_is_registered('customer_country_id')) { $customer_country_id = STORE_COUNTRY; $customer_zone_id = STORE_ZONE; } $from_str .= " left join " . TABLE_TAX_RATES . " tr on p.products_tax_class_id = tr.tax_class_id left join " . TABLE_ZONES_TO_GEO_ZONES . " gz on tr.tax_zone_id = gz.geo_zone_id and (gz.zone_country_id is null or gz.zone_country_id = '0' or gz.zone_country_id = '" . (int)$customer_country_id . "') and (gz.zone_id is null or gz.zone_id = '0' or gz.zone_id = '" . (int)$customer_zone_id . "')"; } // #################### Added Enable / Disable Categorie ################### // $where_str = " where p.products_status = '1' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id "; $where_str = " where p.products_status = '1' and c.categories_status = '1' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id "; // ################### End Added Enable / Disable Categorie ################### if (isset($HTTP_GET_VARS['categories_id']) && tep_not_null($HTTP_GET_VARS['categories_id'])) { if (isset($HTTP_GET_VARS['inc_subcat']) && ($HTTP_GET_VARS['inc_subcat'] == '1')) { $subcategories_array = array(); tep_get_subcategories($subcategories_array, $HTTP_GET_VARS['categories_id']); $where_str .= " and p2c.products_id = p.products_id and p2c.products_id = pd.products_id and (p2c.categories_id = '" . (int)$HTTP_GET_VARS['categories_id'] . "'"; for ($i=0, $n=sizeof($subcategories_array); $i<$n; $i++ ) { $where_str .= " or p2c.categories_id = '" . (int)$subcategories_array[$i] . "'"; } $where_str .= ")"; } else { $where_str .= " and p2c.products_id = p.products_id and p2c.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$HTTP_GET_VARS['categories_id'] . "'"; } } if (isset($HTTP_GET_VARS['manufacturers_id']) && tep_not_null($HTTP_GET_VARS['manufacturers_id'])) { $where_str .= " and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "'"; } if (isset($HTTP_GET_VARS['manufacturer2_id']) && tep_not_null($HTTP_GET_VARS['manufacturer2_id'])) { $where_str .= " and bs.manufacturer2_id = '" . (int)$HTTP_GET_VARS['manufacturer2_id'] . "'"; } if (isset($search_keywords) && (sizeof($search_keywords) > 0)) { $where_str .= " and ("; for ($i=0, $n=sizeof($search_keywords); $i<$n; $i++ ) { switch ($search_keywords[$i]) { case '(': case ')': case 'and': case 'or': $where_str .= " " . $search_keywords[$i] . " "; break; default: $keyword = tep_db_prepare_input($search_keywords[$i]); $where_str .= "(pd.products_name like '%" . tep_db_input($keyword) . "%' or p.products_model like '%" . tep_db_input($keyword) . "%' or m.manufacturers_name like '%" . tep_db_input($keyword) . "%' or bs.manufacturer2_name like '%" . tep_db_input($keyword) . "%' or p.products_price7 like '%" . tep_db_input($keyword) . "%'"; if (isset($HTTP_GET_VARS['search_in_description']) && ($HTTP_GET_VARS['search_in_description'] == '1')) $where_str .= " or pd.products_description like '%" . tep_db_input($keyword) . "%'"; $where_str .= ')'; //ATTEMPT if (isset($HTTP_GET_VARS['search_in_bulk']) && ($HTTP_GET_VARS['search_in_bulk'] == '1') && ($select_str['products_price7'] > '0')) $where_str .= " and p.products_price7 like 'YES'"; // $where_str .= ')'; //ATTEMPT break; } } $where_str .= " )"; } if (tep_not_null($dfrom)) { $where_str .= " and p.products_date_added >= '" . tep_date_raw($dfrom) . "'"; } if (tep_not_null($dto)) { $where_str .= " and p.products_date_added <= '" . tep_date_raw($dto) . "'"; } if (tep_not_null($pfrom)) { if ($currencies->is_set($currency)) { $rate = $currencies->get_value($currency); $pfrom = $pfrom / $rate; } } if (tep_not_null($pto)) { if (isset($rate)) { $pto = $pto / $rate; } } // BOF Separate Pricing Per Customer if ($status_tmp_product_prices_table == true) { if (DISPLAY_PRICE_WITH_TAX == 'true') { if ($pfrom > 0) $where_str .= " and (IF(tmp_pp.status, tmp_pp.specials_new_products_price, tmp_pp.products_price) * if(gz.geo_zone_id is null, 1, 1 + (tr.tax_rate / 100) ) >= " . (double)$pfrom . ")"; if ($pto > 0) $where_str .= " and (IF(tmp_pp.status, tmp_pp.specials_new_products_price, tmp_pp.products_price) * if(gz.geo_zone_id is null, 1, 1 + (tr.tax_rate / 100) ) <= " . (double)$pto . ")"; } else { if ($pfrom > 0) $where_str .= " and (IF(tmp_pp.status, tmp_pp.specials_new_products_price, tmp_pp.products_price) >= " . (double)$pfrom . ")"; if ($pto > 0) $where_str .= " and (IF(tmp_pp.status, tmp_pp.specials_new_products_price, tmp_pp.products_price) <= " . (double)$pto . ")"; } } else { // $status_tmp_product_prices_table is not true: uses p.products_price instead of cg_products_price // because in the where clause for the case $status_tmp_special_prices is true, the table // specials_retail_prices is abbreviated with "s" also we can use the same code for "true" and for "false" if (DISPLAY_PRICE_WITH_TAX == 'true') { if ($pfrom > 0) $where_str .= " and (IF(s.status AND s.customers_group_id = '" . $customer_group_id . "', s.specials_new_products_price, p.products_price) * if(gz.geo_zone_id is null, 1, 1 + (tr.tax_rate / 100) ) >= " . (double)$pfrom . ")"; if ($pto > 0) $where_str .= " and (IF(s.status AND s.customers_group_id = '" . $customer_group_id . "', s.specials_new_products_price, p.products_price) * if(gz.geo_zone_id is null, 1, 1 + (tr.tax_rate / 100) ) <= " . (double)$pto . ")"; } else { if ($pfrom > 0) $where_str .= " and (IF(s.status AND s.customers_group_id = '" . $customer_group_id . "', s.specials_new_products_price, p.products_price) >= " . (double)$pfrom . ")"; if ($pto > 0) $where_str .= " and (IF(s.status AND s.customers_group_id = '" . $customer_group_id . "', s.specials_new_products_price, p.products_price) <= " . (double)$pto . ")"; } } // EOF Separate Pricing Per Customer if ( (DISPLAY_PRICE_WITH_TAX == 'true') && (tep_not_null($pfrom) || tep_not_null($pto)) ) { $where_str .= " group by p.products_id, tr.tax_priority"; } if ( (!isset($HTTP_GET_VARS['sort'])) || (!ereg('[1-8][ad]', $HTTP_GET_VARS['sort'])) || (substr($HTTP_GET_VARS['sort'], 0, 1) > sizeof($column_list)) ) { for ($i=0, $n=sizeof($column_list); $i<$n; $i++) { if ($column_list[$i] == 'PRODUCT_LIST_NAME') { $HTTP_GET_VARS['sort'] = $i+1 . 'a'; $order_str = ' order by pd.products_name'; break; } } } else { $sort_col = substr($HTTP_GET_VARS['sort'], 0 , 1); $sort_order = substr($HTTP_GET_VARS['sort'], 1); $order_str = ' order by '; switch ($column_list[$sort_col-1]) { case 'PRODUCT_LIST_MODEL': $order_str .= "p.products_model " . ($sort_order == 'd' ? "desc" : "") . ", pd.products_name"; break; case 'PRODUCT_LIST_NAME': $order_str .= "pd.products_name " . ($sort_order == 'd' ? "desc" : ""); break; case 'PRODUCT_LIST_MANUFACTURER': $order_str .= "m.manufacturers_name " . ($sort_order == 'd' ? "desc" : "") . ", pd.products_name"; break; case 'PRODUCT_LIST_QUANTITY': $order_str .= "p.products_quantity " . ($sort_order == 'd' ? "desc" : "") . ", pd.products_name"; break; case 'PRODUCT_LIST_IMAGE': $order_str .= "pd.products_name"; break; case 'PRODUCT_LIST_WEIGHT': $order_str .= "p.products_weight " . ($sort_order == 'd' ? "desc" : "") . ", pd.products_name"; break; case 'PRODUCT_LIST_PRICE': $order_str .= "final_price " . ($sort_order == 'd' ? "desc" : "") . ", pd.products_name"; break; } } $listing_sql = $select_str . $from_str . $where_str . $order_str; require(DIR_WS_MODULES . FILENAME_PRODUCT_LISTING); ?> </td> </tr> <tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td> </tr> <tr> <td class="main"><?php echo '<a href="' . tep_href_link(FILENAME_ADVANCED_SEARCH, tep_get_all_get_params(array('sort', 'page')), 'NONSSL', true, false) . '">' . tep_image_button('button_back.gif', IMAGE_BUTTON_BACK) . '</a>'; ?></td> </tr> </table></td> <!-- body_text_eof //--> <!-- <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2"> --> <!-- right_navigation //--> <?php //require(DIR_WS_INCLUDES . 'column_right.php'); ?> <!-- right_navigation_eof //--> <!-- </table></td> --> </tr> </table> <!-- body_eof //--> <!-- footer //--> <?php require(DIR_WS_INCLUDES . 'footer.php'); ?> <!-- footer_eof //--> <br> </body> </html> <?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>
  16. Hi there. I've installed 'Manufacture 2' (http://www.oscommerce.com/community/contributions,2634) and have successfully added a second manufacture to all my products. What I'm trying to do now is add the ability to search for tis second manufacturer on the advanced search page. I think I've got the code on the actual search page working ok, it's the code on the advanced_search_results.php that I cannot for the life of me figure out. I started by searching the file and finding any instance where 'manufacturer' was mentioned. I then copied the code and pasted it in, changing 'manufacturer' to 'beadshape' (thats my name for my new manufacturer). This produced an error, something about 'm' not being unique (a lot of the code read: m.manufacturers_name etc). So I changed the 'm' to 'b'. Now I'm getting the following error: (where 'black' is the word 'm searching for)... Has anyone ever done this? Can anyone give me any pointers? I don't even really understand the error... Thanks for any advice anyone might be able to give me ~Barbara~ advanced_search_results.php code follows... <?php /* $Id: advanced_search_result.php,v 1.72 2003/06/23 06:50:11 project3000 Exp $ adapted for Separate Pricing Per Customer 2005/02/06 adapted for enable/disable categories 26/3/06 adapted for quantity breaks v1.2 adapted for products extra fields v2.0 osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2003 osCommerce Released under the GNU General Public License */ require('includes/application_top.php'); require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_ADVANCED_SEARCH); $error = false; if ( (isset($HTTP_GET_VARS['keywords']) && empty($HTTP_GET_VARS['keywords'])) && (isset($HTTP_GET_VARS['dfrom']) && (empty($HTTP_GET_VARS['dfrom']) || ($HTTP_GET_VARS['dfrom'] == DOB_FORMAT_STRING))) && (isset($HTTP_GET_VARS['dto']) && (empty($HTTP_GET_VARS['dto']) || ($HTTP_GET_VARS['dto'] == DOB_FORMAT_STRING))) && (isset($HTTP_GET_VARS['pfrom']) && !is_numeric($HTTP_GET_VARS['pfrom'])) && (isset($HTTP_GET_VARS['pto']) && !is_numeric($HTTP_GET_VARS['pto'])) ) { $error = true; $messageStack->add_session('search', ERROR_AT_LEAST_ONE_INPUT); } else { $dfrom = ''; $dto = ''; $pfrom = ''; $pto = ''; $keywords = ''; if (isset($HTTP_GET_VARS['dfrom'])) { $dfrom = (($HTTP_GET_VARS['dfrom'] == DOB_FORMAT_STRING) ? '' : $HTTP_GET_VARS['dfrom']); } if (isset($HTTP_GET_VARS['dto'])) { $dto = (($HTTP_GET_VARS['dto'] == DOB_FORMAT_STRING) ? '' : $HTTP_GET_VARS['dto']); } if (isset($HTTP_GET_VARS['pfrom'])) { $pfrom = $HTTP_GET_VARS['pfrom']; } if (isset($HTTP_GET_VARS['pto'])) { $pto = $HTTP_GET_VARS['pto']; } if (isset($HTTP_GET_VARS['keywords'])) { $keywords = $HTTP_GET_VARS['keywords']; } $date_check_error = false; if (tep_not_null($dfrom)) { if (!tep_checkdate($dfrom, DOB_FORMAT_STRING, $dfrom_array)) { $error = true; $date_check_error = true; $messageStack->add_session('search', ERROR_INVALID_FROM_DATE); } } if (tep_not_null($dto)) { if (!tep_checkdate($dto, DOB_FORMAT_STRING, $dto_array)) { $error = true; $date_check_error = true; $messageStack->add_session('search', ERROR_INVALID_TO_DATE); } } if (($date_check_error == false) && tep_not_null($dfrom) && tep_not_null($dto)) { if (mktime(0, 0, 0, $dfrom_array[1], $dfrom_array[2], $dfrom_array[0]) > mktime(0, 0, 0, $dto_array[1], $dto_array[2], $dto_array[0])) { $error = true; $messageStack->add_session('search', ERROR_TO_DATE_LESS_THAN_FROM_DATE); } } $price_check_error = false; if (tep_not_null($pfrom)) { if (!settype($pfrom, 'double')) { $error = true; $price_check_error = true; $messageStack->add_session('search', ERROR_PRICE_FROM_MUST_BE_NUM); } } if (tep_not_null($pto)) { if (!settype($pto, 'double')) { $error = true; $price_check_error = true; $messageStack->add_session('search', ERROR_PRICE_TO_MUST_BE_NUM); } } if (($price_check_error == false) && is_float($pfrom) && is_float($pto)) { if ($pfrom >= $pto) { $error = true; $messageStack->add_session('search', ERROR_PRICE_TO_LESS_THAN_PRICE_FROM); } } if (tep_not_null($keywords)) { if (!tep_parse_search_string($keywords, $search_keywords)) { $error = true; $messageStack->add_session('search', ERROR_INVALID_KEYWORDS); } } } if (empty($dfrom) && empty($dto) && empty($pfrom) && empty($pto) && empty($keywords)) { $error = true; $messageStack->add_session('search', ERROR_AT_LEAST_ONE_INPUT); } if ($error == true) { tep_redirect(tep_href_link(FILENAME_ADVANCED_SEARCH, tep_get_all_get_params(), 'NONSSL', true, false)); } $breadcrumb->add(NAVBAR_TITLE_1, tep_href_link(FILENAME_ADVANCED_SEARCH)); $breadcrumb->add(NAVBAR_TITLE_2, tep_href_link(FILENAME_ADVANCED_SEARCH_RESULT, tep_get_all_get_params(), 'NONSSL', true, false)); ?> <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"> <html <?php echo HTML_PARAMS; ?>> <head> <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>"> <?php // BOF: WebMakers.com Changed: Header Tag Controller v2.5.2 // Replaced by header_tags.php if ( file_exists(DIR_WS_INCLUDES . 'header_tags.php') ) { require(DIR_WS_INCLUDES . 'header_tags.php'); } else { ?> <title><?php echo TITLE; ?></title> <?php } // EOF: WebMakers.com Changed: Header Tag Controller v2.5.2 ?> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0"> <!-- header //--> <?php require(DIR_WS_INCLUDES . 'header.php'); ?> <!-- header_eof //--> <!-- body //--> <table border="0" width="100%" cellspacing="3" cellpadding="3"> <tr> <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2"> <!-- left_navigation //--> <?php require(DIR_WS_INCLUDES . 'column_left.php'); ?> <!-- left_navigation_eof //--> </table></td> <!-- body_text //--> <td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td class="pageHeading"><?php echo HEADING_TITLE_2; ?></td> <td class="pageHeading" align="right"><?php echo tep_image(DIR_WS_IMAGES . 'table_background_browse.gif', HEADING_TITLE_2, HEADING_IMAGE_WIDTH, HEADING_IMAGE_HEIGHT); ?></td> </tr> </table></td> </tr> <tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td> </tr> <tr> <td> <?php // create column list $define_list = array('PRODUCT_LIST_MODEL' => PRODUCT_LIST_MODEL, 'PRODUCT_LIST_NAME' => PRODUCT_LIST_NAME, 'PRODUCT_LIST_MANUFACTURER' => PRODUCT_LIST_MANUFACTURER, //beadshape 'PRODUCT_LIST_BEADSHAPE' => PRODUCT_LIST_BEADSHAPE, //beadshape 'PRODUCT_LIST_PRICE' => PRODUCT_LIST_PRICE, 'PRODUCT_LIST_QUANTITY' => PRODUCT_LIST_QUANTITY, 'PRODUCT_LIST_WEIGHT' => PRODUCT_LIST_WEIGHT, 'PRODUCT_LIST_IMAGE' => PRODUCT_LIST_IMAGE, 'PRODUCT_LIST_BUY_NOW' => PRODUCT_LIST_BUY_NOW); asort($define_list); $column_list = array(); reset($define_list); while (list($key, $value) = each($define_list)) { if ($value > 0) $column_list[] = $key; } // BOF Separate Pricing Per Customer if(!tep_session_is_registered('sppc_customer_group_id')) { $customer_group_id = '0'; } else { $customer_group_id = $sppc_customer_group_id; } // EOF Separate Pricing Per Customer $select_column_list = ''; for ($i=0, $n=sizeof($column_list); $i<$n; $i++) { switch ($column_list[$i]) { case 'PRODUCT_LIST_MODEL': $select_column_list .= 'p.products_model, '; break; case 'PRODUCT_LIST_MANUFACTURER': $select_column_list .= 'm.manufacturers_name, '; break; //beadshape case 'PRODUCT_LIST_BEADSHAPE': $select_column_list .= 'b.beadshape_name, '; break; //beadshape case 'PRODUCT_LIST_QUANTITY': $select_column_list .= 'p.products_quantity, '; break; case 'PRODUCT_LIST_IMAGE': $select_column_list .= 'p.products_image, '; break; case 'PRODUCT_LIST_WEIGHT': $select_column_list .= 'p.products_weight, '; break; } } // BOF Separate Pricing Per Customer $status_tmp_product_prices_table = false; $status_need_to_get_prices = false; // find out if sorting by price has been requested if ( (isset($HTTP_GET_VARS['sort'])) && (ereg('[1-8][ad]', $HTTP_GET_VARS['sort'])) && (substr($HTTP_GET_VARS['sort'], 0, 1) <= sizeof($column_list)) ){ $_sort_col = substr($HTTP_GET_VARS['sort'], 0 , 1); if ($column_list[$_sort_col-1] == 'PRODUCT_LIST_PRICE') { $status_need_to_get_prices = true; } } if ((tep_not_null($pfrom) || tep_not_null($pto) || $status_need_to_get_prices == true) && $customer_group_id != '0') { $product_prices_table = TABLE_PRODUCTS_GROUP_PRICES.$customer_group_id; // the table with product prices for a particular customer group is re-built only a number of times per hour // (setting in /includes/database_tables.php called MAXIMUM_DELAY_UPDATE_PG_PRICES_TABLE, in minutes) // to trigger the update the next function is called (new function that should have been // added to includes/functions/database.php) tep_db_check_age_products_group_prices_cg_table($customer_group_id); $status_tmp_product_prices_table = true; } elseif ((tep_not_null($pfrom) || tep_not_null($pto) || $status_need_to_get_prices == true) && $customer_group_id == '0') { // to be able to sort on retail prices we *need* to get the special prices instead of leaving them // NULL and do product_listing the job of getting the special price // first make sure that table exists and needs no updating tep_db_check_age_specials_retail_table(); $status_tmp_special_prices_table = true; } // end elseif ((tep_not_null($pfrom) || (tep_not_null($pfrom)) && .... if ($status_tmp_product_prices_table == true) { $select_str = "select distinct " . $select_column_list . " m.manufacturers_id, b.beadshape_id, p.products_id, pd.products_name, tmp_pp.products_price, p.products_price1, p.products_price2, p.products_price3, p.products_price4, p.products_price5, p.products_price6, p.products_price7, p.products_price8, p.products_price1_qty, p.products_price2_qty, p.products_price3_qty, p.products_price4_qty, p.products_price5_qty, p.products_price6_qty, p.products_price7_qty, p.products_price8_qty, p.products_qty_blocks, p.products_tax_class_id, if(tmp_pp.status, tmp_pp.specials_new_products_price, NULL) as specials_new_products_price, IF(tmp_pp.status, tmp_pp.specials_new_products_price, tmp_pp.products_price) as final_price "; } elseif ($status_tmp_special_prices_table == true) { $select_str = "select distinct " . $select_column_list . " m.manufacturers_id, b.beadshape_id, p.products_id, pd.products_name, p.products_price, p.products_tax_class_id, if(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, if(s.status, s.specials_new_products_price, p.products_price) as final_price "; } else { $select_str = "select distinct " . $select_column_list . " m.manufacturers_id, b.beadshape_id, p.products_id, pd.products_name, p.products_price, p.products_tax_class_id, NULL as specials_new_products_price, NULL as final_price "; } // next line original select query // $select_str = "select distinct " . $select_column_list . " m.manufacturers_id, p.products_id, pd.products_name, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price "; if ( (DISPLAY_PRICE_WITH_TAX == 'true') && (tep_not_null($pfrom) || tep_not_null($pto)) ) { $select_str .= ", SUM(tr.tax_rate) as tax_rate "; } if ($status_tmp_product_prices_table == true) { $from_str = "from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m using(manufacturers_id), " . TABLE_BEADSHAPE . " b using(beadshape_id), " . TABLE_PRODUCTS_DESCRIPTION . " pd left join " . $product_prices_table . " as tmp_pp using(products_id), " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c"; } elseif ($status_tmp_special_prices_table == true) { $from_str = "from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m using(manufacturers_id), " . TABLE_BEADSHAPE . " b using(beadshape_id), " .TABLE_PRODUCTS_DESCRIPTION . " pd left join " . TABLE_SPECIALS_RETAIL_PRICES . " s on p.products_id = s.products_id , " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c"; } else { // START: Extra Fields Contribution // $from_str = "from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m using(manufacturers_id), " . TABLE_PRODUCTS_DESCRIPTION . " pd left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c"; $from_str = "from (" . TABLE_PRODUCTS . " p left join " . TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS . " p2pef on p.products_id=p2pef.products_id) left join " . TABLE_MANUFACTURERS . " m on m.manufacturers_id=p.manufacturers_id, " . TABLE_BEADSHAPE . " b on b.beadshape_id=p.beadshape_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c"; // END: Extra Fields Contribution } // EOF Separate Pricing Per Customer if ( (DISPLAY_PRICE_WITH_TAX == 'true') && (tep_not_null($pfrom) || tep_not_null($pto)) ) { if (!tep_session_is_registered('customer_country_id')) { $customer_country_id = STORE_COUNTRY; $customer_zone_id = STORE_ZONE; } $from_str .= " left join " . TABLE_TAX_RATES . " tr on p.products_tax_class_id = tr.tax_class_id left join " . TABLE_ZONES_TO_GEO_ZONES . " gz on tr.tax_zone_id = gz.geo_zone_id and (gz.zone_country_id is null or gz.zone_country_id = '0' or gz.zone_country_id = '" . (int)$customer_country_id . "') and (gz.zone_id is null or gz.zone_id = '0' or gz.zone_id = '" . (int)$customer_zone_id . "')"; } // #################### Added Enable / Disable Categorie ################### // $where_str = " where p.products_status = '1' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id "; $where_str = " where p.products_status = '1' and c.categories_status = '1' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id "; // ################### End Added Enable / Disable Categorie ################### if (isset($HTTP_GET_VARS['categories_id']) && tep_not_null($HTTP_GET_VARS['categories_id'])) { if (isset($HTTP_GET_VARS['inc_subcat']) && ($HTTP_GET_VARS['inc_subcat'] == '1')) { $subcategories_array = array(); tep_get_subcategories($subcategories_array, $HTTP_GET_VARS['categories_id']); $where_str .= " and p2c.products_id = p.products_id and p2c.products_id = pd.products_id and (p2c.categories_id = '" . (int)$HTTP_GET_VARS['categories_id'] . "'"; for ($i=0, $n=sizeof($subcategories_array); $i<$n; $i++ ) { $where_str .= " or p2c.categories_id = '" . (int)$subcategories_array[$i] . "'"; } $where_str .= ")"; } else { $where_str .= " and p2c.products_id = p.products_id and p2c.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$HTTP_GET_VARS['categories_id'] . "'"; } } if (isset($HTTP_GET_VARS['manufacturers_id']) && tep_not_null($HTTP_GET_VARS['manufacturers_id'])) { $where_str .= " and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "'"; } if (isset($HTTP_GET_VARS['beadshape_id']) && tep_not_null($HTTP_GET_VARS['beadshape_id'])) { $where_str .= " and b.beadshape_id = '" . (int)$HTTP_GET_VARS['beadshape_id'] . "'"; } if (isset($search_keywords) && (sizeof($search_keywords) > 0)) { $where_str .= " and ("; for ($i=0, $n=sizeof($search_keywords); $i<$n; $i++ ) { switch ($search_keywords[$i]) { case '(': case ')': case 'and': case 'or': $where_str .= " " . $search_keywords[$i] . " "; break; default: $keyword = tep_db_prepare_input($search_keywords[$i]); // START: Extra Fields Contribution // $where_str .= "(pd.products_name like '%" . tep_db_input($keyword) . "%' or p.products_model like '%" . tep_db_input($keyword) . "%' or m.manufacturers_name like '%" . tep_db_input($keyword) . "%'"; $where_str .= "(pd.products_name like '%" . tep_db_input($keyword) . "%' or p.products_model like '%" . tep_db_input($keyword) . "%' or m.manufacturers_name like '%" . "%' or b.beadshape_name like '%" . tep_db_input($keyword) . "%' or p2pef.products_extra_fields_value like '%" . tep_db_input($keyword) . "%'"; // END: Extra Fields Contribution if (isset($HTTP_GET_VARS['search_in_description']) && ($HTTP_GET_VARS['search_in_description'] == '1')) $where_str .= " or pd.products_description like '%" . tep_db_input($keyword) . "%'"; $where_str .= ')'; break; } } $where_str .= " )"; } if (tep_not_null($dfrom)) { $where_str .= " and p.products_date_added >= '" . tep_date_raw($dfrom) . "'"; } if (tep_not_null($dto)) { $where_str .= " and p.products_date_added <= '" . tep_date_raw($dto) . "'"; } if (tep_not_null($pfrom)) { if ($currencies->is_set($currency)) { $rate = $currencies->get_value($currency); $pfrom = $pfrom / $rate; } } if (tep_not_null($pto)) { if (isset($rate)) { $pto = $pto / $rate; } } // BOF Separate Pricing Per Customer if ($status_tmp_product_prices_table == true) { if (DISPLAY_PRICE_WITH_TAX == 'true') { if ($pfrom > 0) $where_str .= " and (IF(tmp_pp.status, tmp_pp.specials_new_products_price, tmp_pp.products_price) * if(gz.geo_zone_id is null, 1, 1 + (tr.tax_rate / 100) ) >= " . (double)$pfrom . ")"; if ($pto > 0) $where_str .= " and (IF(tmp_pp.status, tmp_pp.specials_new_products_price, tmp_pp.products_price) * if(gz.geo_zone_id is null, 1, 1 + (tr.tax_rate / 100) ) <= " . (double)$pto . ")"; } else { if ($pfrom > 0) $where_str .= " and (IF(tmp_pp.status, tmp_pp.specials_new_products_price, tmp_pp.products_price) >= " . (double)$pfrom . ")"; if ($pto > 0) $where_str .= " and (IF(tmp_pp.status, tmp_pp.specials_new_products_price, tmp_pp.products_price) <= " . (double)$pto . ")"; } } else { // $status_tmp_product_prices_table is not true: uses p.products_price instead of cg_products_price // because in the where clause for the case $status_tmp_special_prices is true, the table // specials_retail_prices is abbreviated with "s" also we can use the same code for "true" and for "false" if (DISPLAY_PRICE_WITH_TAX == 'true') { if ($pfrom > 0) $where_str .= " and (IF(s.status AND s.customers_group_id = '" . $customer_group_id . "', s.specials_new_products_price, p.products_price) * if(gz.geo_zone_id is null, 1, 1 + (tr.tax_rate / 100) ) >= " . (double)$pfrom . ")"; if ($pto > 0) $where_str .= " and (IF(s.status AND s.customers_group_id = '" . $customer_group_id . "', s.specials_new_products_price, p.products_price) * if(gz.geo_zone_id is null, 1, 1 + (tr.tax_rate / 100) ) <= " . (double)$pto . ")"; } else { if ($pfrom > 0) $where_str .= " and (IF(s.status AND s.customers_group_id = '" . $customer_group_id . "', s.specials_new_products_price, p.products_price) >= " . (double)$pfrom . ")"; if ($pto > 0) $where_str .= " and (IF(s.status AND s.customers_group_id = '" . $customer_group_id . "', s.specials_new_products_price, p.products_price) <= " . (double)$pto . ")"; } } // EOF Separate Pricing Per Customer if ( (DISPLAY_PRICE_WITH_TAX == 'true') && (tep_not_null($pfrom) || tep_not_null($pto)) ) { $where_str .= " group by p.products_id, tr.tax_priority"; } if ( (!isset($HTTP_GET_VARS['sort'])) || (!ereg('[1-8][ad]', $HTTP_GET_VARS['sort'])) || (substr($HTTP_GET_VARS['sort'], 0, 1) > sizeof($column_list)) ) { for ($i=0, $n=sizeof($column_list); $i<$n; $i++) { if ($column_list[$i] == 'PRODUCT_LIST_NAME') { $HTTP_GET_VARS['sort'] = $i+1 . 'a'; $order_str = ' order by pd.products_name'; break; } } } else { $sort_col = substr($HTTP_GET_VARS['sort'], 0 , 1); $sort_order = substr($HTTP_GET_VARS['sort'], 1); $order_str = ' order by '; switch ($column_list[$sort_col-1]) { case 'PRODUCT_LIST_MODEL': $order_str .= "p.products_model " . ($sort_order == 'd' ? "desc" : "") . ", pd.products_name"; break; case 'PRODUCT_LIST_NAME': $order_str .= "pd.products_name " . ($sort_order == 'd' ? "desc" : ""); break; case 'PRODUCT_LIST_MANUFACTURER': $order_str .= "m.manufacturers_name " . ($sort_order == 'd' ? "desc" : "") . ", pd.products_name"; break; case 'PRODUCT_LIST_BEADSHAPE': $order_str .= "b.beadshape_name " . ($sort_order == 'd' ? "desc" : "") . ", pd.beadshape_name"; break; case 'PRODUCT_LIST_QUANTITY': $order_str .= "p.products_quantity " . ($sort_order == 'd' ? "desc" : "") . ", pd.products_name"; break; case 'PRODUCT_LIST_IMAGE': $order_str .= "pd.products_name"; break; case 'PRODUCT_LIST_WEIGHT': $order_str .= "p.products_weight " . ($sort_order == 'd' ? "desc" : "") . ", pd.products_name"; break; case 'PRODUCT_LIST_PRICE': $order_str .= "final_price " . ($sort_order == 'd' ? "desc" : "") . ", pd.products_name"; break; } } $listing_sql = $select_str . $from_str . $where_str . $order_str; require(DIR_WS_MODULES . FILENAME_PRODUCT_LISTING); ?> </td> </tr> <tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td> </tr> <tr> <td class="main"><?php echo '<a href="' . tep_href_link(FILENAME_ADVANCED_SEARCH, tep_get_all_get_params(array('sort', 'page')), 'NONSSL', true, false) . '">' . tep_image_button('button_back.gif', IMAGE_BUTTON_BACK) . '</a>'; ?></td> </tr> </table></td> <!-- body_text_eof //--> <!-- <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2"> --> <!-- right_navigation //--> <?php //require(DIR_WS_INCLUDES . 'column_right.php'); ?> <!-- right_navigation_eof //--> <!-- </table></td> --> </tr> </table> <!-- body_eof //--> <!-- footer //--> <?php require(DIR_WS_INCLUDES . 'footer.php'); ?> <!-- footer_eof //--> <br> </body> </html> <?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>
  17. bobsi18

    New Attribute Manager Released..

    Hmm... Still having one small problem - When I use the New Attribute Manager to add an attribute with a 'zero' price prefix, it works fine. However, if I go back into that product to change the attributes, the price prefix changes to '-'. If I don't catch it and change it back to ' ', it adds a negative price prefix. Anyone else had this prob and how to fix it? Thanks ~Barbara~
  18. bobsi18

    New Attribute Manager Released..

    Well, I got it working with the ADPA contrib - but my code's probably pretty uk - however, if anyone wants a look, let me know and i'll post it. ~Barbara~
  19. Success!!! I have it working with the 'add weight to product options' contribution - for now anyway!!! I'm just a novice, so the code's probably pretty uk, but if anyone's interested, let me know and I'll post the code I added. ~Barbara~
  20. bobsi18

    Execute Sql command

    Fantastic - always exciting when it works!!! As to the backup - it really depends on our admin as to how you would restore a backup if you needed to. There's probably a 'restore backup' option around where you backup somewhere. If you can't find it, the oscommerce has the same function under 'tools', 'backup'.. :) :) :) ~Barbara~
  21. bobsi18

    Execute Sql command

    Yep, you had it right - you do not need to go into the 'files' on the left hand side - these are the different tables that make up the database. Ultimately, the SQL is going into one (or more) of these tables and modifying it slightly (eg, with the code you quoted, insert into configuration (configuration_id, configu... it is going into the 'configuration' table and inserting some stuff). I *think* it is possible to go and do this all yourself, manually, but is a lot harder (and takes a lot more time). So, no, you don't need to click on one of the 'files' on the left hand side, just go to the top and click on the 'sql' tab. As for the SQL statement - it looks like what you have is a couple of comands all together - but that's fine, just cut and paste and put them all in the SQL query box (of locate the SQL file) and hit go - it will figure out what needs to be done. 9 times out of 10 the code will work fine and you'll get a screen saying that the SQL query was executed successfully. If you do get an error, it is probably because of an error in the SQL query, or it had trouble locating something in one of your tables - post back to the specific contribution forum for help. Incidently, this is why people always say BACKUP BACKUP BACKUP, particularily before you run a SQL query. If you backup (just using the 'backup' feature in your tools section of oscommerce), and something goes wrong, you can just run your backed-up file, and everything will be ok... Hope this helps you out! ~Barbara~
  22. bobsi18

    Execute Sql command

    When I first started out in oscommerce, this was one of my biggest probs - no-one acutally told you how to do the SQL statement!!! It is done through an admin tool provided by your host. In my case, I went to my admin area of my hosting information (not of oscommerce), and found a section labelled 'MySQL'. Clicking on this leads to an admin tool called 'phpMyAdmin'. Everyone is different, but you should have access to something like this. In phpMyAdmin, there is a heading 'MySQL', click on the subheading 'Databases'. This leads to a list of all the databases you have running - I only have one, labelled 'mydomain_com_-_oscommerce'. Yours is probably labelled something similar, it was set up way back when you first ran the set up to setup oscommerce. Clicking on the database name leads to a list of all the tables in the database. To run an SQL, there is a tab at the top labelled 'SQL', click on this. You should be presented with a screen with a big area for entering text, and an option to 'locate the text file'. How you run the SQL file depends on how it was presented to you. Some of the contributions have files labelled 'contribtionSQL' or the like, others just give you the command. If there is a file to run, upload it as you would an image (choose 'browse', etc etc). If you have just the command (like the one you have, ALTER TABLE `products` ADD `customer_id` INT( 11 ) NOT NULL AFTER `manufacturers_id` ;, simply cut and paste the command into the large text box and hit 'go'. Afterwards, you should see some text (hopefully) saying that the SQL has been run successfully. Hope this helps you out - as I said at the beginning, this is all based on my particular scenerio, it's likely to be slightly different for you, but the fundamentals are the same. If you don't know how to access your hosting admin, contact your host or search around their website. ~Barbara~
  23. Hi there, I'm getting ready to put images into my catalog (YEY!!!) and am looking aroud at the contributions available to make thumbnail images. The most popular seem to be 'Image Magic' and 'On the fly Auto Thumbnailer'... I'm looking for recommendations about which one is 'better': Ultimately I'm after something that is a) easy to use for the end user (I'm gunna have people who know zilch about computers using the end product) b ) shrinks the image quite dramatically - I have all my images in original format, I haven't optimised them at all. In my end design, I want thumbnails being shown on all the pages, except the product_info.php page, where I've gotten rid of the popup image and have just replaced it with a larger image (I dpn't have much text on those pages, and didn't want my customers to have to click once more...) So, what I'm after is any recomendations on what image contribution is easy to use and shrinks the images file sizes considerably... Thanks in advance :) ~Barbara~
×