Virginia Web Designers: Joomla, Drupal, Open-Source, CSS, and PHP Northern Virginia / Maryland / Washington DC web designers

15Jan/110

Joomla 1.5 Flash Ads with AllV…

Joomla 1.5 Flash Ads with AllVideos Reloaded http://tinyurl.com/6fubx3v

Filed under: Web Design No Comments
15Jan/110

Flash Ads with Joomla’s Banner…

Flash Ads with Joomla’s Banner System http://tinyurl.com/6lxlqbb

Filed under: Web Design No Comments
12Jan/110

just completed: PHUHS Football Booster Club

PHUHS Football Booster Club http://tinyurl.com/6hc79a3

Filed under: Web Design No Comments
11Jan/110

Fixing Itemids for Joomla / K2's tag view

This article is about K2, which works with Joomla.

We created menu items pointing to “generic” tag views. Each tag has its own Itemid, which is fine. However, when you click on “read more” for any of the items on the generic tag page, the ‘read more’ link uses the default K2 Itemid rather than the Itemid of the current page / menu item. This does seem like a bug to me. The read more links should use the Itemids of the current page or at least the menu item that brought the viewer to that ‘read more’ link.

In our case, K2′s default Itemid is 17 (as set in the menu).  We also have a menu item for a tag view, with an Itemid of 37.
The ‘read more’ URLs should have been in this format:

index.php?option=com_k2&view=itemlist&layout=generic&tag=Health%20Care&task=tag&Itemid=37

.. but were showing up as:

index.php?option=com_k2&view=itemlist&layout=generic&tag=Health%20Care&task=tag&Itemid=17

We have written a small override that solved this for us, since I could find no other way to solve this. We dislike core modifications but in this case it seemed to be the only way:

In /components/k2/models/item.php around line 62 (search for “read more link” .. it should be the first one), add this:

//mod to replace K2 Itemid with current page’s Itemid.

if(JRequest::getVar(‘Itemid’) && JRequest::getVar(‘layout’) && (JRequest::getVar(‘layout’) == ‘generic’) && JRequest::getVar(‘task’) && (JRequest::getVar(‘task’) == ‘tag’)){

//MAKE SURE TO CHANGE “Itemid=17″ TO WHATEVER ITEMID YOUR K2 USES:

$link = str_replace(‘Itemid=17′,’Itemid=’.JRequest::getInt(‘Itemid’),$link);

}

//end

Tagged as: , No Comments
5Jan/112

Adding a Joomla Banner Ad (Image or Flash)

If no ad client exists yet, create one: Components > Banner > Clients. Click New, add the requested details, and Save.

  1. Click Banners, or go to Components > Banner > Banners.
  2. Upload the banner image or Flash swf to /public_html/images/banners.
  3. At this point you can create a new banner from scratch (New), or select an existing one and Copy it. When copying, make sure to edit the banner’s settings to associate it with the correct client, and enable it (set Show Banner to Yes). Set the URL and other settings. Select the image/SWF from the pull-down menu (Banner Image Selector). You don’t need to set width and height.
  4. If using Flash, add Custom Banner Code as follows:{flashad width=”300″ height=”250″}where_is_prg_large_rect4_7-19-10.swf{/flashad}The file name should match a file in /public_html/images/banners, and the dimensions need to match the Flash file’s actual dimensions.

    *** This method requires AllVideos Reloaded, and relies on a custom tag defined in Components > AllVideos Reloaded > Manage Tags / Presets. For iPad users and others requiring HTML5 instead of Flash, we will need to update the associated video player to support both HTML5 and Flash (see my other email about HTML5); stay tuned for details on how to do that.

    The Flash file contains a blank Button with a Hit area (4th frame inside the Button) covering the entire movie,  which links to the banner ad’s unique ID, so that clicking the Flash ad will still track the click. The Button has this ActionScript code attached to it (hit F9 in Flash to view the code):

    on(press){
    getURL(“http://www.yoursite.com/index.php?option=com_banners&task=click&bid=9″, “_blank”);
    }

    .. where bid = this banner’s ID. You should save the banner, and then you can find its ID in the right column of Components > Banner > Banners.

    I have attached a sample Flash file (FLA).

29Dec/100

Update your Facebook status with Twitter

A very handy feature of Facebook and Twitter is the ability to link the two, so that when you post a tweet, it will automatically get posted to Facebook too.

Here’s how:

  1. Sign up for Twitter and Facebooks accounts (in case you’ve been living under a rock the past decade).
  2. Log in to your Facebook account and then visit http://apps.facebook.com/twitter/. It will walk you through the setup.

If you use or are considering using Joomla, check out Autotweet NG, which can send a tweet every time a Joomla article or K2 item is added. We have used this with K2, and the only complaint / bug worth mentioning is that copying a K2 item does not seem to create a tweet .. you have to create a NEW item and save it. Autotweet NG also offers a commercial version which has some pretty advanced Facebook integration (including posting images from K2), but if you just want text, the Facebook Twitter app will probably be just fine.

WordPress also offers a number of plugins that can send a tweet upon for each new post, or that can display your Twitter status as a widget. We use Twitter Tools.

28Dec/102

Joomla / K2; disabling modal image popups on some items

We are in the middle of designing a new version of plethoradesign.com using Joomla and K2. Most images in our web design portfolio have a large version that can be clicked and enlarged, but in some cases this was not desirable; for example for logos. There was no way to turn off this feature (not easily anyway), so it was time to add this option to K2.

Thanks to a post over at the K2 Forums, we customized our K2 installation so it is now possible to turn off the popup modal link on an item-by-item basis.

Download: k2-item-image-link-option.zip

Changed files;
administrator/com_k2/models/item.xml
components/com_k2/templates/default/item.php

The code in item.php is set up so items will show popup links on images by default, but if the item options have been set to disable the popup, it will not be linked.

Filed under: Sundry 2 Comments
22Dec/100

Conditional CSS and ASP.net themes

ASP.net themes will be default load every CSS file found inside /App_Themes/your_theme/. If you have an IE7-only CSS file in there, that too will be loaded by default. That defeats the purpose, obviously.

There are some programmatic ways of excluding sub-folders or specific files, but they are complicated, and I don’t think it should be that complicated to achieve conditional CSS. The irony is that what follows is a workaround to achieve conditional CSS using Microsoft technology, and the only reason this is needed is because Internet Explorer 6, 7, and 8 do not render pages quite according to standards (though IE8 is much, much better than the previous two). I think it’s funny that we have to use a workaround JUST to be able to render pages appropriately in Microsoft’s own browsers, using ASP.net themes.

The solution is pretty simple; don’t use the “.css” file extension. You can rename your CSS file from “ie7.css” to “ie7.css.conditional” or “ie7.css.whatever”.
Then, include it into your master page;

The above assumes the use of dynamic themes, hence the use of Page.Theme.

20Dec/100

Downgrading from SQL Server 2008 to Express

Ever needed to downgrade from SQL Server 2008 to SQL Server 2008 Express, but ran into problems, such as application framework authentication (aspnet) problems? Try this simple fix; delete the files/folders from C:\Users\{YourUserName}\AppData\Local\Microsoft\Microsoft SQL Server Data.

This may also helps those upgrading from Express to the full-fledged SQL server. This trick was the only thing that worked for me after many hours of debugging.

I hope it helps someone!

17Dec/100

E-commerce and “just-in-time” shipping

I recently ordered something from Barnes and Noble’s site, only to be notified the item was not available and I would have to wait. So I did. I was then notified I would need to wait another 30 days (I was given the option to cancel). I opted to wait, because it’s a somewhat rare item and BN carries it a significant discount.

I’m glad they provided the option to cancel, but what is the point of ordering online when I may have to wait up to a month and who knows, longer?

Clearly BN either does not track how many items they have in stock, or they do not care, and will try to fulfill the order once they have collected payment. This follows the philosophy of “money now is always better than money later” – which I would tend to agree with, but it’s not good when this alienates customers. A 30-day wait during the holiday season is unacceptable! In my case it was for a birthday, which has already passed.

JIT (Just-in-time) is great and has worked well for Toyota, but the customer should not be forgotten in all of this.

Tagged as: No Comments
15Dec/100

Joomla 1.6 RC1 Now Available

Joomla has finally announced the first release candidate of Joomla 1.6. The final release is due January 11, 2011, with no current plans for a second release candidate. So, the end (of 1.5) is near!

Filed under: Sundry No Comments
19Nov/100

ASP.net MenuItem mouseovers? Not so fast ..

I had some ASP.net 4.0 Hyperlinks and Images and tried converting them to MenuItems, but it’s not possible to set a mouseover without some REALLY clunky workarounds (see here .. and other examples as well). Also, you can’t assign an ID to a MenuItem, nor a class, so you can’t do it with CSS either. Well, you could (using CSS’s nth-child selector) … but not cross-browser. I’m a bit baffled that the MenuItems don’t take an ID, CSS class, OR mouseover easily!! It’s a very common requirement or at least a commonly used design feature / effect, and ASP.net’s been around long enough to have added this at some point!

Maybe I’m missing something obvious here .. ?

Also, since I was using images for the menu items, I needed to hide the text. I managed to hide the text from the menu items, keeping only the image. But when you edit the menu, you can no longer see the menu item names, so you may get lost when trying to edit the menu items. It isn’t ideal, especially if you need to hand the project off to a customer who wants to edit the menu on their own. Again … why the lack of elegance when .net can do so many great things otherwise? There should be a simple option to hide the text.

Tagged as: No Comments
12Nov/101

Stop Skype plugin from messing up your phone numbers!

Ever see a phone number get all messed up by the Skype plugin for Firefox and Internet Explorer? It’s annoying. You’re thinking “I’ll just add this phone number, save the page / module / block / whatever” and be done with it, but you’d be wrong. Many Skype users unwittingly see many phone numbers displayed as clickable Skype links that let them place a call directly to that number.

You can stop this from happening in a couple ways:

  • You could make the phone number a graphic
  • Insert some hidden code into the phone number that prevents the Skype plugin from detecting it as a phone number.

Example

Before:

Phone: (555) 123-4567

After:

Phone: (555)<span style="display: none;">.</span> 123-4567

The hidden period is enough to stop the Skype plugin from workings its magic / evil. This technique was tested using Joomla but will work anywhere.

Filed under: Sundry 1 Comment
12Oct/100

EventList Twitter now supports Bit.ly

Twitter is taking its sweet time rolling out their t.co URL shortening, so I added bit.ly support to our Joomla EventList Twitter status plugin (more details).

Filed under: Sundry No Comments
8Oct/100

Phoca Download CB Plugin

A Community Builder plugin for Joomla 1.5 that displays a user’s files. If the user is viewing his/her own profile, the user can also delete the file from the frontend, which is not yet supported officially by Phoca Download itself!  Download it here

Filed under: Sundry No Comments
12Sep/100

EventList Twitter Plugin Updated

Twitter has switched to oAuth authentication, meaning that instead of the plugin using your login and password, it will use a series of keys and secret words. It also means the old versions of the plugin will no longer work. Users should uninstall the previous version (making a note of their settings), and install the new version. Get the new 1.6 version here. (plugin version 1.6, for Joomla 1.5 … not Joomla 1.6 which is still in beta!!).

Filed under: Joomla No Comments
11Jul/100

Easy tab highlighting with included PHP menu

I recently reworked a simple PHP site that uses standalone PHP files containing only HTML. We needed to redesign the navigation bar, which was simple a series of clickable images. These files were not generated by a Dreamweaver template or anything like that, meaning that we would have had to manually change each file every time there was a change to the menu. That seemed very annoying to me, so I created a file called navbar.php and included it into all the pages, using the standard PHP include;

<?php include(‘navbar.php’);?>

The tabs are highlighted for the current page, so if you are on “About Us”, the About Us tab should be highlighted. To accomplish this, I wrote a simple function;

<?php
function isactive($filename){
$urlfilename = basename($_SERVER['SCRIPT_FILENAME']);
if($filename == $urlfilename){
echo “-hover”;
}
}
?>

A sample navigation tab would then look like this;

<a href=”consulting.php”><img src=”images/navbar-consulting<?php isactive(‘consulting.php’);?>.gif” name=”consulting” width=”104″ height=”35″ border=”0″ id=”consulting” onmouseover=”MM_swapImage(‘consulting’,”,’images/navbar-consulting-hover.gif’,1)” onmouseout=”MM_swapImgRestore()” /></a>

That simply uses the function to tell it which file name to match to the current page’s file name:

isactive(‘consulting.php’);

The end result is that on consulting.php, the HTML output for that tab would look like this:

<a href=”consulting.php”><img src=”images/navbar-consulting-hover.gif” name=”consulting” width=”104″ height=”35″ border=”0″ id=”consulting” onmouseover=”MM_swapImage(‘consulting’,”,’images/navbar-consulting-hover.gif’,1)” onmouseout=”MM_swapImgRestore()” /></a>

.. and that is done automatically using a single included file.


Filed under: Sundry No Comments
6Jul/100

please vote for EXIHT in Afric…

please vote for EXIHT in Africa.. an anti human trafficking nonprofit. Your vote will help with their funding: http://bit.ly/d3p5Ip

Filed under: Sundry No Comments
30Jun/100

Email Links vs. web-based e-mail clients

Take a look at http://www.lunarpages.com/sales-questions/. Their “Send us your question” button is nice … but they really ought to list the email address on the page too. Clicking it will launch your default e-mail program, even if you don’t use one. For many people that means it will try to open Windows Mail, Outlook, or Thunderbird, even if they only use Gmail or Hotmail.

Not everyone uses Outlook, Thunderbird, etc (e-mail clients), and assuming that can cost you potential leads and business.

Someone who uses only web-based e-mail will want to be able to quickly copy and paste the e-mail address. Now, you can of course right-click and copy the link address, but then you still have to remove the “mailto:” part. Why put your visitors through so much unnecessary trouble if you really want them to contact you?

There are some valid concerns about attracting spam, but those can be mostly overcome using JavaScript cloaking. I think it would be preferable to receive some spam AND more e-mails from your site visitors, than it would be to receive less spam and fewer e-mails from your site visitors, but maybe it’s just me.

28Jun/100

Using MySQL to insert missing text depending on field length

Suppose you have a MySQL database table containing US 5-digit zip codes, except some of them are just three or four digits long because they had leading zeros, and those sometimes get dropped. Here’s how to add them back in;

For 3-digit zip codes:

UPDATE zipcodes SET zip = CONCAT(’00′, zip) WHERE LENGTH(zip) = 3

This will turn ’123′ into ’00123′.

For 4-digit zip codes:

UPDATE zipcodes SET zip = CONCAT(’0′, zip) WHERE LENGTH(zip) = 4

This will turn ’1234′ into ’01234′.

Filed under: Sundry No Comments
25Jun/100

Impressions of Joomla 1.6 Beta 3

Well, Joomla came out with another 1.6 beta, and it has certainly come a long way. I remember testing a 1.6 beta two years ago. Here are some highlights;

Access Level Control (ACL)

It now features a robust ACL system, though some of the inheritance rules will take some getting used to. This is often cited as a feature Drupal has and Joomla lacks, but soon enough that will be a moot point. From my understanding there will be just one more beta in about two weeks, and then it should be time for 1.6!

Nested categories

Joomla always suffered from a rigid approach to categorization, with Sections and Categories. A section could contain categories, but there could be no sub-categories. This long-running annoyance has finally been been vanquished with Joomla 1.6. It uses only categories (no more sections!), and they can be nested as deeply as you want. I’m sure at some point someone will nest a category 666 levels down, and run into a terrible bug there … but in theory it should be fine, because a category would simply be assigned to a parent category .. the number of sub-levels should have no bearing on it.

Drupal has of course supported nested categories for a long time, where they are called Taxonomy. I think Drupal’s Taxonomy is still more advanced than Joomla 1.6′s category system, but for many, perhaps most users, just having nested categories is en0ugh. Those who want to do more advance PHP magic will naturally be more inclined towards Drupal anyway, and to words like Taxonomy.

The elimination of Joomla’s sections does mean that template code that relies on section IDs will have to be changed to be 1.6-compatible. It will have to check for category IDs instead. It also opens up an interesting possibility of (for example) using a database query to select only those categories that are nested within the current category. That could come in handy in displaying category ‘blogs’ or headlines in a more automated fashion than creating menu links. And speaking of menu links;

Menu Management

Joomla’s menu management has gotten very slick;

  • Changing the menu type is now faster.
  • Much more control over the menu items: meta data, page titles, robot rules, page class styling,  menu link title & CSS attributes.
  • Module assignment from a menu item. You can still assign modules to menu items, but now you can also do this from the menu item itself, rather than having to edit the module separately.
  • Batch processing multiple menu items
  • Language filtering; show your menu item only for certain languages, or for all of them. Would be nice if you could select several languages and hide it on others, but that may be coming.
  • Set template style

Redirect manager

Joomla 1.6 has a new component for managing URL redirects. Presumably this writes to the .htaccess file and created a 301 redirect.

Banner Manager

This is not too different from the 1.5 version, but features “Tracks”, which tracks clicks and impressions in date-filterable and CSV-exportable fashion. Finally we will be able to do some more robust reporting.

I am however baffled that banner clients still have no way to log in and view their banner’s statistics. I think most clients would want that, and offering that ability will help site owners gain more advertisers.

I wrote a Joomla 1.5 hack that got around this by using the “alias” field of the banner client to hold a username. That allows us to associate a banner client with a username, and then we can use that to display banner statistics to a given Joomla user (and only that user). Looks like I will have to port that hack to 1.6. Sigh.

24Jun/103

loving @freshbooks for my invo…

loving @freshbooks for my invoicing. http://bit.ly/aGjNTp

Filed under: Sundry 3 Comments
22Jun/101

Client login for Joomla 1.5 banner component

For the longest time I have been frustrated that the standard banner component doesn’t let banner clients login and view theirbanner statistics. I had been using OpenX but it is a resource hog and is really overkill when all I want is to be able to show a client how many clicks they’ve had so far. I don’t want them to just take my word for it.

Well, after trying out various solutions besides OpenX, I thought to myself 2 hours ago, “why can’t I just use Contact field in thebanner client area and enter a Joomla username, and then write a custom model for com_banners to display the statistics if the current Joomla user is the same as the one listed as the contact for a client?”

So that’s what I did. It is actually two queries. #1 checks the current username and selects all clients with that username (should be just one .. I limited it to one in the query), and selects the correct cid (client id). #2 selects all active banners for a given cid and spits them out, showing the banner, clicks, impressions, and CTR. I also added in some custom HTML to display a PayPal button … ideally this should be done in a View, not a Model, but the Banners component doesn’t seem to follow the MVC structure 100% so I didn’t either.

I did have to modify a few other files. Here are my modifications – this is on Joomla 1.5.18 but should work for any 1.5 release.

It’s as easy as 1-2-3;

1.

/components/com_banners/controller.php:

Add this after the end of function click():

2.

/components/com_banners/bannerstats.php
This is a new file – containing this code:

3.

/components/com_banners/models/bannerstats.php

This is a new file containing this code:

You can then create a link in the User Menu pointing to index.php?option=com_banners&amp;task=bannerstats.

It will detect the current logged-in user’s username, check the “contact” field of the banner clients, and select the active banners for that client. Needless to say, the contact field should contain that person’s username and nothing else, or it will not work.

In the future maybe there can be a special field allowing us to choose a username or enter one, instead of using the Contact field which is not really meant for that. I had considered making this a separate component, but it is really something I would like to see become part of the regular com_banners component.

Feedback is welcome – as far as I can tell this is secure and works, but others may have a better idea about that.

16Jun/100

Freshbooks and time management

FreshBooks is a great tool for managing and monitoring time spent on projects. That helps make you more efficient and profitable. We have been using it for nearly two months, and it has worked wonders for us in terms of time tracking and invoicing. We highly recommend it.

It’s a wonderful invoicing tool, offering smooth integration with Basecamp, online payment for your customers, and even snail mail for those times you need to mail an invoice the old-fashioned way. Using Authorize.net you can also set up recurring payments.

16Jun/100

Monitoring Joomla for file changes

It is often desirable to monitor a site for file changes, so that you can be alerted to unwanted file changes. Those could indicate hacker activity. There is server-side software that can do this for sites, but since our focus is Joomla, we wanted to take a moment to recommend the Eyesite component: http://extensions.lesarbresdesign.info/eyesite. To get the most out of this, you will need to set up a cron job so that it will email you whenever there are outstanding file changes.

Filed under: Sundry No Comments
1Jun/100

Find Joomla section ID for article or category

Sometimes when coding a Joomla template it may be handy to know the section ID of the article or category the user is viewing.

Here is some PHP code you could insert in your template to achieve this (for Joomla 1.5);

$db =& JFactory::getDBO();
if(JRequest::getVar(‘view’)==’article’){
$query = “SELECT sectionid FROM #__content WHERE id=’”.JRequest::getVar(‘id’).”‘”;
$db->setQuery($query);
$sectionid = $db->loadResult();
}
if(JRequest::getVar(‘view’)==’category’){
$query = “SELECT sectionid FROM #__content WHERE catid=’”.JRequest::getVar(‘id’).”‘”;
$db->setQuery($query);
$sectionid = $db->loadResult();
}

Using this, you could for example control which graphics or CSS file are loaded depending on the section of the article/category.

Filed under: Sundry No Comments
26May/100

Google Chrome incorrectly reporting “mixed content” on SSL-encrypted pages

Chrome will show a green icon the left of a URL that is SSL-encrypted and does not use “mixed content”. In other words, a page that displays only secure content over an HTTPS connection. That’s great, and increases user trust. However, if the site contains 20 pages and one of them contains an external non-HTTPS JavaScript file, Chrome will display a red “skull and bones” icon to the left of the URL bar, and that icon will remain displayed next to that site’s URLs for that visitor until they close Chrome.

For example, Skype offers a status button to display a user’s Skype status. That relies on a JavaScript file that resides on Skype’s servers and is only available over an HTTP connection. So, to use this on an all-SSL site, you’d probably need to put it inside an iframe.

I suppose Chrome’s developers might think that if one page on a site contains such content, they’d better keep warning the user about other pages on that site too, even though the other pages do not contain mixed content. I would prefer tit actually be accurate.

19May/102

www subdomains (or lack thereof)

Why do some major sites not have working www subdomains? For example, a domain registrar I have used in the past, ziggle.com, is not accessible from www.ziggle.com. This seems like a mistake to me, but maybe they have their reasons. I came across another example of this a few days ago but can’t remember which site it was. If the DNS is set up right and the .htaccess file contains the following (if using Apache), there should be no problem;

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.theirsite\.com[NC]
RewriteRule ^(.*)$ http://www.theirsite.com/$1 [R=301,L]

19May/102

Migrating from FrontPage to Joomla

I know what you’re thinking: “are there really still people using FrontPage?” – and the answer is yes. Many hosting companies still offer the FrontPage extensions, and because it is Microsoft software, many people still feel more in their comfort zone with this than with some browser-based content management system like Drupal, Joomla, or WordPress. Actually, Joomla is the only one of those three that is actually a CMS. Drupal’s a framework that can be made into the vision of its creators, but requires more up-front work to get it to that point. For more complex sites it would be worth it though. WordPress is a blogging platform that *can* be used as a CMS, and though it may be a bit of extra work for developers, the fact that many users are now familiar with its interface means an uptick in this trend. More people seem to be using WordPress for content management and not just pure blogging these days. WordPress MU (multi user) together with BuddyPress can be especially powerful for social blogging and interaction.

Migrating a FrontPage site to Joomla

I recently migrated a site from FrontPage to Joomla. I used a very fancy migration tool called Copy & Paste. The site had only a handful of pages so this was no big deal. It just meant saving the graphics to Joomla’s images/stories folder, though even that can often be avoided.

The new Joomla site is not yet live, but I have already turned on SEF (search engine friendly) URLs, which entails an .htaccess file as provided by Joomla. The problem is, FrontPage also uses .htaccess, and whenever you update the FrontPage login credentials, it overwrites the file, rather than updating it and leaving the Joomla parts intact. This means that each time the FrontPage credentials are updated, the Joomla parts have to be added back in. The thing is, with cPanel you can add redirects to htaccess and it will not remove anything from the file. Apparently FrontPage is not capable of this, and takes a more crude approach of simple overwriting the whole thing. It is a minor nuisance, and I suppose I could just wait until the site actually goes live to do the final updates on the file!!

18May/102

Basecamp for time tracking, FreshBooks for invoicing

Basecamp is a great tool for managing projects, clients, and keeping track of time.

FreshBooks is a wonderful invoicing tool, offering smooth integration with Basecamp, online payment for your customers, and even snail mail for those times you need to mail an invoice the old-fashioned way. Using Authorize.net you can also set up recurring payments.

You can track time within Basecamp if you go with their Plus plan or higher, or you can track time in FreshBooks itself. If you use Basecamp, there are great extras such as  Project Recon for time tracking (with a timer). FreshBooks itself also offers stopwatch-style timers.

If you track your time in Basecamp, as I do, you can easily synchronize that with FreshBooks. In Basecamp you simply enter tasks in a to-do list and then log time by clicking on the little clock icon. You have to type in the time spent, i.e. “3.75″ or “3:45″. This is a slight nuisance, which can be alleviated by using Project Recon’s stopwatch approach.  I have noticed that the time log entries in Basecamp need to contain a meaningful description, which seems like extra work for  no good reason, when there’s already a to-do item that should contain descriptive text.

When adding time for a to-do, I don’t want to have to enter a Description. The Description should default to whatever the text for the To-do is. I am using Freshbooks, and if I simply import the time without adding a description to the time entry in Basecamp, the invoice line items in Freshbooks look like this:

[Some Project 05/18/10]

The Basecamp people (37signals) let me know they will take my suggestion into consideration, but until then the name of the game is to copy and paste the to-do text into the time log entry’s description … an unnecessary pain, I would think. I do hope they fix it.