Jump to content
  • Checkout
  • Login
  • Get in touch


The e-commerce.


  • Content count

  • Joined

  • Last visited

  • Days Won


Everything posted by kru

  1. kru

    View Counter

    Here's a screen shot showing access from Vietnam. (I cross-checked the IP using a popular site, which also showed it as Vietnam.) It's not always Vietnam. That's just the first example I came upon. I'm also including a screen shot from the Tools section, showing some countries we have blocked. I'm not saying something is broken. (We have discussed this previously and you explained how this situation can sometimes happen.) I would just like to make it easier to identify them when it does happen...
  2. kru

    View Counter

    Every so often I check View Counter to see what kind of activity we're getting and from what countries. Countries other than the US and Canada are not supposed to be allowed through, but some foreigners are gaining access. Their country flags are shown in the monitor next to the IP address and an IP lookup confirms they are from foreign countries. Anyway, it would be nice if the country flag was in it's own sortable column. That way we could quickly skip to the ones that do not show a US or Canada flag and potentially block them with the Ban or Block Range features. As it is now, if I want to get anal and see who all is slipping through, I have to go page by page. I may find one out of every 5 pages sometimes. That's pretty time-consuming, which means I don't do it as often as I'd like. Just something to think about next time you happen to be updating this add-on. Thanks.
  3. kru

    Automatically send data feed to Froogle

    What Jack is saying is, your first define statement says: define('OPTIONS_ENABLED', 0); However, if you're using any of the options at all, that first define should say: define('OPTIONS_ENABLED', 1); So you enable the options, then tell the program specifically which ones you want to use...
  4. kru

    Automatically send data feed to Froogle

    "Not Supported" is only appearing in the output file if the value is still set to NULL. If that field is empty, it is appearing as such instead. If we modified the record for any other field, the value in the UPC was being changed from NULL to empty, whether we updated the UPC field or not. So there was a weird mixture of values in the googlefeeder output file since we are constantly modifying product records. A lot of blanks, some "Not Supported" and a lot of UPCs. So I had to change the code whether "Not Supported" was a valid value or not. It didn't make sense to have a mixture of blanks and "Not Supported" for those records that did not have a UPC. FYI - The pickup-method attribute is the only one I could find that has a valid value of "not supported". I'm not complaining. I know Google is constantly making changes and it's incredibly hard, if not impossible, to keep up with them. I'm just pointing it out so you can incorporate it into the next version, assuming there is one. In the meantime, if others have problems with this and want to change it in the code, now they know how. (Line 501 in admin/googlefeeder.php)
  5. kru

    Automatically send data feed to Froogle

    Yes. I have been using that same page as a reference. It is my understanding you only use the 'identifier exists' attribute if you are missing both GTIN (UPC, in this case) and MPN. From the page you referenced: "In the rare situation where your product has neither a GTIN nor MPN (for example, made-to-order or handmade items), set ‘identifier exists’ to 'FALSE' to indicate that you have no identifier for the product." Regardless, that's really a separate issue. I was trying to figure out why the Google Base program is adding "Not Supported" in the UPC field of the txt file. It only happens if the products record has not been updated to include a UPC and, as a result, the UPC field is still set to NULL. (Which is a fair number of our OEM auto parts.) Wouldn't it be better for Google Base to populate a value of '' (empty) if the UPC field is either empty or still set to NULL? The help document you referenced says it is acceptable to provide no value for UPC as long as the Brand and MPN attributes are populated, which is the case with our feed. My goal is to create output that's ready to load into Google without manually tweaking any records, because that can lead to typos and/or formatting problems. (Not to mention delays.) If "Not Supported" is never supposed to appear in the UPC field, as far as Google is concerned, shouldn't the code which is adding it actually be removed from the Google Base program? I see where "Not Supported" is truly a valid value for another field, but not for UPC. Perhaps it was at one time and the code is still in the program? I can modify the code (@ line 501, if I recall) to keep it from happening in our file, but I thought I should bring it to your attention.
  6. kru

    Automatically send data feed to Froogle

    Jack, We added a products_upc field so we could pass UPC to Google. (Using your handy Add-A-Field add-on.) We have many products for which we do not have a UPC. (Most OEM replacement auto parts do not have a UPC and that is actually acknowledged by Google in the product feed specifications.) Anyway, in the generated txt file, I see a value of "Not Supported" for those products that do not have a UPC in our database. Is Google actually expecting to see "Not Supported" in that position if there is not a UPC? I can't find reference to that particular text string needing to be in that 'field'. (Or any 'field', for that matter.) Thanks. -Kevin
  7. kru

    Authorize.net SIM Configuration

    It is my understanding PCI compliance is about more than just storing credit card info. If they're entering it on your site at all, it must be transferred to a processor and the compliance folks take issue with that as well. Even if you're not storing it you have to send it somewhere and there are obviously security risks in that. I don't think that makes it impossible to pass the compliance 'test' but it seems to make it more difficult than solutions where the customer enters all their card-specific info somewhere other than your site. If your understanding is different, let me know.
  8. Nevermind. Not a bug at all. Just something that is not documented very well. There is a setting in Configuration>>Maximum Values. It is called New Reviews. This is evidently where you set the number of reviews you want considered for the total count. It was set at 6. I changed it to a higher number and the total displayed is now accurate.
  9. So I have a problem with this contribution... The count for the number of reviews is wrong in the Product Listing (where you see multiple different products in a category.) We have an item that has 9 reviews but, in the Product Listing, it only shows it as having 6 reviews. Once I click on the item to get into the details, it shows me there are 9 reviews. They appear on two pages. Page 1 has 6 reviews and page 2 has 3 reviews. Is it just coincidence that the total in the Product Listing matches the total number of reviews on the first page once I get into the item description? At any rate, it's been a while since I looked at this contribution. I was wondering if anyone has seen this bug and already made the appropriate code change and, if so, can you please share it? Thanks.
  10. Nevermind. It worked on the third try. I had some double quotes around a few words in the description. I took those out and the upload worked. I don't know if that was the issue or if they were just experiencing temporary problems. Either way, it's resolved now.
  11. I uploaded a new add-on package called Discontinue Product but it doesn't appear in the list of Add-Ons. It is a zip file and it is less than 3KB in size, so it doesn't even come close to the 3MB size noted as needing admin review. I uploaded it twice, actually. I thought maybe I did it wrong the first time. No dice. I'm wondering why it doesn't appear. Is there an Add-On approval process that isn't documented? Do I need to notify someone to get it approved? If someone can provide some guidance, it would be appreciated. Thanks.
  12. I used 7zip too. Did you save it as a zip file or a 7z file? I saved it as zip because that was a file type in the list. 7z was not.
  13. Thanks. I had found something else to suit my purposes not long before your post but I looked at the Sold Out add-on and it helped me discover an oversight in what I went with. I ended up modifying the Easy Call For Price add-on for my purposes. I just replaced the Contact link in that add-on with text that says 'DISCONTINUED.' I also had to modify the product_reviews and product_reviews_write files to get rid of the Add To Cart button. (That's the piece I discovered in the Sold Out add-on.) At any rate, I created a new add-on called 'Discontinue Product' if anyone is interested in doing this. I uploaded it to the Add-On page but it doesn't appear yet. I assume there is some sort of waiting period...even though it is not even close to the 3MB file size it says requires review...
  14. We need something like this. Does anyone have any idea if anything was ever developed? I searched the Add-Ons and didn't find anything. Basically, we want the product to continue to be displayed on the website if it was discontinued. We just want the Add To Cart button removed so they can't purchase it and maybe display a message of some sort, like "This product has been discontinued. Please contact us if you need help selecting a similar product." at the top of the page. Why do we need this? For many of the same reasons as MindTwist. Plus we sometimes have customers who we need to refer back to the original listing for warranty terms, return policy, compatibility notes, etc. If they were the last person to purchase it and we de-activated it because we can't get any more (and didn't want to risk someone else purchasing it), they can't see the listing at that point. We do not automatically hide products when the stock goes below zero, because, for most items, we can usually get more (or already have more on the way). But discontinued products are another story. We only want to display them if the customer can't actually purchase one. We don't want credit card fees for orders we already know we're going to have to cancel... The cleanest way to do this might involve adding a new field to the products table for a discontinued flag but, of course, that would involve adding the field to the product display page in Admin as well, so it could easily be updated. (Updating through mySQL is a pain.) A quick-and-dirty method would be to check the products_quantity value in the products table and, if quantity is set to -1000 or less, don't display the Add To Cart Button and also show the Discontinued message. Then it could be 'administered' from the existing products page in Admin by simply setting the quantity to a value of -1000. Any thoughts or direction?
  15. kru

    [Contribution] Database Manager

    He posted a link to a version specific to 2.3 one page back in this thread, I believe. Maybe you should check there. Perhaps there are additional changes for 2.3 that you will not find in the 2.2 thread...
  16. I expanded on this and noticed further improvements in the PageSpeed results. Read on... First of all, I tested the site on the two websites provided. The results: PageSpeed = 64/100 for mobile and 70/100 for desktop Pingdom = 81/100 Then I added the htaccess changes recommended in the contrib. The results: PageSpeed = 70/100 for mobile and 80/100 for desktop Pingdom = 95/100 Then I added some additional lines to htaccess. The results: PageSpeed = 77/100 for mobile and 84/100 for desktop Pingdom = 97/100 Ok, so there was a marginal increase in the Pingdom score but there was a noticeable increase in the PageSpeed scores which are, of course, a Google test and, as such, are much more important in my book. So what additional changes did I make? I added the following lines after the ExpiresDefault ExpiresByType image/jpg "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/gif "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType text/css "access plus 1 month" ExpiresByType text/html "access plus 1 week" ExpiresByType application/pdf "access plus 1 month" ExpiresByType text/x-javascript "access plus 1 month" ExpiresByType application/x-shockwave-flash "access plus 1 month" ExpiresByType image/x-icon "access plus 1 year" Does anyone see any problems with doing this? I poked around on the site and didn't find any problems but I will report back if I do.
  17. kru

    Reviews in Product Display v2.0

    I forgot the opening <?php and the closing ?> around the entire block of code. I'm just going to revise the install instructions and post a new version of the contrib, so look for it in the Add Ons section...
  18. kru

    Reviews in Product Display v2.0

    There is one button that doesn't show up unless you have more than 3 reviews for a product. We didn't have anything with more than 3 reviews, so I didn't see it. Anyway, it was out of position, so I made one small change to move it. About two thirds of the way down in the code above you will find: echo ' <TD ALIGN="right" VALIGN="middle" CLASS="main"><a href="' . tep_href_link(FILENAME_PRODUCT_REVIEWS_WRITE, substr(tep_get_all_get_params(), 0, -1)) . '">' . tep_image_button('button_write_review.gif', IMAGE_BUTTON_WRITE_REVIEW) . '</a></td>'; echo ' <td width="10">' . tep_draw_separator('pixel_trans.gif', '10', '1') . '</td>'; Simply reverse the order of those two lines to read: echo ' <td width="10">' . tep_draw_separator('pixel_trans.gif', '10', '1') . '</td>'; echo ' <TD ALIGN="right" VALIGN="middle" CLASS="main"><a href="' . tep_href_link(FILENAME_PRODUCT_REVIEWS_WRITE, substr(tep_get_all_get_params(), 0, -1)) . '">' . tep_image_button('button_write_review.gif', IMAGE_BUTTON_WRITE_REVIEW) . '</a></td>'; When combined with the revised products_info.php code from my previous post, you will find the buttons appear in the four corners of the box, the reviews are centered and stretched out across most of the box and the box that appeared around the Write Review button is gone. FYI - Our shop is 2.2 and these appearance changes were tested in Firefox and IE.
  19. kru

    Reviews in Product Display v2.0

    This has some serious table formatting issues as delivered. The reviews were in a narrow column to the far left of the screen. It looked silly because it made the page super long if the review was even moderate in length. I'm no php super-coder but I reformatted it for a better appearance. Now it stretches the review text out across the screen. There are a couple other minor appearance changes as well. Instead of using the code from v2.3 in catalog/product_info.php you should do this instead. In catalog/product_info.php, where you find: <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td> <td class="main"><?php echo '<a href="' . tep_href_link(FILENAME_PRODUCT_REVIEWS, tep_get_all_get_params()) . '">' . tep_image_button('button_reviews.gif', IMAGE_BUTTON_REVIEWS) . '</a>'; ?></td> <td class="main" align="right"><?php echo tep_draw_hidden_field('products_id', $product_info['products_id']) . tep_image_submit('button_in_cart.gif', IMAGE_BUTTON_IN_CART); ?></td> <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td> Replace it with: // BEGIN PopTheTop Product Info Reviews // Deleted 4 lines of code and replaced them with the following ?> <TD ALIGN="left" VALIGN="middle" CLASS="main"> <?php if (MAX_REVIEWS_IN_PRODUCT_INFO == '0') { echo tep_draw_separator('pixel_trans.gif', '100', '2') . '<br><a href="' . tep_href_link(FILENAME_PRODUCT_REVIEWS, tep_get_all_get_params()) . '">' . tep_image_button('button_reviews.gif', IMAGE_BUTTON_REVIEWS) . '</a> '; } if (tep_session_is_registered('customer_id')) { $product_notification_query = tep_db_query("select count(*) as count from " . TABLE_PRODUCTS_NOTIFICATIONS . " where products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and customers_id = '" . (int)$customer_id . "'"); $check = tep_db_fetch_array($product_notification_query); $notification_exists = (($check['count'] > 0) ? true : false); } else { $notification_exists = false; } if ($notification_exists == true) { echo '<a href="' . tep_href_link(basename($PHP_SELF), tep_get_all_get_params(array('action')) . 'action=notify_remove', $request_type) . '">' . tep_image_button('button_remove_notifications.gif', IMAGE_BUTTON_REMOVE_NOTIFICATIONS) . '</a>'; } else { echo '<a href="' . tep_href_link(basename($PHP_SELF), tep_get_all_get_params(array('action')) . 'action=notify', $request_type) . '">' . tep_image_button('button_notifications.gif', IMAGE_BUTTON_NOTIFICATIONS) . '</a>'; } ?> </TD> <td width="80%"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td> <TD ALIGN="right" VALIGN="middle" CLASS="main"><?php echo tep_draw_hidden_field('products_id', $product_info['products_id']) . tep_image_submit('button_in_cart.gif', IMAGE_BUTTON_IN_CART, 'width="120" height="22"'); ?></TD> <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td> </tr> <?php $reviews_query = tep_db_query("select count(*) as count from " . TABLE_REVIEWS . " where products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "'"); $reviews = tep_db_fetch_array($reviews_query); $reviews_query_average = tep_db_query("select (avg(reviews_rating)) as average_rating from " . TABLE_REVIEWS . " where products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "'"); $reviews_average = tep_db_fetch_array($reviews_query_average); $reveiws_stars = $reviews_average['average_rating']; $reveiws_rating = number_format($reveiws_stars,0); ?> <tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '45'); ?></td> </tr> <?php if (MAX_REVIEWS_IN_PRODUCT_INFO > 0) { $reviews_query = tep_db_query("select r.reviews_id, rd.reviews_text, r.reviews_rating, r.date_added, r.customers_name from " . TABLE_REVIEWS . " r, " . TABLE_REVIEWS_DESCRIPTION . " rd where r.products_id = '" . $HTTP_GET_VARS['products_id'] . "' and rd.reviews_id = r.reviews_id and rd.languages_id = '" . $languages_id . "' order by r.reviews_id DESC"); $num_rows = tep_db_num_rows($reviews_query); ?> <tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td> <td><?php echo BOX_HEADING_REVIEWS; ?> </td> </tr> <?php if ($num_rows > 0) { $row = 0; while (($reviews_values = tep_db_fetch_array($reviews_query)) && ($row < MAX_REVIEWS_IN_PRODUCT_INFO)) { $row++; $date_added = tep_date_short($reviews_values['date_added']); ?> <?php // Write product reviews ?> <tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td> <td> <table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox"> <tr class="infoBoxContents"> <td valign="top" class="main"><?php echo '<FONT COLOR="#006699"><b>Submited By:</b> ' . $reviews_values['customers_name'] . ' on <span class="smallText">' . $date_added . '</span></font><br>' . tep_break_string(nl2br(tep_output_string_protected($reviews_values['reviews_text'])), 60, '-<br>') . '<br><br>' . sprintf(tep_image(DIR_WS_IMAGES . 'stars_' . $reviews_values['reviews_rating'] . '.gif', sprintf(BOX_REVIEWS_TEXT_OF_5_STARS, $reviews_values['reviews_rating']))) ?> </td> </tr> </table> </td> </tr> <?php } // END while (($reviews_values... ?> <tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '15'); ?></td> </tr> <tr> <TD ALIGN="left" VALIGN="middle" CLASS="main"> <?php if ($num_rows > MAX_REVIEWS_IN_PRODUCT_INFO) { echo '<a href="' . tep_href_link(FILENAME_PRODUCT_REVIEWS, substr(tep_get_all_get_params(), 0, -1)) . '">' . tep_image_button('button_more_reviews.gif', IMAGE_BUTTON_MORE_REVIEWS) . '</a></td>'; echo ' <TD ALIGN="right" VALIGN="middle" CLASS="main"><a href="' . tep_href_link(FILENAME_PRODUCT_REVIEWS_WRITE, substr(tep_get_all_get_params(), 0, -1)) . '">' . tep_image_button('button_write_review.gif', IMAGE_BUTTON_WRITE_REVIEW) . '</a></td>'; echo ' <td width="10">' . tep_draw_separator('pixel_trans.gif', '10', '1') . '</td>'; } else { echo '<a href="' . tep_href_link(FILENAME_PRODUCT_REVIEWS_WRITE, substr(tep_get_all_get_params(), 0, -1)) . '">' . tep_image_button('button_write_review.gif', IMAGE_BUTTON_WRITE_REVIEW) . '</a></td>'; } ?> </tr> <tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '5'); ?></td> </tr> <?php if ($reviews['count'] > 0) { ?> <tr> <td class="smallText"> <table width="100%"> <tr> <td align="left" class="smallText"><FONT COLOR="#006699"><?php echo TEXT_REVIEW_AVERAGE . ': ' . tep_image(DIR_WS_IMAGES . 'stars_' . $reveiws_rating . '.gif', '', 60, 12, 'align=absmiddle') . '</a>'; ?></font></td> <td align="right" class="smallText"><FONT COLOR="#006699"><?php echo sprintf(TEXT_DISPLAY_NUMBER_OF_REVIEWS_PRODUCT_INFO, $row, $num_rows); ?></font></td> </tr> </table> </td> </tr> <?php } else { ?> <tr> <td class="smallText"><FONT COLOR="#006699"><?php echo sprintf(TEXT_DISPLAY_NUMBER_OF_REVIEWS_PRODUCT_INFO, $row, $num_rows); ?></font></td> </tr> <?php } ?> <?php } else { // if ($num_rows < 0)... ?> <tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '5'); ?></td> </tr> <tr> <td> <table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox"> <tr class="infoBoxContents"> <td> <table border="0" width="100%" cellspacing="0" cellpadding="2"> <tr> <td valign="top" class="main"><?php echo TEXT_NO_REVIEWS . '<br><br> <a href="' . tep_href_link(FILENAME_PRODUCT_REVIEWS_WRITE, substr(tep_get_all_get_params(), 0, -1)) . '">' . tep_image_button('button_write_review.gif', IMAGE_BUTTON_WRITE_REVIEW) . '</a>'; ?></td> </tr> </table> </td> </tr> </table> </td> </tr> <?php } } // END PopTheTop Product Info Reviews Notice you are getting rid of 4 lines of code now instead of 3. Follow the install instructions for all other changes. If I have time I will update the contrib. By the way, we also have Review Rating in Product Listing v1.2 installed and they play nicely with each other. I didn't have to make any changes to it to install this or vice versa. Enjoy! -Kevin
  20. Actually, 1.8.2 would probably work if the install instructions were accurate. There is a remove_unused_image.php file that is evidently supposed to be installed in the includes/languages/english directory. I found it while exploring the zipped folders in the contrib again. However, it is not documented in the instructions. There is a somewhat cryptic reference to language files but it is not spelled out as an actual step, like the other adds/changes are. So...if you install 1.8.2, make sure to copy the included includes/languages/english/remove_unused_images.php to the same directory on your server. (The same file exists in other language files in the contrib too but you wouldn't need to install those if your site is English only.) Personally, I was concerned enough about the documentation, it got me wondering about the code. So I just went with 1.5.
  21. Install version 1.5 folks. It works, unlike the latest version (1.8.2)...
  22. Ours is an old 2.2 store. So there you go people. Now you know how to do it in both versions... To take it a step further, say you want to change the date on the product pages to the date last modified instead of the date it was added to the catalog. In this case, instead of commenting out the line I referenced, you would change products_date_added to products_last_modified. Then you would also have to change the products_date_added to products_last_modified up higher in the code where it is populating the data from the products table.
  23. Installed version 1.8.2 of this contrib. (The most recent one from albanderuaz.) Getting an error. Triple-checked everything and can't find the problem. I have installed many contribs and use ftp all the time, so I doubt it's an ftp issue. Anyway, here is the message I get when I click on Remove Images in the Admin panel (in 2.2): Here is the entry from the server error log: Line 12 of the code is the require statement: Why is it looking for the remove_unused_images.php file in the includes/languages/english directory? The install instructions specifically say: Do I need to copy it to the includes/languages/english directory for some unexplained reason? I do have htaccess and htpasswd files for the admin directory. But I've got other contribs insalled that are doing just as much as this one (and more) and they work fine. I have file permissions set to 755 for this contrib, by the way. Same as the other files on the server... Any help you can give would be appreciated.
  24. I know this is really old but I was trying to do this too and it took me a while to find since this direct question wasn't answered. Figured I'd post what I did in case anyone else is looking to do this... In catalog/product_info.php, I commented out the line that reads: <td align="center" class="smallText"><?php echo sprintf(TEXT_DATE_ADDED, tep_date_long($product_info['products_date_added'])); ?></td>
  25. kru

    Header Tags SEO

    Understood. I sent you a message.