Latest News: (loading..)


  • Content count

  • Joined

  • Last visited

  • Days Won


Everything posted by Jack_mcs

  1. Ivan: 1 - The Option Types addon will let you set an attribute to type text, textarea, radio, checkbox, file (dropdown) and image. 2 - Use the KISS image thumbnailer. It creates thumbnails on the fly and its main use, at least for me, is to decrease load time.
  2. No one has ever reported this problem before and I've not seen it with View Counter so I don't know why it is happening. If you are using a version of oscommerce that lets you convert database tables, please try using the change to UTF option. That will switch the tables to InnoDB, which is not immune to this problem but less likely for it to occur. View Counter stores a lot of data so if your site is very busy, it could be that this happens during extra busy times. But either way, you can try turning off the flag option and the block country option, if it is enabled, to see if that eliminates the problem.
  3. This is the support thread for View Counter. View Counter provides a way to monitor and control what's going on in your shop. If you are familiar with the Who's Online addon, then this can be thought of as Who's Online on steroids. Most shop owners are not aware of the number of search bots, crawlers and skimmers that visit their shops on a daily basis. Some are useful but most are not. All they do is use the accounts bandwidth and slow the server down. This program provides a way to see and control them. Some of its functions are: - View who's on the shop, including visitors and search bots. - View a history of the IP's that have visited and how often. - View the pages in the shop that have been visited and how many times each was visited. - View the pages in the shop that have not been visited. - Look up the DNS data for anyone on the shop. - Ban by an IP, range of IP's or a domain name. - Kick someone off the site and display a warning message. - Send someone a message that is currently on your site. - Trap IP's that do not follow the robots file directive. - Ban IP's that change the url's to cause damage (hackers). - Much more and growing. View Counter is compatible with all versions of oscommerce. I would like to extend my special thanks to Steve, aka Altoid, for the assistance he provided in testing this addon. His ability to notice things I missed, along with his valuable suggestions for improvements, resulted in a much better program than I initially had written. Thanks Steve. :)
  4. Thanks for mentioning it. I don't keep up on the social sites so there may be others that have gone away too.
  5. This is the support thread for the new Header Tags SEO contribution. It is based on the Header Tags Controller but is not compatible. Why the new name? There are a couple of reasons for this. First, so much has changed in the code that it is mostly a different package and maintaining it would be difficult if it were considered just an update. But beyond that, a lot of people mistakenly confuse the Header Tags Controller as just a meta tags handler. It is that but has gone beyond that basic function for some time now. So to compare it to the other meta tags contributions is just wrong. And I should say here that if all you are looking for is a way to handle the meta tags of your shop, you should not install this contribution since it is definitely overkill. But when you consider that the keywords meta tag is rarely used by google at all nowadays, I can't imagine why someone would want to install a package that relied on that tag so much. And that is the real reason for the new name. This contribution is the only one of its kind to tie together so many Search Engine Optimization (SEO) tricks, that the new namejust made sense. What's the difference? The following are the major changes (or the ones I could remember) in this new contribution: -> The code is 100% langage compliant. -> Removed the english/header_tags.php file in favor of database entries. -> Fixed a bug introduced in a previous version. A spelling mistake would make Page Control fail in some cases. I only mention this here because it was a nasty little bug I could never locate. So anyone having that problem should consider upgrading. -> Added control options to admin->Configuration. -> Added additional meta tag options. It is doubtful these will be used that much but a number of requests were received for this option so it was added. -> Added an option to view the title and meta tags on the actual web page from admin. -> Added Social Bookmark code. -> Added code to apply mouseover text to the sites logo - unique for each page. -> Added code to have the breadcrumb use the header tags titles. -> Added an exclude list in admin/includes/functions/header_tags.php that prevents header tags code from being added to certain files (like checkout pages). This is because those pages don't need tags and excluding them will simplify matters. -> Added option to Page Control and Fill Tags so that the keywords can be dynamically generated from the pages on the site. Currently, the code only supports single keywords but I plan on changing that. There is an option in admin to only pick keywords that fall within the keyword density settings. -> Added an automatic page add feature. You still have to edit the actual file in the root but that's all. -> Added easy install instruction for STS shops. There is just one change to make and the two contribution work together. -> Added code to have the new features work with BTS based shops. There may be a few cases where an option doesn't work due to how BTS handles the files, but they should be minimal and not anything to cause a great stir. -> Changed how title, description and keywords are built. This should provide more flexibility for those that want that option. Each item has a sort order and is displayed in the string of text based on that sort order. So, for example, the title of a page can contain some entered text, the default title and the category and manufacturers names (if applicable), in any order. -> Added an Un-Install file to completely remove Header Tags from the database. This should make testing and troubleshooting easier. -> Added code to use curl instead of standard php file calls. The code will try curl first and then switch to a file command if it is not present. -> Tested in MS2, RC2, STS and BTS shops. Special thanks to the following for their suggestions: bkellum java roasters surfalot A lot of time went into creating this contribuiton. I hope it proves useful. Jack
  6. Yes, Site Monitor is free.
  7. It depends on what you mean by SEO. Most times a question like this is asked, it refers to the meta tag code of the shop. If that is what you mean then, no, you don't need to install an additional meta tag addon. The only one that is current is Header Tags SEO. The code in Edge is modeled after it but there are some differences. Once installed, HTS offers more options. Whether those other options are worth the time to install it is something only you can decide. If you mean SEO in a more general sense, then you definitely need the google sitemap addon and I would suggest both All Products SEO and Sitemap SEO.
  8. It's unlikely your host did this. Sitelock is a legitimate program, though unnecessary in my opinion. There shouldn't be any reason to start over. Your files can be cleaned. If you are going to start over, install the latest Edge version. Besides being a better package for the web, it will eliminate a large of security holes in an older shop. If done correctly, you won't lose any data in the database. Though the appearance and addons will have to be redone. Once you have the shop running again, install Site Monitor. If won't prevent hackers from getting in but will let you know when they do so you will know what is needed to fix what they did. There are also some security addons that can be installed to help prevent hacking. I'll send you a PM with more details.
  9. When I mentioned the forum, I was talking about it as a stand-alone installation. So your site would be in one directory and the forum in another but in the same hosting account. If someone is able to hack into either of them, then they can follow the trail to the other one, unless they are blocked by the code. This was a common occurrence years ago. I haven't heard of it lately but if your installations are old packages, it is certainly possible. But it is all guesswork at this point since it can be near impossible to know how a site was hacked unless it is looked into right away and you have access to server logs.. If it was something like your login being obtained, there wouldn't be a way to tell even that way unless you had tracking code installed.
  10. Replace the file mentioned previously with the following. It should conform to their changed rules. But it is only for one price/language. If multiple prices are present, the code would have to be altered further for that. <?php $loc = explode(',',$_SERVER["HTTP_ACCEPT_LANGUAGE"]); $ogArray = array(); $ogArray['site_name'] = STORE_NAME; $ogArray['locale'] = str_replace('-', '_', $loc[0]); $showOG = false; $showProduct = false; $showTwitter = false; $twitterArray = array(); $db_query = tep_db_query("select groupname as storename, data as creator from headertags_social where section = 'twitter'"); $db = array(); if (tep_db_num_rows($db_query)) { $db = tep_db_fetch_array($db_query); $twitterArray[] = '<meta name="twitter:card" content="summary">'; $twitterArray[] = '<meta name="twitter:site" content="@' . $db['storename'] . '">'; $showTwitter = true; } switch (true) { case (basename($_SERVER['SCRIPT_FILENAME']) === 'index.php'): if ($category_depth == 'top') { $img = (file_exists('store_logo.png') ? tep_href_link('images/store_logo.png', '', $request_type, false, false) : ''); if (! tep_not_null($canonical_url)) { $canonical_url = GetCanonicalURL(); } $twitterArray[] = '<meta name="twitter:creator" content="@' . $db['creator'] . '">'; $twitterArray[] = '<meta name="twitter:url" content="' . tep_href_link('index.php', '', $request_type, false) . '">'; $twitterArray[] = '<meta name="twitter:title" content="' . $header_tags_array['title'] . '">'; $twitterArray[] = '<meta name="twitter:description" content="' . $header_tags_array['desc'] . '">'; $twitterArray[] = '<meta name="twitter:image" content="' . $img . '">'; $ogArray['type'] = 'website'; $ogArray['image'] = $img; $ogArray['url'] = $canonical_url; $showOG = true; } break; case (basename($_SERVER['SCRIPT_FILENAME']) === 'product_info.php'): case (basename($_SERVER['SCRIPT_FILENAME']) === 'product_reviews.php'): case (basename($_SERVER['SCRIPT_FILENAME']) === 'product_reviews_info.php'): if ($_GET['products_id'] > 0) { $og_query = tep_db_query("select p.products_id, pd.products_name, pd.products_description, p.products_quantity, p.products_image, p.products_price, p.products_tax_class_id, p.products_date_available from products p, products_description pd where p.products_status = '1' and p.products_id = '" . (int)$_GET['products_id'] . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "'"); if ( tep_db_num_rows($og_query) > 0 ) { $og = tep_db_fetch_array($og_query); $img = (tep_not_null($og['products_image']) ? tep_href_link('images/' . $og['products_image'], '', $request_type, false, false) : ''); $url = tep_href_link('product_info.php', 'products_id=' . $og['products_id'], $request_type, false); /**** Get the price ****/ if (($new_price = tep_get_products_special_price($og['products_id']))) { } else { $new_price = $og['products_price']; } $og_price = $currencies->display_price($new_price, tep_get_tax_rate($og['products_tax_class_id'])); $og_price = substr($og_price, 1); $twitterArray[] = '<meta name="twitter:creator" content="@' . $db['creator'] . '">'; $twitterArray[] = '<meta name="twitter:url" content="' . $url . '">'; $twitterArray[] = '<meta name="twitter:title" content="' . htmlspecialchars($og['products_name'], ENT_QUOTES) . '">'; $twitterArray[] = '<meta name="twitter:description" content="' . GetOGDescription($og['products_description']) . '">'; $twitterArray[] = '<meta name="twitter:image" content="' . $img . '">'; $twitterArray[] = '<meta name="twitter:data1" content="' . $og_price . '">'; $twitterArray[] = '<meta name="twitter:label1" content="' . HTS_OG_PRICE . '">'; $twitterArray[] = '<meta name="twitter:data2" content="' . $og['products_quantity'] . '">'; $twitterArray[] = '<meta name="twitter:label2" content="' . HTS_OG_AVAILABLE_STOCK . '">'; $ogArray['type'] = 'product'; $ogArray['title'] = htmlspecialchars($og['products_name'], ENT_QUOTES); $ogArray['description'] = GetOGDescription($og['products_description']); $ogArray['image'] = $img; $ogArray['url'] = $url; $ogArray['product:price:amount'] = $og_price; $ogArray['product:price:currency'] = $currency; $ogArray['availability'] = ($og['products_date_available'] > date('Y-m-d H:i:s') ? 'pending' : $og['products_quantity'] < 1 ? 'oos' : $og['products_quantity'] > 0 ? 'instock' : 'oos'); $showOG = true; $showProduct = true; } } break; case (defined('article_info.php') && basename($_SERVER['SCRIPT_FILENAME']) === 'article_info.php'): if ($_GET['articles_id'] > 0) { $og_query = tep_db_query("select a.articles_date_added, a.articles_last_modified, ad.articles_image, ad.articles_name, a.authors_id, ad.articles_description, ad.articles_url, au.authors_name, td.topics_name from articles a left join authors au on a.authors_id = au.authors_id left join articles_description ad on a.articles_id = ad.articles_id left join articles_to_topics a2t on a.articles_id = a2t.articles_id left join topics_description td on a2t.topics_id = td.topics_id where a.articles_status = '1' and a.articles_id = '" . (int)$_GET['articles_id'] . "' and ad.language_id = '" . (int)$languages_id . "'"); if ( tep_db_num_rows($og_query) > 0 ) { $og = tep_db_fetch_array($og_query); $img = (tep_not_null($og['articles_image']) ? tep_href_link('images/' . $og['articles_image'], '', $request_type, false, false) : ''); $url = tep_href_link('article_info.php', 'article_id=' . $og['articles_id'], $request_type, false); $twitterArray[] = '<meta name="twitter:creator" content="@' . (tep_not_null($og['authors_name']) ? $og['authors_name'] : $db['creator']) . '">'; $twitterArray[] = '<meta name="twitter:url" content="' . $url . '">'; $twitterArray[] = '<meta name="twitter:title" content="' . htmlspecialchars($og['articles_name'], ENT_QUOTES) . '">'; $twitterArray[] = '<meta name="twitter:description" content="' . GetOGDescription($og['articles_description']) . '">'; $twitterArray[] = '<meta name="twitter:image" content="' . $img . '">'; $ogArray['type'] = 'article'; $ogArray['url'] = $url; $ogArray['description'] = GetOGDescription($og['articles_description']); $ogArray['tag'] = $header_tags_array['keywords']; if (isset($og['articles_date_added'][1])) $ogArray['published_time'] = $og['articles_date_added']; if (isset($og['articles_last_modified'][1])) $ogArray['modified_time'] = $og['articles_last_modified']; if (isset($og['expiration_time'][1])) $ogArray['expiration_time'] = $og['expiration_time']; if (isset($og['authors_name'][1])) $ogArray['author'] = $og['authors_name']; if (isset($og['authors_id'][1])) $ogArray['author'] = tep_href_link('articles.php', 'authors_id=' . $og['authors_id'], $request_type, false); if (isset($og['topics_name'][1])) $ogArray['section'] = $og['topics_name']; if (isset($og['articles_image'][1])) $ogArray['image'] = $img; $showOG = true; } } break; } if ($showTwitter) { foreach ($twitterArray as $tag => $data) { echo $data . "\n"; } } if ($showOG) { foreach ($ogArray as $tag => $data) { if ($showProduct && strpos($tag, 'product:price:') !== FALSE) { echo '<meta property="' . $tag . '" content="' . $data . '" />' . "\n"; } else { echo '<meta property="og:' . $tag . '" content="' . $data . '" />' . "\n"; } } }
  11. Packages for things like forums are notorious for providing backdoors into shopping cart packages so that could be the source of the hack.
  12. Markus: The fix Phil mention is how to do it. In the includes/modules.header_tags_opengraph.php file, find this line $og_price = $currencies->display_price($new_price, tep_get_tax_rate($og['products_tax_class_id'])); and add this one below it $og_price = substr($og_price, 1);
  13. Thanks for letting me know. :)
  14. This addon provides an easy method for keeping your database fit. All osCommerce shops require a MySQL database to function but little attention is ever given to it. Just ask yourself when was the last time you optimized your database? Unfortunately, this is a big mistake since MySQL is prone to developing problems. Some are fixed as the database runs but some are not and, over time, these grow and can severely effect your shops performance. This addon will automatically tune-up the database, speeding it up and correcting problems that many shop owners are not even aware of. Here are some of its features: Defragment the tables Optimize the keys Strip the customers tables of old data Strip the sessions table of old data Strip the user tracking table (if present) of old data Remove old credit card numbers
  15. Does the test tool show that it is one of the properties you mention? The FB parser is know to be sensitive to some things, like names with space and dates in certain formats. Maybe it is something like that?
  16. I may have missed it but if how they got in has not been fixed, the hole will most likely still be there after you restore and you will have the same problem again.
  17. A new version has been uploaded with these changes: Added option Remove Orphan Orders. Added the latest Version Checker files. Corrected spelling mistake in the modules file - found by member Cary. Corrected mistake in the remove old customers section that would prevent some customers from being deleted. Fixed problems in Truncate Customers Orders. Fixed a mistake in the common file when deleting sessions. (found by member John W). Fixed several minor html coding mistakes. (found by member Demitry).
  18. Remove the following in admin/includes/functions/header_tags.php $path = str_replace("https:", "http:", $path);
  19. It's important to understand that the install files are not always accurate. That is because, as mentioned in a recent post, there are many versions of oscommerce out there and the included files and the install and update files may not match. In the 3.3.5 file named Update_from_V_3.3.4_to_V_3.3.5.txt, it says to find this code: $products_head_sub_text = $HTTP_POST_VARS['products_head_sub_text']; You will see that line in the HeaderTags_SEO_V_3.3.4\Use_if_version_lessthan_2.3\catalog\admin\categories.php at line 736. It doesn't exist in 2.3 shops. This is why I will be dropping install instructions for shops other than the Bootstrap version. There is just no reasonable way to list all of the possibilities. Instead of trying to follow all of the update files, you would be better off either using the main install instructions for the greater than 2.3 version or, probably better, use a compare program like WinMerge, which is free, to compare the included files.
  20. Thanks for letting me know. I will add a note to the installation instructions.
  21. This addon is a bootstrap module that displays the category images on the home page. The category description can also be displayed via a setting.
  22. I assume you mean 3.3.4 to 3.3.5 since there are not any update files starting with 2. Step 7 mentions "products_head_sub_text". That was added in version 3.2.7 so if you are uploading from a version before that, you have to run through all of the update files. I just checked the zip package and there is a categories file in it at /catalog\admin\categories.php. You have to choose the directory that best applies to your shop. There isn't one for the Gold version but I think the "Use_if_version_greaterthan_2.3" would be closest.
  23. Hi Anne. I'm sorry but I can't answer without knowing the name of the update file you are using and the version of your shop.
  24. If you can't see the logs you can try installing View Counter. It will show you IP's hitting the account. If there are many hits from a certain IP at the time of the failure, that IP would be suspect. If you don't sell to all countries, I suggest you use the country blocking option since that can cut down the number of MySQL requests by quite a bit and may solve the problem by itself.
  25. It can be due to an overloaded server but it can also be due to one, or more, attacks on the site. In my experience, it is almost always the latter. If someone decides to attack a site (DDOS), the easiest way to cause problems is to send many commands to the MySQL server. The only way to know for sure is to look at the logs.