Jump to content


  • Content count

  • Joined

  • Last visited

  1. AXM

    Year/Make/Model - Finally!

    Zencart is just OSCommerce with some contributions pre-built into it. I haven't checked it out in a while but its not as good as a base OSC and you having your programmer add in the contributions himself.
  2. AXM

    Year/Make/Model - Finally!

    MajorMods, you don't have to worry about inventory when you are copying a product across many categories. OSC just creates multiple category links to a single product. You aren't duplicating products, you are just having OSC making it able to be found in multiple categories. If you do a copy, look at the productID number. Its still the same no matter which category you found it in. But yeah you are right in it being a pain. If you add a new vehicle, you have to copy all the more universal products into the new vehicle's category. Like you mentioned with shift knobs, light bulbs, etc. You might want to create a top level category for those universal items. Also your catalog I think its broken. How come I couldn't find any parts for my 1972 Acura 200SX SE-R? There has to be something for it :P I know I'm just teasing about your pulldowns not being "smarter". I've managed to teach mine pretty good and doing the method above will do a good job too. And yes, I am doing it different than you guys. The complexity of car parts is astonishing and I wasn't content with the way most people are doing it. Had to create my own custom solution. Way too busy to get the cart up though...so its currently collecting dust :(
  3. AXM

    Year/Make/Model - Finally!

    Good idea guys. I haven't tested the code personally, but upon initial review that's A LOT of database queries to create the chained select. A hundred or so extra queries at every page load is gonna wreck havoc on your page parse times and server load. 1) You should save the Javascript code with the queries into a seperate php file like chainedselectdata.php 2) Create a script called something like cachechainedselecctdata.php that runs the same script as chainedselectdata.php and saves the results (and overwrites if needed) into a file in the catalog directory called chainedselectdata.js 3) Create something like a "Refresh Chained Select Data" button somewhere on the Administrative Panel that refreshes the cache. You'll have to click this whenever you edit/update categories and products. Alternatively you can have a cronjob run every 5 minutes refreshing it. 4) Where you had the Javascript code with the queries put in something like this: if file_exists(chainedselectdata.js) { include(chainedselectdata.js) } else { include(chainedselectdata.php) } To answer some of MajorMods questions: 1) You should compile the make/model/year data based on the products you add to the catalog. If you create the categories for a product you are going to be add then you make sure that your pulldowns actually have parts. We all know how much of a pain in the butt it is to use a pulldown that when you drill down to what you need it always ends up empty. 2) You guys are doing it different than me...so don't know.
  4. Yes I know I put my foot in my mouth on that post. I was too late to edit the post so I made another post where I tried to apologize.
  5. Sorry Bobby, I jumped to conclusions. You Ultimate SEO URL definately works. It did perfectly what it needed to do: boost a site's ranking on whatever is in the title. But I just overly expressed in that the impression I got was the example key phrase was a competitive keywords and difficult to get in that placing you received. Sorry.
  6. Bobby, Not trying to get under your skin with this response. I told you directly that I do respect you, your contributions and your coding style. But not so sure with your being an SEO expert. But you can't honestly go around and say you have satisfying proof of the concept. You have a PR ranking of 0/10 on your website and besides the great search engine optimized URL, you mention your key phrase only in the title and 2 for oscommerce custom coding. There is a lot of results for that combination of words on a page. Okay and there are 94,000 sites that have the words "oscommerce", "custom" and "code" in the content in no particular order. And I notice that there is 3 message board ahead of you in the post (including the oscommerce support forum). If you look at each of the pages that rank higher than you, you will notice the following: Link #1: Does not have your phrase mentioned in either of the two forms I stated above. It does have 3 instances of the phrase "oscommerce custom"...2 out of 3 means something to google. Their URL is not SEO'd and they have a page rank of 0/10 too. Link #2: Is this forum. osCommerce's great forum filled with plenty of the keywords in your key phrase you are after and a page rank of 5/10. Congrats to osCommerce for maintaining a great page rank on a forum...very hard to do. Link #3: Similar to #1. Does not have your phrase mentioned in either of the two forms I stated above. Has 2 instances of "oscommerce custom". URL is not SEO'd and a page rank of 3/10. If you have google to search for the complete entire phrase "oscommerce custom code"...Query Result... guess what you are the only one who shows up. So that means you are the only person on the net (according to Google) that has a page optimized or directly targeting that phrase. So being #1 out #1 in a phrase which NO ONE else is going after is VERY EASY. So since you are actually targeting the phrase and the only one on google's index with the entire phrase in tact...OF COURSE you're gonna get a high ranking for that phrase. Anyone else can throw up a single page with a SEO'd URL and a couple paragraphs with that key phrase in it...and you'll be neck and neck on the page results. If they had better than a 0/10 PR you'll be the loser. Now that I think about it...next time Google comes around here... I think this page, now that the phrase has been mentioned 5 or so times will be your BIGGEST competitor :( . Sorry man. You can brag all you want about how good your coding...i'll never and i'm sure just about everyone else on this board will NEVER debate that you are a great coder. In my opinion I wouldn't want to brag unless I had something real proof.
  7. Isn't there some kind of contribution like a COD charge? That's what you need. I'm sure there is...but sorry don't have the time to search the contributions for one.
  8. Nate, Great update to your wonderful OTF mod I already installed a couple months ago. I haven't installed this one yet, but i'm sure it'll work fine. Yeah it would be nice for it to save the image in a cache directory with a filename such as "imagename_small.jpg" or something like that. Here's my thoughts on that: I was actually going to attempt to modify your contribution to search the manufacturer directory (I have a folder for each manufacturer, an image subfolder, and soon to be a thumbnail subfolder) for the desired image in the thumbnail subfolder. If it does exist then it'll load that image unmodifed as it is already resized manually (Photoshop resizes a little cleaner and small filesized than the GD Library). If the thumbnail image does not exist then it'll check the image cache folder for the thumbnail. If no image cache thumbnail is found, one will be created. I don't think everyone is going to want to manually create multiple sized thumbnails, but i'm obsessive compulsive so I don't mind :rolleyes: . But it still gives the flexibility whether I do it for everything or just some products. My only concern is whether check to see if a file exist takes extra unnecessary resources. I'm sure the one check to see if the cached image exists is going to be A LOT faster than command GD to create a new one everytime. Well i'm going to attempt this pretty soon as my estimated download times are in the upper mid range compared to my competitors :( . Once again...another great contribution Nate. Thanks.
  9. AXM

    [contribution] Total B2B

    Hozone, I'm still using your Customer Group contrib and its working out perfectly with those fixes we hammered out a month or two ago. About this one, did you notice any significant parse time increases upon installation? When I added CG I didn't notice any delays at all, but when I installed this one somehow on a new install it was showing a 3X increase in parse times...maybe I added it wrong and it was doing some unnecessary loops. Just curious. I'd love to add it to a future wholesale-only website I'm thinking about partaking in. P.S. Thanks for these wonderful contribs, keep up the great work.
  10. I tested it with Allow Guests to See Prices True and False and it works fine on mine. Keep in mind I'm a newbie so hopefully one of you php code professionals can review what I did and verify that the code works like it should. From my earlier post about not having the totals on Checkout_Confirmation.php working...I was able to get the totals showing up perfectly on a new MS2 install. I must have missed some code when I installed it on my heavily modified version. Also, I was looking at the code and since i'm a newbie on php what code would I need to change to make it choose the least of between Special Price and Regular Price with Discount? This will make the Specials Prices blend seamlessly with this mode. It looks weird when I have a sale price for an item as $80 and the signed in customers see $90. And I wouldn't want to sign up an additional special price for each groups and individuals getting discounts. So far this contrib is like 98% complete. Thanks Hozone for sharing it with everyone.
  11. Okay I was able to fix all the "Must Be Logged In To See Prices". Hozone I'm going to post the files up here and go ahead and take the liberty and putting them in your next update if you want. Look for the following sections and make the appropriate changes. CATALOG\SHOPPING_CART.PHP All I changed in this code was to replace one "echo PRICES_LOGGED_IN_TEXT" with "$currencies->format($cart->showtotal());. //CGDiscountSpecials start global $customer_id; $query_price_to_guest = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " WHERE configuration_key = 'ALLOW_GUEST_TO_SEE_PRICES'"); $query_price_to_guest_result = tep_db_fetch_array($query_price_to_guest); if (($query_price_to_guest_result['configuration_value']=='true') && !(tep_session_is_registered('customer_id'))) { echo $currencies->format($cart->show_total()); } elseif (tep_session_is_registered('customer_id')) { echo $currencies->format($cart->show_total()); } else { echo PRICES_LOGGED_IN_TEXT; } //CGDiscountSpecials end CATALOG\INCLUDES\BOXES\SHOPPING_CART.PHP Once again all I changed in this code was to replace one "echo PRICES_LOGGED_IN_TEXT" with "$currencies->format($cart->showtotal());. //CGDiscountSpecials start global $customer_id; $query_price_to_guest = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " WHERE configuration_key = 'ALLOW_GUEST_TO_SEE_PRICES'"); $query_price_to_guest_result = tep_db_fetch_array($query_price_to_guest); if (($query_price_to_guest_result['configuration_value']=='true') && !(tep_session_is_registered('customer_id'))) { $box_text = $currencies->format($cart->show_total()); } elseif (tep_session_is_registered('customer_id')) { $box_text = $currencies->format($cart->show_total()); } else { $box_text = PRICES_LOGGED_IN_TEXT; } if ($cart->count_contents() > 0) { $info_box_contents[] = array('text' => tep_draw_separator()); $info_box_contents[] = array('align' => 'right', 'text' => $box_text); } //CGDiscountSpecials end CATALOG\INCLUDES\CLASSES\CURRENCIES.PHP I replaced one referrence of "return PRICES_LOGGED_IN_TEXT" with "$products_price = $products_price + $products_price * abs($customer_discount) / 100;" //CGDiscountSpecials start function display_price($products_price, $products_tax, $quantity = 1) { global $customer_id; $query_price_to_guest = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " WHERE configuration_key = 'ALLOW_GUEST_TO_SEE_PRICES'"); $query_price_to_guest_result = tep_db_fetch_array($query_price_to_guest); if (($query_price_to_guest_result['configuration_value']=='true') && !(tep_session_is_registered('customer_id'))) { $query_guest_discount = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " WHERE configuration_key = 'GUEST_DISCOUNT'"); $query_guest_discount_result = tep_db_fetch_array($query_guest_discount); $customer_discount = $query_guest_discount_result['configuration_value']; if ($customer_discount >= 0) { $products_price = $products_price + $products_price * abs($customer_discount) / 100; } else { $products_price = $products_price - $products_price * abs($customer_discount) / 100; } return $this->format(tep_add_tax($products_price, $products_tax) * $quantity); } elseif (tep_session_is_registered('customer_id')) { $query = tep_db_query("select g.customers_groups_discount from " . TABLE_CUSTOMERS_GROUPS . " g inner join " . TABLE_CUSTOMERS . " c on g.customers_groups_id = c.customers_groups_id and c.customers_id = '" . $customer_id . "'"); $query_result = tep_db_fetch_array($query); $customers_groups_discount = $query_result['customers_groups_discount']; $query = tep_db_query("select customers_discount from " . TABLE_CUSTOMERS . " where customers_id = '" . $customer_id . "'"); $query_result = tep_db_fetch_array($query); $customer_discount = $query_result['customers_discount']; $customer_discount = $customer_discount + $customers_groups_discount; if ($customer_discount >= 0) { $products_price = $products_price + $products_price * abs($customer_discount) / 100; } else { $products_price = $products_price - $products_price * abs($customer_discount) / 100; } return $this->format(tep_add_tax($products_price, $products_tax) * $quantity); } else { return PRICES_LOGGED_IN_TEXT; } } function display_price_nodiscount($products_price, $products_tax, $quantity = 1) { global $customer_id; $query_price_to_guest = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " WHERE configuration_key = 'ALLOW_GUEST_TO_SEE_PRICES'"); $query_price_to_guest_result = tep_db_fetch_array($query_price_to_guest); if (($query_price_to_guest_result['configuration_value']=='true') && !(tep_session_is_registered('customer_id'))) { return $this->format(tep_add_tax($products_price, $products_tax) * $quantity); } elseif (tep_session_is_registered('customer_id')) { return $this->format(tep_add_tax($products_price, $products_tax) * $quantity); } else { return PRICES_LOGGED_IN_TEXT; } } //CGDiscountSpecials end
  12. I'm going to try re-installing the newest CGDisount contribution in a brand new OSC MS2 setup today and keep everyone posted.
  13. Are you guys able to have it show the totals on the "Checkout_confirmation" screen? Mine is showing the itemized product prices (working correctly for both normal zero discount customers and discounted), but isn't showing the shipping, tax and grand totals. Yeah has anyone been able to code it so it acts like normal when you have "Show For Guests" on?
  14. Hozone, Just today I installed CG 1.4b fix. Wonderful add-on. I'm still fooling around with it. The Admin works perfectly as far as I could tell. But there are a couple minor issues: 1) Checkout_Confirmation.php page is not showing the subtotals, shipping, additional fees, and grand total. 2) Is there any quick code modifications that can be used to make the regular users see everything the normally would before adding this contribution? Perhaps a big IF...ELSE over all the mods *shrug*??? Maybe it would only have to be a special part. Sorry i'm totally new to this php and osc stuff this month. 3) Is there any way the code can be modified to be the "lesser of" group discount price or special price? Let's say an item is normally $100. Current special is $90. The wholesale group is 20% making the item $80. When the wholesale customer is logged in his price for that item on special is $90 not the $80 he should be getting. I guess I can put in a special on the wholesale group for $80 for that item, but it would be misleading since it will say "$80 crossed out with an $80 special figure written beside it". If those minor issues could possibly be resolved, this contribution is DEFINATELY A KEEPER. Thanks again Hozone. Sean