Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

EasyMap


Jack_mcs

Recommended Posts

I've got the latest v2.4 working and instead of putting it the link in the infobox. Is there a way to put the entire easymap.php code into contact_us.php so that when someone goes to the contact us page that it shows the map right above the contact form. I think that would be more appropiate than putting the map somewhere else when it should be within the contact page? TIA, great contrib btw. example.jpg

Edited by Young Tae Byun
Link to comment
Share on other sites

Hi,

I'm having trouble get this to work with a site that has Greek language installed.

When I upload the easy map. php the site displays fine but the Google map displays funny. I get symbols like this that are not Greek on the map.

 

©2008 ΞΡδομένα ΟΞ¬ΟΟΞ· Basarsoft - ΞΟΞΏΞΉ ΟΟΞΟΞ·ΟΧάΟΟΞ·ΟΞΞΏΟΟΟΟΟΞ?

?ΟΞΞ²ΟιδικΟΟ

 

 

If I change the <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">

 

to

<meta http-equiv="content-type" content="text/html; charset=utf-8"/>

 

then the map displays well but only in Greek. The English side of the site displays well. However, if you click on the Greek flag to change languages on the site then the menu text goes funny on the site with symbols as above that are not legible.

 

I have tried Jack's and Fatura's contributions.

 

Jack, when I looked at your map on your site the map, sattelite and terrain buttons do not display well on my browser on IE. It displays in Greek on Mozilla.

 

Is this a Google thing and if so, does anyone know a way around this?

 

I would prefer to have a map displaying in both Greek and English and the site to remain in tact.

 

Any help is greatly appreciated.

 

Thanks,

Alexandra

Link to comment
Share on other sites

I've got the latest v2.4 working and instead of putting it the link in the infobox. Is there a way to put the entire easymap.php code into contact_us.php so that when someone goes to the contact us page that it shows the map right above the contact form. I think that would be more appropiate than putting the map somewhere else when it should be within the contact page? TIA, great contrib btw. example.jpg

 

Anyone? I tried and the page looked all hacked up!

Link to comment
Share on other sites

  • 2 weeks later...
  • 3 weeks later...
Okay I have added some basic driving direction capability. I havent yet added any new database fields to support this but I plan on adding a few more to make the whole thing configurable from the admin area.

 

For the time being here's what I have. I am still working some bugs out, and I may wind up changing things around but I'll post the code here now if anyone wants to play with it.

 

Basically, when you first visit the page you get the original easymap component but I added a form on the bottom asking for a start address. When the address is submitted you then get taken to a page showing turn by turn directions and a map with a polyline drawn along the route, as well as zoom/view controls.

 

<?php
/*
 $Id: easymap.php,v 1.1 2005/12/31 by Jack_mcs
 Turn by Turn Driving directions functionality added by Goanna

 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');

 require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_EASYMAP);

 $breadcrumb->add(NAVBAR_TITLE, tep_href_link(FILENAME_EASYMAP));

 $action = (isset($_POST['action']) ? $_POST['action'] : '');
 $line = array();
 $line = explode(",", EM_LINES_COORD);


 $longitude = EM_LONGITUDE;
 $lattitude = EM_LATTITUDE;
 $to = "123 main street washington dc"; //Destination address goes here formatted Street, City, State, Zip (with or without commas). 
 $from = $_POST['fromAddress'];

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
<title><?php echo TITLE; ?></title>
<base href="<?php echo (($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER) . DIR_WS_CATALOG; ?>">
<link rel="stylesheet" type="text/css" href="stylesheet.css">
 <script src="http://maps.google.com/maps?file=api&v=2&key=abcd123456" type="text/javascript"></script>
<?php if ($getdirections == 'true'): ?>

<style type="text/css">
  v\:* {
	behavior:url(#default#VML);
  }
  body {
	font-family: Verdana, Arial, sans serif;
	font-size: 11px;
	margin: 2px;
  }
  table.directions th {
background-color:#EEEEEE;
  }

  img {
	color: #000000;
  }
</style>
<script type="text/javascript">
//<![CDATA[

var map;
var gdir;
var geocoder = null;
var addressMarker;
var trafficInfo = new GTrafficOverlay();

function load() {
  if (GBrowserIsCompatible()) {	  
	map = new GMap2(document.getElementById("map"));

	gdir = new GDirections(map, document.getElementById("directions"));
	GEvent.addListener(gdir, "load", onGDirectionsLoad);
	GEvent.addListener(gdir, "error", handleErrors);

	setDirections("<?php echo $from; ?>", "<?php echo $to; ?>", "en_US");
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	map.addControl(new GScaleControl());
	//map.addOverlay(trafficInfo); //Need to add a button to toggle this on/off before using.
  }
}

function setDirections(fromAddress, toAddress, locale) {
  gdir.load("from: " + fromAddress + " to: " + toAddress,
			{ "locale": locale });
}

function handleErrors(){
   if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
	 alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code);
   else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
	 alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);

   else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
	 alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);

//   else if (gdir.getStatus().code == G_UNAVAILABLE_ADDRESS)  <--- Doc bug... this is either not defined, or Doc is wrong
//	 alert("The geocode for the given address or the route for the given directions query cannot be returned due to legal or contractual reasons.\n Error code: " + gdir.getStatus().code);

   else if (gdir.getStatus().code == G_GEO_BAD_KEY)
	 alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);

   else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
	 alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);

   else alert("An unknown error occurred.");

}

function onGDirectionsLoad(){ 
	  // Use this function to access information about the latest load()
	  // results.

	  // e.g.
  // document.getElementById("getStatus").innerHTML = gdir.getStatus().code;
  // and yada yada yada...
}


//]]>
</script>

<?php else: ?>
	<!-- BOC googlemap //-->
 <style type="text/css">
v\:* {
  behavior:url(#default#VML);
}
</style>
<script type="text/javascript">
//<![CDATA[

function load() {
  if (GBrowserIsCompatible()) {
	var map = new GMap2(document.getElementById("map"));
	map.setCenter(new GLatLng(<?php echo $longitude; ?>, <?php echo $lattitude; ?>), 14);

   <?php if (EM_SHOW_MAP_SIZE == 'true') { 
   if (EM_SHOW_MAP_CONTROLS == 'complete') { ?>
	map.addControl(new GLargeMapControl());
	<?php } ?>
	<?php if (EM_SHOW_MAP_CONTROLS == 'compact') { ?>
	map.addControl(new GSmallMapControl());
	<?php } } ?>

   <?php if (EM_SHOW_MAP_VIEW == 'true') { ?>
   map.addControl(new GMapTypeControl());
   <?php } ?>

//	  map.addControl(new GOverviewMapControl());
	<?php if (EM_SHOW_MAP_VIEW == 'true') { ?>
	map.addControl(new GScaleControl());
	<?php } ?>

	<?php if (EM_SHOW_MAP_COORDINATES == 'true') { ?>
	GEvent.addListener(map, "moveend", function() {
	  var center = map.getCenter();
	  document.getElementById("message").innerHTML = center.toString();
	});
	<?php } ?>


	// Our info window content
	var infoTabs = [
	  new GInfoWindowTab("<?php echo EM_LOCATION_BUBBLE_TITLE; ?>", "<?php echo EM_LOCATION_BUBBLE_CONTENT; ?>")
	  <?php if (EM_SHOW_MAP_TAB == 'true') { ?>,
	  new GInfoWindowTab("<?php echo EM_LOCATION_TAB_TITLE; ?>", "<?php echo EM_LOCATION_TAB_CONTENT; ?>")
	  <?php } ?>
	];

	<?php if (EM_SHOW_MAP_MARKER == 'true') { ?>
	// Place a marker in the center of the map and open the info window
	// automatically
	var marker = new GMarker(map.getCenter());
	map.addOverlay(marker);

	<?php if (EM_LOCATION_MAP_BUBBLE == 'true') { ?>
	marker.openInfoWindowTabsHtml(infoTabs);
	GEvent.addListener(marker, "click", function() {
	  marker.openInfoWindowTabsHtml(infoTabs);
	});
	<?php } } ?>

	<?php if (EM_SHOW_MAP_LINES == 'true') { ?>
	var bounds = map.getBounds();
	var southWest = bounds.getSouthWest();
	var northEast = bounds.getNorthEast();
	var lngSpan = northEast.lng() - southWest.lng();
	var latSpan = northEast.lat() - southWest.lat();

	// Add a polyline with five random points. Sort the points by
	// longitude so that the line does not intersect itself.
	var points = [];

	  points.push(new GLatLng(southWest.lat() + latSpan * <?php echo $line[0]; ?>,
							  southWest.lng() + lngSpan * <?php echo $line[1]; ?>));
	  points.push(new GLatLng(southWest.lat() + latSpan * <?php echo $line[2]; ?>,
							  southWest.lng() + lngSpan * <?php echo $line[3]; ?>));
	  points.push(new GLatLng(southWest.lat() + latSpan * <?php echo $line[4]; ?>,
							  southWest.lng() + lngSpan * <?php echo $line[5]; ?>));
	  points.push(new GLatLng(southWest.lat() + latSpan * <?php echo $line[6]; ?>,
							  southWest.lng() + lngSpan * <?php echo $line[7]; ?>));
	  points.push(new GLatLng(southWest.lat() + latSpan * <?php echo $line[8]; ?>,
							  southWest.lng() + lngSpan * <?php echo $line[9]; ?>));						  

	points.sort(function(p1, p2) {
	  return p1.lng() - p2.lng();
	});
	map.addOverlay(new GPolyline(points));
	<?php } ?>
  }
}

//]]>
</script>
<?php endif; ?>

</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" onload="load()" onunload="GUnload()">

<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->

<!-- body //-->
<table border="0" width="100%" cellspacing="0" cellpadding="0">
 <tr>
  <td class="columnLeft" width="<?php echo COLUMN_LEFT_WIDTH; ?>" valign="top"><table  border="0" width="<?php echo COLUMN_LEFT_WIDTH; ?>" cellspacing="0" cellpadding="0">
<!-- left_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
<!-- left_navigation_eof //-->
</table></td><td background="images/links/shadow_column_left.gif">   </td>
<td><?php echo tep_draw_separator('pixel_trans.gif', COLUMN_SPACER_WIDTH, '1'); ?></td>

<!-- body_text //-->
<?php if ($getdirections == 'true'): ?>
  <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; ?></td>
		  <td class="pageHeading" align="right"><?php echo tep_image(DIR_WS_IMAGES . 'table_background_specials.gif', HEADING_TITLE, 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><table border="0" width="100%" cellspacing="0" cellpadding="2">
		<tr>
		  <td class="main">  
  <div id="map" style="width: 650px; height: 400px"></div>
  <br />
  <span>Formatted Directions</span>
  <div id="directions" style="width: 650px"></div></td>
		</tr>
	  </table></td>
	</tr>
	<tr>
	  <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></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 width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
			  <td align="right"><?php echo '<a href="' . tep_href_link(FILENAME_DEFAULT) . '">' . tep_image_button('button_continue.gif', IMAGE_BUTTON_CONTINUE) . '</a>'; ?></td>
			  <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
			</tr>
		  </table></td>
		</tr>
	  </table></td>
	</tr>
  </table></td>
<?php else: ?> 
  <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; ?></td>
		<td class="pageHeading" align="right"><?php echo tep_image(DIR_WS_IMAGES . 'table_background_specials.gif', HEADING_TITLE, 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>
		<table border="0" width="100%" cellspacing="0" cellpadding="2">
	  <tr>
		<td class="main"><?php echo TEXT_INFORMATION; ?></td>
	  </tr>
	  <?php if (EM_SHOW_MAP_LINES == 'true') { ?>
	   <tr>
		<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
	   </tr>		  
	   <tr>
		<td class="main"><?php echo TEXT_DRIVING_DIRECTIONS; ?></td>
	   </tr>		  
	  <?php } ?>		 
	</table></td>
  </tr>
  <tr>
	<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
  </tr>

  <!-- Start map code //-->
  <tr>
   <td>
<!-- EOC googlemap //-->
<div id="map" style="width: 500px; height: 400px; border: .2em; border-style: ridge; "></div>
	<div id="message"></div>
   </td>
  </tr>

  <!-- BEGIN FORM -->
  <tr>
 <td align="right"><?php echo tep_draw_form('seotips', tep_href_link(FILENAME_EASYMAP, '', 'NONSSL'), 'post', 'onSubmit="return true;" onReset="return true"') . tep_draw_hidden_field('getdirections', 'true'); ?></td>	  </tr>		  
  <tr>
	<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '20'); ?></td>
  </tr>
  <tr> 
   <td width="40%"><table border="1">
	<tr> 
	 <td>Starting Address</td>
	 <td><?php echo tep_draw_input_field('fromAddress', $fromAddress, false); ?> </td>
	</tr>
   </table></td>	 
  </tr>
  <tr> 
   <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '20'); ?></td>
  </tr>   

  <tr>
   <td width="40%"><table border="0">   
	<tr>
	 <td width="45%"> </td>
	 <td><?php echo (tep_image_submit('button_update.gif', IMAGE_UPDATE) ) . ' <a href="' . tep_href_link(FILENAME_EASYMAP, '') .'">' . '</a>'; ?></td>
	</tr>
   </table></td>
  </tr> 
  <tr> 
   <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '20'); ?></td>
  </tr>	  
  </form>
<!-- END FORM --> 
<!-- End Map code //-->

  <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 width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
			<td align="right"><?php echo '<a href="' . tep_href_link(FILENAME_DEFAULT) . '">' . tep_image_button('button_continue.gif', IMAGE_BUTTON_CONTINUE) . '</a>'; ?></td>
			<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
		  </tr>
		</table></td>
	  </tr>
	</table></td>
  </tr>
</table></td>
	  <td class="columnRight"><?php echo tep_draw_separator('pixel_trans.gif', COLUMN_SPACER_WIDTH, '1'); ?></td>
 <td >  </td>
 <?php endif; ?>
<!-- body_text_eof //-->
<td width="<?php echo COLUMN_RIGHT_WIDTH; ?>" valign="top"><table border="0" width="<?php echo COLUMN_RIGHT_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'); ?>

 

If you want to play around with it just overwrite your existing easymap.php file with it and give it a go. It's pretty basic right now but you should be able to modify it. Remember to put your own API key in place.

 

Thank you for your Contrib. I tried to update my page with the changes here to include the form but now I am getting an error stating "Unexpected $end on line ...". Would you please tell me how to fix this. I have moved the <?php $endif ; ?> statement trying to fix it with no success. Thank you for your help with this.

 

Bryan

Link to comment
Share on other sites

  • 2 months later...
  • 3 weeks later...
I can't get this contribution to work. All it shows is a box with nothing in it. I've tried all of the updates. How do I uninstall it?

 

That's because you're looking at the South Pole :) Set your correct long/lat values in the admin area and it will work.

Link to comment
Share on other sites

  • 3 months later...
  • 1 month later...

I installed Jack's latest version.

Jack, is this possible with easymap.php - I would like to add a few different "hiking maps" with the trails (lines) on our website. These hiking maps are in different countries so putting them on one map probably does not work. Or does it ?

 

As always, your input is greatly appreciated.

Link to comment
Share on other sites

You can have different locations but I'm not sure how it will work over countires. It is probably a lot easier with the latest API from google but I haven't updated this contribution since the initial API quite a few years ago. It is planned for an update but that could be another year so don't count on it. I think there is another map contribution, although I don't know anything about it or how well it works.

 

Jack

Support Links:

For Hire: Contact me for anything you need help with for your shop: upgrading, hosting, repairs, code written, etc.

Get the latest versions of my addons

Recommended SEO Addons

Link to comment
Share on other sites

  • 2 months later...

Here is an idea:

 

Wouldn't be great to have a map of the customer's address right on checkout_shipping.php below shipping address?

 

I think customers will feel like wow this people know what they are doing

 

Is it possible to do?

 

Just a thought ;)

 

Ricardo

Link to comment
Share on other sites

The code for the maps uses a non-secure link. If a secure link is available, then the map can be added to the checkout pages. If not, it would create a non-secure error which is not a good idea.

 

Jack

Support Links:

For Hire: Contact me for anything you need help with for your shop: upgrading, hosting, repairs, code written, etc.

Get the latest versions of my addons

Recommended SEO Addons

Link to comment
Share on other sites

The code for the maps uses a non-secure link. If a secure link is available, then the map can be added to the checkout pages. If not, it would create a non-secure error which is not a good idea.

 

Jack

 

 

Thanks Jack, maybe in the future ;)

Link to comment
Share on other sites

  • 2 months later...
  • 11 months later...

You can have different locations but I'm not sure how it will work over countires. It is probably a lot easier with the latest API from google but I haven't updated this contribution since the initial API quite a few years ago. It is planned for an update but that could be another year so don't count on it. I think there is another map contribution, although I don't know anything about it or how well it works.

 

Jack

 

Hi Jack.

I don't know if it's because this contribution is older or not but I tried to sign up for Google Maps and they told me it's 10,000 US even though your contribution mentioned it was free.

Did they start to charge for it or am I doing something wrong ? I am developing a Real Estate site and wanted to embed a map in the product description. look forward to hearing from you.

Cheers

Troi

Link to comment
Share on other sites

  • 2 weeks later...

It is free for Google Map V1.x/V2.x if you do not want to be a Premium user. For Google Map 3.x API, it is no need to have the KEY.

 

Just submitted an V3.1 update to this Add-on Download yesterday. The limitation is ONLY for a small area since the boundary check is missed.

:P

 

Hi Jack.

I don't know if it's because this contribution is older or not but I tried to sign up for Google Maps and they told me it's 10,000 US even though your contribution mentioned it was free.

Did they start to charge for it or am I doing something wrong ? I am developing a Real Estate site and wanted to embed a map in the product description. look forward to hearing from you.

Cheers

Troi

YaNotCook !!

Link to comment
Share on other sites

  • 1 month later...

A new version has been submitted. It is completely rewritten to use googles latest API and to be compatible with all versions of oscommerce, including V 2.3. This version does not require an API key. The installation is quick and setting up the map is easier than my previous versions.

Support Links:

For Hire: Contact me for anything you need help with for your shop: upgrading, hosting, repairs, code written, etc.

Get the latest versions of my addons

Recommended SEO Addons

Link to comment
Share on other sites

Hi Jack,

I've installed the new version and it works just fine (see here).

Wouldn't it be nice and handy to add the map controls like zoom, overview or labels?

Thanks for leting me know. Overview and labels aren't part of the new API. Zoom is and is part of the contribution but can only be set in the admin. I plan to add some controls to the shop side to the customer can adjust those.

Support Links:

For Hire: Contact me for anything you need help with for your shop: upgrading, hosting, repairs, code written, etc.

Get the latest versions of my addons

Recommended SEO Addons

Link to comment
Share on other sites

Hi Jack,

 

This happens when attempting to download the newest version:

 

Not Found

 

The requested URL /contributions/EasyMap_V_3.0.zip was not found on this server.

 

(couldn't find the map? that's a good punchline!)

jk

 

 

Just got a similar message for header tags:

Not Found

 

The requested URL /contributions/HeaderTags_SEO_V_3.2.5.zip was not found on this server.

 

also got the same result when trying to download another file from the Community Add-Ons page

that lists new contributions

 

maybe this affects files uploaded in november? because there was no problem with downloading

v3.2.4 (10-17-2010)

 

jk

Link to comment
Share on other sites

Hi Jack_mcs

There is a problem i cant downlaod your contribution from oscommerece. And is the new version fixed so when you choose show route from address, cause it didnt work before. Thanks alot

That's not an option in this version yet.

Support Links:

For Hire: Contact me for anything you need help with for your shop: upgrading, hosting, repairs, code written, etc.

Get the latest versions of my addons

Recommended SEO Addons

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...