Archive for category Web Design

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.

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • MySpace
  • RSS
  • Slashdot
  • StumbleUpon
  • Technorati
  • Yahoo! Bookmarks
  • Twitter

Tags: , , ,

No Comments

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.

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • MySpace
  • RSS
  • Slashdot
  • StumbleUpon
  • Technorati
  • Yahoo! Bookmarks
  • Twitter

Tags: , , ,

2 Comments

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():

function bannerstats(){

$model = &$this->getModel( ‘Bannerstats’ );

$model->bannerstats();

}

2.

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

<?php

// Create the controller

$controller = new BannersController( array(‘default_task’ => ‘bannerstats’) );

// Perform the Request task

$controller->execute(JRequest::getVar(‘task’, null, ‘bannerstats’, ‘cmd’));

// Redirect if set by the controller

$controller->redirect();

3.

/components/com_banners/models/bannerstats.php

This is a new file containing this code:

<?php

// Check to ensure this file is included in Joomla!

defined(‘_JEXEC’) or die( ‘Restricted access’ );

$document = &JFactory::getDocument();

jimport( ‘joomla.application.component.model’ );

jimport( ‘joomla.application.component.helper’ );

/**

* @package      Joomla

* @subpackage   Banners

*/

class BannersModelBannerstats extends JModel

{

function bannerstats(){

$banneruser = & JFactory::getUser();

$dbgetclient = &$this->getDBO();

echo “<h2>”.$banneruser->name.”‘s Ads</h2>”;

echo “<p>Already a customer? If your ad is about to reach the paid for number of clicks, you can make another payment using this button:</p>”;

echo ‘<form action=”https://www.paypal.com/cgi-bin/webscr” method=”post” target=”_blank”>

<input name=”cmd” value=”_xclick” type=”hidden”>

<input name=”lc” value=”US” type=”hidden”>

<input name=”business” value=”youremail@yourdomain.com” type=”hidden”>

<input name=”pal” value=”4UXZK24C297M6″>

<input name=”item_name” value=”The name for this transaction” type=”hidden”>

<input src=”/images/x-click-but01.gif” name=”submit” alt=”Make payments with PayPal – it\’s fast, free and secure!” border=”0″ type=”image” width=”62″ height=”31″>

<br>

‘;

$dbgetclient = &$this->getDBO();

echo “<h2>Active ads for: “.$banneruser->username.”: </h2>”;

$getclient = “SELECT cid FROM #__bannerclient WHERE contact=’”.$banneruser->username.”‘ LIMIT 1″;

$dbgetclient->setQuery( $getclient );

$getclientresult = $dbgetclient->loadObjectList();

for($i = 0; $i < count($getclientresult); $i++) {

$cid = $getclientresult[$i]->cid;

//echo “cid: “.$cid.”<br />”;

}


$dbgetbanner = &$this->getDBO();

$getbanner = “SELECT * FROM #__banner WHERE cid=”.$cid.”";

$dbgetbanner->setQuery( $getbanner );

$getbannerresult = $dbgetbanner->loadObjectList();

for($i = 0; $i < count($getbannerresult); $i++) {

echo “<img src=’”.JURI::root().”images/banners/”.$getbannerresult[$i]->imageurl.”‘ border=’0′><br />”;

echo ‘URL: ‘.$getbannerresult[$i]->clickurl.’<br />’;

echo ‘Clicks: ‘.$getbannerresult[$i]->clicks.’<br />’;

echo ‘Views: ‘.$getbannerresult[$i]->impmade.’<br />’;

echo ‘CTR (clickthrough rate): ‘.number_format((100*($getbannerresult[$i]->clicks)/($getbannerresult[$i]->impmade)),2).’ %<hr />’;

}

}

}

?>

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.

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • MySpace
  • RSS
  • Slashdot
  • StumbleUpon
  • Technorati
  • Yahoo! Bookmarks
  • Twitter
No Comments

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.

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • MySpace
  • RSS
  • Slashdot
  • StumbleUpon
  • Technorati
  • Yahoo! Bookmarks
  • Twitter

Tags: , , , , , ,

No Comments

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.

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • MySpace
  • RSS
  • Slashdot
  • StumbleUpon
  • Technorati
  • Yahoo! Bookmarks
  • Twitter

Tags: , , ,

2 Comments

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]

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • MySpace
  • RSS
  • Slashdot
  • StumbleUpon
  • Technorati
  • Yahoo! Bookmarks
  • Twitter

Tags: , ,

4 Comments

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!!

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • MySpace
  • RSS
  • Slashdot
  • StumbleUpon
  • Technorati
  • Yahoo! Bookmarks
  • Twitter

Tags: , , , ,

No Comments

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.

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • MySpace
  • RSS
  • Slashdot
  • StumbleUpon
  • Technorati
  • Yahoo! Bookmarks
  • Twitter

Tags: , , , , , , , ,

3 Comments

When companies don’t want you to contact them ..

Ever notice how the bigger the company, the harder it is to contact someone? We all know how hard it can be to reach a live person who also happens to be helpful and knowledgeable. Today I was trying to get some simple HTML code for a Skype status button, and during that process Skype presented a link “Save this HTML snippet” – at http://www.skype.com/intl/en-us/tell-a-friend/get-a-skype-button/save.php. However, that link leads to a 500 Internal Server Error, and if you attempt to access that link directly, it gives a 404 Not Found error. So, being the helpful person that I am, I proceeded to find Skype’s contact link so I could let them know about this bug. There is no such link. I then tried their forum, but it contains no bug reporting area. So I posted it in their Suggestions forum and here, and hope they sort it out.

The irony here is that the bigger companies get, the more you’d expect them to have internal QA processes in place, however if they opened up the floodgates and let just anyone contact them, it would be unmanageable. It would be great if they could rely on regular user feedback for improvements, but I suppose they can’t afford the required staff … but in this case QA missed this one, apparently.

I did finally figure out how to contact them, by logging into Skype.com and then going to Help, Related, Get more help. However, that still offers no mechanism for reporting bugs or other feedback.

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • MySpace
  • RSS
  • Slashdot
  • StumbleUpon
  • Technorati
  • Yahoo! Bookmarks
  • Twitter
No Comments

Recurring payments with Joomla

Say you want to be able to charge customers with recurring payments, say, every month. I have recently been doing quite a bit of work on that front.

Take a look at nBill, CB Subs (from joomlapolis.com),  and JoomSuite Member.
nBill is the most robust one, and features extensive payment gateway support, robust data import/export, etc.
CB Subs is also good, but I think is a bit harder to use, though handy if you want to give customers a “My Bills” tab in their profile. CB Subs is useful mainly for member subscriptions but can also be used for one-off payments.
JoomSuite Member is aimed mainly at member subscriptions and may not suit all uses. It does integrate nicely with other JoomSuite components, which are more user-friendly than CB Subs or nBill.
nBill and JS Member both require IonCube loaders to be loaded into php.ini.
Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • MySpace
  • RSS
  • Slashdot
  • StumbleUpon
  • Technorati
  • Yahoo! Bookmarks
  • Twitter

Tags: , ,

No Comments