Latest News: (loading..)

cmakynen

Members
  • Content count

    54
  • Joined

  • Last visited

About cmakynen

Profile Information

  • Real Name
    Chris
  1. Hi Frank, I've installed the contribution and it was super easy to do. However, I am getting the "Image not found" image on all my jpg files - interestingly, it seems to know the general dimensions of the image that it's not finding, because they are all appear with slightly (and correctly) different displayed sizes of the "Image not found" - have you any thoughts on what might cause this? Test site is here http://www.classicbikebooks.com/catalogus Thanks Chris S.
  2. Same issue here. The fix worked (thanks jt22!), but it appears taht when we call the function that interfaces with USPS itself, it returns all the options for International shipping and doesn't restrict them based on whats in that intl_types array. Don't know how to fix it, but will have a good look at it.
  3. This is a little late response, but I had a similar problem too with this contrib. It wasn't a problem before, started recently and must have been broken by a contribution I installed somewhere along the way. Anyway, to solve a similar error, I pasted the following function into the admin/includes/functions/html_output.php, as it had gone missing (found the code in the readme of the contribution free shipping by categories v 1.3) function tep_draw_pull_multiselect_menu($name, $values, $defaults, $parameters = '') { $field = '<select multiple name="' . tep_output_string($name) . '"'; if (tep_not_null($parameters)) $field .= ' ' . $parameters; $field .= '>' . "\n"; if (empty($default) && isset($GLOBALS[$name])) $default = stripslashes($GLOBALS[$name]); for ($i = 0, $n = sizeof($values); $i < $n; $i++) { $field .= '<option value="' . tep_output_string($values[$i]['id']) . '"'; if (in_array($values[$i]['id'], $defaults)) { $field .= ' SELECTED'; } $field .= '>' . tep_output_string($values[$i]['text'], array('"' => '"', '\'' => ''', '<' => '<', '>' => '>')) . '</option>'; } $field .= '</select>'; return $field; } Works now. You might be able to solve your problem by checking the functions that need to be added, listed in the readme of the most recent contrib.
  4. Well, its the stock un-edited code from the dynamic sitemap 32 contribution. Pardon me while I think/type out loud. <?php /* $Id: create_xml_sitemaps.php,v1.2 2007/10/05 Kevin L. Shelton 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 */ require('includes/application_top.php'); ?> <!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; ?>"> <title><?php echo TITLE; ?></title> <link rel="stylesheet" type="text/css" href=includes/stylesheet.css> <?php $sitemap_url = urlencode(HTTP_CATALOG_SERVER.DIR_WS_CATALOG.'sitemaps.xml'); $ping = "http://www.google.com/webmasters/sitemaps/ping?sitemap=" . $sitemap_url; echo "<script type=\"text/javascript\">\n"; echo "<!--\n"; echo "function opennotifywindows(){\n"; echo " window.open(\"$ping\",\"Google Notify\",\"toolbar=no,location=yes,directories=no,status=yes,scrollbars=yes,resizable= yes,copyhistory=no,width=400,height=200\");\n"; $ping = "http://submissions.ask.com/ping?sitemap=" . $sitemap_url; echo " window.open(\"$ping\",\"Ask.com Notify\",\"toolbar=no,location=yes,directories=no,status=yes,scrollbars=yes,resizable= yes,copyhistory=no,width=400,height=200\");\n"; $ping = "http://search.yahooapis.com/SiteExplorerService/V1/ping?sitemap=" . $sitemap_url; echo " window.open(\"$ping\",\"Yahoo Notify\",\"toolbar=no,location=yes,directories=no,status=yes,scrollbars=yes,resizable= yes,copyhistory=no,width=400,height=200\");\n"; echo "}\n"; echo "//-->\n"; echo "</script>\n\n"; ?> </head> <body onclick="opennotifywindows()" 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="2" cellpadding="2"> <tr> <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft"> <!-- 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="2"> <tr> <td width="100%"><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td class="pageHeading"><?php echo HEADING_TITLE; ?></td> <td class="pageHeading" align="right"><?php echo tep_draw_separator('pixel_trans.gif', HEADING_IMAGE_WIDTH, HEADING_IMAGE_HEIGHT); ?></td> </tr> </table></td> </tr> <tr><td class="main"> <?php require DIR_WS_FUNCTIONS . 'dynamic_sitemap.php'; // function to escape code xml data as required by Google function smspecialchars($input) { return str_replace("'", ''', htmlspecialchars($input));} // set values sent from site map maintenance $wording = array('always','hourly','daily','weekly','monthly','yearly','never'); $cmcf = (isset($_POST['cmcf']) && in_array($_POST['cmcf'], $wording) ? $_POST['cmcf'] : 'weekly'); $scf = (isset($_POST['scf']) && in_array($_POST['scf'], $wording) ? $_POST['scf'] : 'monthly'); $zones = array("au_cdt" => '+09:30', "au_cst" => '+09:30', "au_cxt" => '+07:00', "au_edt" => '+10:00', "au_est" => '+10:00', "au_nft" => '+11:30', "au_wdt" => '+08:00', "au_wst" => '+08:00', "na_adt" => '-03:00', "na_akdt" => '-08:00', "na_akst" => '-09:00', "na_ast" => '-04:00', "na_cdt" => '-05:00', "na_cst" => '-06:00', "na_edt" => '-04:00', "na_est" => '-05:00', "na_hadt" => '-09:00', "na_hast" => '-10:00', "na_mdt" => '-06:00', "na_mst" => '-07:00', "na_ndt" => '-02:30', "na_nst" => '-03:30', "na_pdt" => '-07:00', "na_pst" => '-08:00', "eu_bst" => '+01:00', "eu_cest" => '+02:00', "eu_cet" => '+01:00', "eu_eest" => '+03:00', "eu_eet" => '+02:00', "eu_gmt" => '+00:00', "eu_ist" => '+01:00', "eu_west" => '+01:00', "eu_wet" => '+00:00'); $tzone =(isset($_POST['tz']) && isset($zones[$_POST['tz']]) ? $zones[$_POST['tz']] : '-08:00'); //create sitemap index $now = date("Y-m-d\TH:i:s") . $tzone; echo TEXT_CREATE_INDEX . $now . '<br>'; $smi = '<?xml version="1.0" encoding="UTF-8"?>' ."\n". '<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'."\n". "<sitemap><loc>" . smspecialchars(HTTP_CATALOG_SERVER.DIR_WS_CATALOG.'smmain.xml') . "</loc><lastmod>".$now."</lastmod></sitemap>\n". "<sitemap><loc>" . smspecialchars(HTTP_CATALOG_SERVER.DIR_WS_CATALOG.'smcats.xml') . "</loc><lastmod>".$now."</lastmod></sitemap>\n". '<sitemap><loc>' . smspecialchars(HTTP_CATALOG_SERVER.DIR_WS_CATALOG.'smproducts.xml') . "</loc><lastmod>".$now."</lastmod></sitemap>\n". '<sitemap><loc>' . smspecialchars(HTTP_CATALOG_SERVER.DIR_WS_CATALOG.'smmfg.xml') . "</loc><lastmod>".$now."</lastmod></sitemap>\n". '<sitemap><loc>' . smspecialchars(HTTP_CATALOG_SERVER.DIR_WS_CATALOG.'smspecials.xml') . "</loc><lastmod>".$now."</lastmod></sitemap>\n". '</sitemapindex>'; $sm = DIR_FS_CATALOG . 'sitemaps.xml'; $fh = fopen($sm, 'w') or die(ERROR_INDEX_FILE); fwrite($fh, utf8_encode($smi)); fclose($fh); //get all files in catalog that aren't set as excluded echo TEXT_FINDING_FILES; $excluded_query = tep_db_query('select exclude_file from '.TABLE_SITEMAP_EXCLUDE.' where exclude_type != "0" and is_box="0"'); $excluded_array = array(); $files = array(); $cnt = 0; if (tep_db_num_rows($excluded_query)) while($ex = tep_db_fetch_array($excluded_query)) $excluded_array[] = $ex['exclude_file']; if ($handle = opendir(DIR_FS_CATALOG)){ while ($file = readdir($handle)){ if(!is_dir($file) && (strtolower(substr($file, -4, 4)) === ".php")) //only look at php files { if (!in_array($file ,$excluded_array)){ $engFile = DIR_FS_CATALOG.DIR_WS_LANGUAGES . $language . '/' . $file; if (file_exists($engFile) && IsViewable(DIR_FS_CATALOG.$file)) {$files[] = array('path' => $file, 'modified' => date("Y-m-d\TH:i:s", filemtime(DIR_FS_CATALOG.$file)) . $tzone); $cnt++; } } } } closedir($handle); } else echo ERROR_CANNOT_OPEN_CATALOG_DIR . DIR_FS_CATALOG.'<br>'; // create main sitemap $xml_head = '<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n"; $xml_foot = "</urlset>"; echo TEXT_CREATE_MAIN; $sm = DIR_FS_CATALOG . 'smmain.xml'; $fh = fopen($sm, 'w') or die(ERROR_MAIN_FILE); fwrite($fh, utf8_encode($xml_head)); for ($b = 0; $b < $cnt; ++$B) { echo HTTP_CATALOG_SERVER.DIR_WS_CATALOG.$files[$b]['path'] . ' --> ' . $files[$b]['modified'] . '<br>'; fwrite($fh, utf8_encode('<url><loc>' . smspecialchars(HTTP_CATALOG_SERVER.DIR_WS_CATALOG.$files[$b]['path']) . '</loc><lastmod>' . $files[$b]['modified'] . '</lastmod></url>'."\n")); } fwrite($fh, utf8_encode($xml_foot)); fclose($fh); echo $cnt.TEXT_TOTAL_FILES; //create products listing sitemap echo TEXT_CREATE_PRODUCTS; $sm = DIR_FS_CATALOG . 'smproducts.xml'; $fh = fopen($sm, 'w') or die(ERROR_PRODUCTS_FILE); fwrite($fh, utf8_encode($xml_head)); $cnt = 0; $base_url = HTTP_CATALOG_SERVER.DIR_WS_CATALOG."product_info.php?products_id="; // url to your product pages (must end with the products_id=) $urls_query = tep_db_query("select products_id, products_last_modified, products_date_added from " . TABLE_PRODUCTS . " where products_status = 1 order by products_id"); //all in stock items while($urls = tep_db_fetch_array($urls_query)) { $this_url = smspecialchars($base_url . $urls['products_id']); if($urls['products_last_modified'] > 0) { $date_mod = $urls['products_last_modified']; } else { $date_mod = $urls['products_date_added']; } $lastmod = "<lastmod>" . str_replace(' ', 'T', $date_mod) . $tzone . "</lastmod>"; $output = "<url><loc>" . $this_url . "</loc>" . $lastmod . "</url>\n"; echo $this_url . ' --> ' . $date_mod .'<br>'; fwrite($fh, utf8_encode($output)); $cnt++; } fwrite($fh, utf8_encode($xml_foot)); fclose($fh); echo $cnt.TEXT_TOTAL_PRODUCTS; //create categories listing sitemap echo TEXT_CREATE_CATEGORIES; $sm = DIR_FS_CATALOG . 'smcats.xml'; $fh = fopen($sm, 'w') or die(ERROR_CATEGORIES_FILE); fwrite($fh, utf8_encode($xml_head)); function get_paths($categories_array = '', $parent_id = '0', $path ='') { global $languages_id; if (!is_array($categories_array)) $categories_array = array(); $categories_query = tep_db_query("select categories_id from " . TABLE_CATEGORIES . " where parent_id = '" . (int)$parent_id . "' order by parent_id"); while ($categories = tep_db_fetch_array($categories_query)) { if ($parent_id=='0'){ $categories_array[] = array('pathid' => $categories['categories_id'], 'catid' => $categories['categories_id']); } else{ $categories_array[] = array('pathid' => $path . $parent_id . '_' .$categories['categories_id'], 'catid' => $categories['categories_id']); } if ($categories['categories_id'] != $parent_id) { $this_path=$path; if ($parent_id != '0') $this_path = $path . $parent_id . '_'; $categories_array = get_paths($categories_array, $categories['categories_id'], $this_path); } } return $categories_array; } $categories = get_paths(); $base_url = HTTP_CATALOG_SERVER.DIR_WS_CATALOG."index.php?cPath="; // url to your category pages (must end with the cPath=) $cnt = 0; $totalpages = 0; while ($cnt < count($categories)) {$prod_query = tep_db_query("select count(ptc.products_id) as numprods from " . TABLE_PRODUCTS . " p join " . TABLE_PRODUCTS_TO_CATEGORIES . " ptc where products_status = 1 and p.products_id = ptc.products_id and categories_id = " . (int)$categories[$cnt]['catid']); $num = tep_db_fetch_array($prod_query); $numpages = ((int)$num['numprods'] = 0 ? 1 : ceil((int)$num['numprods'] / MAX_DISPLAY_SEARCH_RESULTS)); $totalpages += $numpages; for ($page = 1; $page <= $numpages; $page++) // create a url for every page of each category {$url = $base_url . $categories[$cnt]['pathid'] . '&page=' . $page; echo $categories[$cnt]['catid'] .' --> '. $url .'<br>'; fwrite($fh, utf8_encode('<url><loc>' . smspecialchars($url) . "</loc><changefreq>".$cmcf."</changefreq></url>\n")); } $cnt++; } fwrite($fh, utf8_encode($xml_foot)); fclose($fh); echo $cnt.TEXT_TOTAL_CATEGORIES . $totalpages .TEXT_TOTAL_PAGES; //create manufacturers listing sitemap echo TEXT_CREATE_MANUFACTURERS; $sm = DIR_FS_CATALOG . 'smmfg.xml'; $fh = fopen($sm, 'w') or die(ERROR_MANUFACTURERS_FILE); fwrite($fh, utf8_encode($xml_head)); $base_url = HTTP_CATALOG_SERVER.DIR_WS_CATALOG."index.php?manufacturers_id="; // url to your manufacturer pages (must end with the manufacturers_id=) $cnt = 0; $totalpages = 0; $mfg_query = tep_db_query('select manufacturers_id, manufacturers_name from ' . TABLE_MANUFACTURERS); while ($mfg = tep_db_fetch_array($mfg_query)) {$prod_query = tep_db_query("select count(products_id) as numprods from " . TABLE_PRODUCTS . " where products_status = 1 and manufacturers_id = " . (int)$mfg['manufacturers_id']); $num = tep_db_fetch_array($prod_query); $numpages = ((int)$num['numprods'] = 0 ? 1 : ceil((int)$num['numprods'] / MAX_DISPLAY_SEARCH_RESULTS)); $totalpages += $numpages; for ($page = 1; $page <= $numpages; $page++) // create a url for every page of each manufacturer {$url = $base_url . $mfg['manufacturers_id'] . '&page=' . $page; echo $mfg['manufacturers_name'] .' --> '. $url .'<br>'; fwrite($fh, utf8_encode('<url><loc>' . smspecialchars($url) . "</loc><changefreq>".$cmcf."</changefreq></url>\n")); } $cnt++; } fwrite($fh, utf8_encode($xml_foot)); fclose($fh); echo $cnt.TEXT_TOTAL_MANUFACTURERS . $totalpages .TEXT_TOTAL_PAGES; //create specials listing sitemap echo TEXT_CREATE_SPECIALS; $sm = DIR_FS_CATALOG . 'smspecials.xml'; $fh = fopen($sm, 'w') or die(ERROR_SPECIALS_FILE); fwrite($fh, utf8_encode($xml_head)); $base_url = HTTP_CATALOG_SERVER.DIR_WS_CATALOG."specials.php?page="; // url to your specials pages (must end with the page=) $cnt = 0; $special_query = tep_db_query('select count(specials_id) as numspecials from ' . TABLE_SPECIALS . ' s join ' . TABLE_PRODUCTS . ' p where p.products_status = 1 and s.products_id = p.products_id and s.status = 1'); $num = tep_db_fetch_array($special_query); $numpages = ((int)$num['numspecials'] = 0 ? 1 : ceil((int)$num['numspecials'] / MAX_DISPLAY_SEARCH_RESULTS)); for ($page = 1; $page <= $numpages; $page++) // create a url for every page of each manufacturer {$url = $base_url . $page; echo $page .' --> '. $url .'<br>'; fwrite($fh, utf8_encode('<url><loc>' . smspecialchars($url) . "</loc><changefreq>".$scf."</changefreq></url>\n")); } fwrite($fh, utf8_encode($xml_foot)); fclose($fh); echo $numpages . TEXT_COMPLETED; echo '<p><a href="'.tep_href_link(FILENAME_SITEMAP,'selected_box=tools').'">'.TEXT_TO_MAINTENANCE.'</a><p> '; ?> </td></tr> </table></td> <!-- body_text_eof //--> </tr> </table> <!-- body_eof //--> <!-- footer_eof //--> </body> </html> <?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?> And within that, I guess the relevant code is in the "onclick" action (or whatever the word is), which calls the opennotifywindows() function, which I see in some echo statements above and which renders as follows if I do a "view source" on the page: <script type="text/javascript"> <!-- function opennotifywindows(){ window.open("http://www.google.com/webmasters/sitemaps/ping?sitemap=http%3A%2F%2Fwww.classicbikebooks.com%2Fcatalog%2Fsitemaps.xml","Google Notify","toolbar=no,location=yes,directories=no,status=yes,scrollbars=yes,resizable= yes,copyhistory=no,width=400,height=200"); window.open("http://submissions.ask.com/ping?sitemap=http%3A%2F%2Fwww.classicbikebooks.com%2Fcatalog%2Fsitemaps.xml","Ask.com Notify","toolbar=no,location=yes,directories=no,status=yes,scrollbars=yes,resizable= yes,copyhistory=no,width=400,height=200"); window.open("http://search.yahooapis.com/SiteExplorerService/V1/ping?sitemap=http%3A%2F%2Fwww.classicbikebooks.com%2Fcatalog%2Fsitemaps.xml","Yahoo Notify","toolbar=no,location=yes,directories=no,status=yes,scrollbars=yes,resizable= yes,copyhistory=no,width=400,height=200"); } //--> </script> Within that function, the urls its referencing look valid, and if I paste them into a new browser window address, they resolve and complete normally (Submission was successful message in all cases). So I have a workaround - that's good. I tried clicking from another PC, different network, same browser version (ie6.0.29) and it has the same error. So, I installed Firefox browser - and whaddaya know, it works PERFECTLY. So, thanks for nudging me along Coopco! :thumbsup: My problem appears to be my browser. I don't know the fix, but I do have 2 workarounds (Mozilla, and manual cut/paste) for now. If anyone has a clue about the IE (I don't have popup blockers enabled, so its not that...) let me know - others might have the same issue. Thaks Chris
  5. Hi there, Solution is probably somewhere on the forum but after quite a lot of searching I haven't found it. I installed Dynamic Sitemap 32 - easy install, the app seems to run fine in Admin, displays the "Creating XML Site Maps" page with the url mysite/catalog/admin/create_xml_sitemaps.php?selected_box=tools on top. At that point, I believe the instructions are that I can click anywhere on that page to actually submit the info to Google etc - supposed to be popup window(s) to do this. I get what I guess is a javascript error in my IE6.0.29 browser (in a popup window) - I guess its js because I've seen enough PHP errors lately to pretty much know what that looks like ;-) Line: 10 CHar: 2 Error: Invalid Argument Code: 0 URL: mysite/catalog/admin/create_xml_sitemaps.php?selected_box=tools Can anyone point me in right direction? Thanks!
  6. Thanks !!! Adding the || ($_POST['action'] == 'update') was exactly the trick. You rock :)
  7. "Somebody" Robert - yes, thank you very much. sometimes it gets pretty confusing trying to figure out which of the numerous little and big bug fixes to apply to any given contribution! You cleared that up for me with yours!!! THanks Robert!!
  8. Thanks for taking the time to look at this insaini. Unfortunately - I still have a problem - although slightly improved, because it doesn't show "alabama" every time in edit mode! I applied the entire 1.5.3 version, overwriting everything except languages\english.php which I just left as it was already. In it I have the default state set with define ('DEFAULT_COUNTRY', '223'); Exact symptoms: I'm logged in as an existing customer. I am editing an address in my address book - either the default address or any other existing record in my address book. - via address_book_process.php (url is appended with?edit=number) Everything looks good, I make my changes and click "update" Screen refreshes to same address_book_process.php (url is appended with?edit=number) but with changes in all fields except state. Cannot exit the screen via the update button, but no errors are displayed Only way out is "back" button or click some other unrelated link No changes are saved to any part of the address. If you would like to see it in action in my not yet active store, http://www.classicbikebooks.com/ Test user: nobody@midwestmx.com password: letmein Thanks!
  9. No doubt a really simple thing, but I can't see it and would appreciate your help. This evening I noticed my installation of the AJAX country/state selector 1.5.1 was not calling up the saved state when Updating an address. Always showing default Alabama - but all the correct zip, address and country and name info. Will not update the state field, and in fact won't let me off the update page because "a required field " is blank. I'm guessing that would be the state field... To make it even more confusing for me, I have copied the actual files, all of them, from the contribution into place - I had manually changed them a few nights ago, but didn't think I needed to go through that all again. So just copied them all up. New address works fine, jsut update does not. So the source I'm using is exactly what is in the 1.5.1 contribution from April 12. Is there a bug fix I just haven't noticed posted? Thanks Chris
  10. Note to Chemo since he doesn't take private messages: Chemo - just a quick note to thank you (and raise a beer to you!) for the excellent contrib Ultimate SEO URLs. I just downloaded v21d_updated which someone else had recently uploaded to make things less cumbersome and truer to your original contrib. Haven't had many contribs that easy to install; and certainly haven't had many providing this type of value. After being delighted by the easy install and instant success, I was almost overcome with joy (almost ;-) ) when I did a ?profile=on Quickly found why my pages were so doggy because the analysis pointed to me to a couple of items I could tie back to two other specific contributions which I shall now tweak! Thanks again Chris S.
  11. That looks similar to what I have, which works fine. Except I have put my email address in for the debug e-mail address too. You can test it out fairly harmlessly by making yourself a one cent (or one penny, whatever) item and buying it yourself. The Instant Payment Notification thing doesn't jump out of the page, for sure. Here's how I get to it: Log into Paypal Click Profile link along top of form Under the Selling Preferences column, I think what you really need is under Website payment preferences, where I have "autoreturn" set to ON, and the Return URL of my checkout_success.php page.
  12. I just went through this exact scenario doing a new install - and my problem was the path I had input in the admin: sitemonitor->configure screen for the "start directory" parameter was wrong. Make sure that's right, and your script should then be able to find the file that sitemonitor_configure.php is looking for.
  13. On the off change that you copy/pasted this verbatim from your system, you spelled the word "update" wrong...
  14. Probably a misunderstanding or mis-read on my part, but I installed Actual Attribute Price 1.41 and all I get on all products now (whether they have a price attribute or not) is $0 in the shopping cart and at checkout. The shopping cart infoBox shows the correct total price, and so does catalog/shopping_cart, but shopping_cart shows $0 for every line item. When it gets to the checkout process, it even loses that and ends up selling everything for a total of $0 (good thing I'm in test mode!) I wondered if some of the edits the instruction says to make for \includes\classes\shopping_cart.php were really supposed tobe applied to \catalog\shopping_cart.php, but they really don't make sense in there. Any hints as to where I may have gone wrong? Example of product that's misbehaving: magazine, $8, no attributes - hits shopping cart line at $0 Another Example that's misbehaving: magazine subscription, $60, three attributes: Full year sub at +0 (making it equal same as normal product price) 1/2 year sub at blank $35, one copy at blank $10. - hits shopping cart line at $0 Code has been input, tested, blown away by restoring my backup, 3 times, same result. I don't think I'm copy/pasting wrong, but its the only thing I can think of! Thanks