April 11, 2010

It’s official. Google now considers your website speed as one of the many parameters in its search ranking algorithms. Per Google, faster sites make for happier users, so they’ve decided to make the Internet a better place by encouraging faster sites.

“So what does that mean to me?”, you ask.

How Site Speed Affects Google Page Rank

Well, you probably don’t have to panic. According to Google, less than 1% of websites out there are affected by their recent change. Relevance is still the most important factor in page ranking. This includes content, keywords, back-links, and the rest of the traditional SEO factors.

But what it does mean is that for any two sites being equal in these, Google will now give advantage to the faster loading site. In a game where every advantage counts, don’t neglect your site speed.

Factors in Site Speed

There are many factors that can affect site speed. Your host is usually the prime suspect.

  • Hosting on over-subscribed web servers or ISPs with slow Internet connections can seriously impact the performance of your site.
  • Cheaping out on your hosting by selecting a shared hosting solution when you should get a dedicated server
  • That being said, in many cases the host is performing up to spec and may be choking on problems with the underlying website code. There are many other factors that can impact page load times:

  • Poorly coded HTML – errors in the html can slow rendering times
  • Poorly structured HTML – how the page elements are loaded can severely impact the speed that relevant information is presented to the user
  • CSS reference errors – timeouts for missing images really impact site speed
  • Flash – well, maybe it’s not only Apple taking a shot at Adobe these days, but one sure way to slow down your page load time is to use Flash
  • Javascript – so you’re smart enough to use Javascript, but you can really improve page performance by improving how you load the Javascript libraries

Site Speed and eCommerce

There’s so much more going on under the hood of an eCommerce site than the typical website. Site performance is already a key factor in product conversion. Current shoppers are already expecting page load times of less than 2 seconds. Now page load speeds will not only have an impact on conversions, but it could start to affect your site traffic if you start to drop rankings compared to other merchants with better performing websites.

If you’re using Magento, check out our Magento Optimization blog post.

What Can I Do to Improve Site Speed

There are many things that can be done. If you want to see you your site is performing, the first thing you need to do is measure it empirically. There are several tools out there that can help you with this.

Once you know how your site is performing it’s just a matter of cleaning up the areas that are negatively affecting your site speed.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • LinkedIn
  • Technorati
  • Slashdot
  • Yahoo! Buzz
  • Google Bookmarks
  • Ping.fm
  • Reddit
  • StumbleUpon
  • Suggest to Techmeme via Twitter
  • Twitter
February 3, 2010

Hybrid Forge is pleased to announce that our solution to the City of Edmonton’s Leveraging Technical Expertise Locally (LTEL) Pilot Project was chosen as the best among 14 competing applicants. The city solicited proposals for an innovative solution to replace the Edmonton Transit Systems’ (ETS) lost-and-found management system. The city partnered with TEC Edmonton to develop this initiative to gain access to new technologies and products that haven’t been realized previously.

“This is an excellent opportunity for us, and we are excited about forging relationships with the City of Edmonton and TEC Edmonton” says Geoff Kliza, President of Hybrid Forge. “Our goal is to integrate business systems with emerging web trends such as social networking to provide a closer relationship between our clients and their customers.”

The solution proposed by Hybrid Forge encompasses a web-based application built using the Hybrid Forge BaseModel MVC framework. The BaseModel MVC framework provides the foundation for building user-friendly data-driven applications while providing key productivity improving features such as simplified inventory search, enhanced reporting and user authentication via enterprise directory. Novel features of the proposed lost-and-found application include barcode-scanning support and an API for integration with social networking sites like Twitter and FaceBook.

Link to the Press Release on the Edmonton of City Website

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • LinkedIn
  • Technorati
  • Slashdot
  • Yahoo! Buzz
  • Google Bookmarks
  • Ping.fm
  • Reddit
  • StumbleUpon
  • Suggest to Techmeme via Twitter
  • Twitter
January 5, 2010

In their new book Inbound Marketing, CEO of HubSpot Brian Halligan, and CTO of Hubspot and creator of onstartups.com Dharmesh Shah spend a couple of chapters describing the need to create “remarkable” value propositions and content. Remarkable ideas and content are ones that would be unique and worthy of remarks and comments from other people. This could be the way you differentiate your products and services, blog about compelling topics, or Twitter about the things your dad says. I think this is entirely true if you want to dominate a market niche, but not everyone has a product like the iPod, expert knowledge like Guy Kawasaki, or a funny dad like Justin Halpern.

So for the other 99.999% of the website owners out there, following the advice of Brian and Dharmesh and many of the Inbound Marketing tactics they suggest will still pay in dividends. Here’s a quick look at why some of the tactics they describe are winners, even without remarkable content.

1. Content is King

OK, the best thing to do is to write a blog post that goes viral. Not everyone is that compelling. Simply generate a regular blog relating to your products and services. That gives the search engines a reason to keep crawling your site, and let’s you try new keywords and SEO tactics without changing your website. You can also experiment with video, conduct a webinar, release a whitepaper. These give people reasons to link to your site, which improves your status with the search engines.

2. Engage Your Customer Base

Brian and Dharmesh suggest using social media to essentially hang out with your customer base online and engage them through the social medium. What a great way to get some primary research done: talk directly with the people who you want as customers. Engage them with your blog, participate in discussion groups, or provide answers to their posted questions. Find every way possible to give them a voice and show them you’re listening.

3. Follow the Industry Buzz

Use tools like Google Alerts, RSS, Twitter hash searches, and email subscriptions to have relevant posts pushed to you daily. Even if you just consume the information and don’t contribute it’s a fantastic way to understand trends and attitudes in your space and to stay on top of your competitors.

4. Raise Brand Awareness

You can pay to put your banner ad on industry-related discussion sites, or you can get your logo in there for free by engaging in forum discussions and commenting on blog posts. Sure you may not get much link juice from it, but marketing is still an associative game. If people see your brand everywhere they look for information on a topic, they might seek you out directly. Just make sure what you say doesn’t damage your brand.

5. Inbound Marketing is a Virtuous Circle

Inbound marketing is about bringing together a suite of tactics that compliment one another to increase the effectiveness of the whole strategy. It goes beyond keywords, back-links, and press-releases to leverage the powerful communications capability of the Internet and social media to connect with people at a personal level. The more you connect to people online, the more you’ll be found, and the more connections you can make. It doesn’t have to be viral to be successful.

Inbound Marketing employs a number of very useful tactics to get the story of your brand deeper into the marketplace in a way that both search engines and humans can use. Having remarkable content can achieve the goals much more quickly, but you can still take advantage of these tactics to connect with customers, keep on top of industry buzz and generate brand awareness. Don’t wait for your remarkable inspiration to get started.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • LinkedIn
  • Technorati
  • Slashdot
  • Yahoo! Buzz
  • Google Bookmarks
  • Ping.fm
  • Reddit
  • StumbleUpon
  • Suggest to Techmeme via Twitter
  • Twitter
September 30, 2009

More often than we thought we’re receiving inquiries from clients regarding a Magento deployment that is not performing to the level they expected. In this business the responsiveness of a client’s website is extremely important. If the browsing experience is lousy potential customers are going to move on to a competitor.

The single most effective configuration item for enhancing the performance of Magento is moneyCrucial Hosting

If the site is intolerably slow potential shoppers will go back to the Google and pick the next vendor in the list for the product they are looking for. Typically, clients with the most challenging of these performance issues clients end up contacting the team Hybrid Forge for an assessment and a resolution. Since the Magento eCommerce platform is based on the MVC brilliance of the Zend Framework we know that its extremely flexible and powerful. However, with great power comes great responsibilities. In the rush to re-platform an existing eCommerce package such as ZenCart, osCommerce, AspDotNetStoreFront, etc to Magento we’ve seen some absolutely tragic hacks of this framework.

Some of the more disconcerting examples are modified files in the /app/code/core (broken upgrade), completely copied default design directories with only one or two modified files and modifications pinned to specific database version (pre-1.2.1). Let’s get this straight – the learning curve is steep and perilous and you’ll get what you pay for if you choose a firm with little verifiable experience. While assessing and resolving these challenges is good for our business I think we all agree the world be would be a better place if we could avoid Magento missteps in the first place. The work isn’t done when the software is launched either. There are a number of logging tables that will grow unchecked less you perform regular maintenance on the database. The latest culprit we encountered in a recent audit is the “report_event” table. This particular Magento deployment had been running for a few months and collected well over a 150,000 records in the “report_event” table. By truncating this table we immediately realized a 500% improvement in php page execution time. Let me say that again, by truncating this single table we reduced page load time by 5X!

The recent Magento Enterprise Whitepaper contains some very useful configuration insight. If you haven’t read it yet download the Magento Enterprise Edition Whitepaper on Methods and Best Practices for High Performance eCommerce today.

The processes Hybrid Forge has developed for deploying, maintaining and evaluating Magento installations is constantly evolving because Hybrid Forge subscribes to a philosophy of continuous improvement. However, there many common elements to each and every deployment and this post serves as a abridged guide to some of the key technical elements gathered from both personal experience as well as fellow Magento authorities.

Abridged Magento Linux Installation and Optimization

We tend to deploy Magento on Centos 5.3 running Apache 2.2.x, PHP 5.2.x and Mysql 5.x. One of the first tricks is that PHP 5.2 is not available in the standard yum repositories. In order to install PHP 5.2 you’ll need to download and install the remi repositories via rpm:

  1. wget http://download.fedora.redhat.com/pub/epel/5/i386/
    epel-release-5-3.noarch.rpm
  2. wget http://rpms.famillecollet.com/el5.i386/
    remi-release-5-7.el5.remi.noarch.rpm
  3. rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm

Now download PHP 5.2 – don’t get tempted by the 5.3.x release of PHP. Magento, as of this post is not compatible with PHP 5.3 so save yourself the grief of rolling back the PHP version and just say no (for now).

  1. yum –enablerepo=remi install php-common-5.2.10-1.el5.remi
  2. yum —enablerepo=remi install php-5.2.10-1.el5.remi
  3. yum install gd gd-devel
  4. yum –enablerepo=remi install php-mcrypt-5.2.10-1.el5.remi
    php-xml-5.2.10-1.el5.remi php-devel-5.2.10-1.el5.remi
    php-imap-5.2.10-1.el5.remi php-soap-5.2.10-1.el5.remi
    php-mbstring-5.2.10-1.el5.remi php-mysql-5.2.10-1.el5.remi
  5. yum –enablerepo=remi install php-mhash-5.2.10-1.el5.remi
    php-gd-5.2.10-1.el5.remi

Install APC (Alternative PHP Cache)

  1. yum –enablerepo=remi install php-pear php-devel-5.2.10-1.el5.remi httpd-devel
  2. pear install pecl/apc
  3. echo extension=apc.so > /etc/php.d/apc.ini

Now open the /etc/php.d/apc.ini and consider adding the following:

  1. apc.enabled = 1
  2. apc.shm_size = 128
  3. apc.include_once_override = 1
  4. apc.mmap_file_mask = /tmp/apc.XXXXXX

One more setting to consider and that’s:

  1. apc.stat = 0

If stat is disabled APC will NOT check for updated versions of PHP files automatically. Apache must be restarted to check for PHP file changes. It is useful in production servers where PHP code is not changed frequently and offers an increase in performance.

Apache Configuration

The Mozilla Firefox Firebug Net tab and the add-on Y-Slow will reveal if apache is configured to both compress files and send expiry details to visiting browsers.

Enable Apache Content Expiration

Locate your httpd.conf and adding the following section. Feel free to modify the expiration lengths if that’s not consistent with your front-end update strategy. Pay particular attention to the .css file expiration.

  1. <IfModule mod_expires.c>
  2. ExpiresActive on
  3. ExpiresByType image/gif “access plus 1 month”
  4. ExpiresByType image/jpeg “access plus 1 month”
  5. ExpiresByType image/jpg “access plus 1 month”
  6. ExpiresByType image/png “access plus 1 month”
  7. ExpiresByType text/plain “access plus 15 day”
  8. ExpiresByType text/html “access plus 1 second”
  9. ExpiresByType text/css “access plus 1 day”
  10. ExpiresByType text/javascript “access plus 1 day”
  11. ExpiresByType application/x-shockwave-flash “access plus 1 day”
  12. ExpiresByType application/x-httpd-php “access plus 1 second”
  13. </IfModule>

Enable Apache Output Compression

  1. <IfModule mod_deflate.c>
  2. AddOutputFilterByType DEFLATE text/html
  3. AddOutputFilterByType DEFLATE text/plain
  4. <FilesMatch “\.(js|css)$”>
  5. SetOutputFilter DEFLATE
  6. </FilesMatch>
  7. </IfModule>

After changes are made to the apache configuration you’ll of course need to restart the apache daemon.

MySQL Configuration

Open the /etc/my.cnf file and review the cache settings for MySQL. In a well spec’d server hosting a product catalog of up to 10,000 products these settings are a good rule of thumb. Magento uses Innodb type tables so the size of the innodb_buffer_pool_size is highly correlated to improved performance.

  1. query_cache_type = 1
  2. query_cache_size = 64M
  3. innodb_buffer_pool_size = 256M
  4. thread_cache_size = 16
  5. table_cache = 512
  6. key_buffer = 32M

.htaccess

Along with the standard Magento rewrite conditions avoid duplicate content issues by redirecting non-www requests to the www.mydomain.com.

  1. RewriteCond %{HTTP_HOST} ^mydomain.com [NC]
  2. RewriteRule ^(.*)$ http://www.mydomain.com/$1 [L,R=301]

File permissions

Reset your file permissions by running the following commands in the root of the Magento installation:

  1. find . -type f -exec chmod 644 {} \;
  2. find . -type d -exec chmod 755 {} \;
  3. chmod o+w var var/.htaccess includes includes/config.php app/etc
  4. chmod 550 pear
  5. chmod -R o+w media

In order run Magento Connect you may need to TEMPORARILY loosen file permissions by executing these commands in the root of the Magento installation:

  1. find . -type d -exec chmod 777 {} \;
  2. find . -type f -exec chmod 644 {} \;

Clean Up Script

Download the Magento Cleanup Tool and schedule its execution. I wouldn’t recommend exposing it to the world as suggested in the Magento Wiki page however.

http://www.magentocommerce.com/wiki/groups/227/resetting_file_permissions

References for this Post

Magento Wiki

Do it your-selfers will appreciate the single best, almost biblical, reference for Magento server setup and optimization is the Crucial Web Hosting blog at http://www.crucialwebhost.com/blog/magento-commerce-install-guide/

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • LinkedIn
  • Technorati
  • Slashdot
  • Yahoo! Buzz
  • Google Bookmarks
  • Ping.fm
  • Reddit
  • StumbleUpon
  • Suggest to Techmeme via Twitter
  • Twitter
July 29, 2009

Connect With Your Customers

Websites are all about connecting with customers. When you strip away all of the Search Engine Optimization, Pay-per-click ads, flash animation, and technology, it is nothing more than an extension of a merchant’s inviting smile welcoming a customer into their store. It is the website’s job to put the customer at ease, offer them answers to their questions, and lead them to make the next step in the buying process.

So many websites out there put the emphasis on visual appeal, yet website look and feel ranks third (16%) in a Webcredible survey of 1300 online shoppers on influencing purchasing decisions. Trust is the number one factor (28%). That is why graphics design isn’t the only factor you should consider when selecting a web design company.

Value Proposition in the Web Design

According to Marketing Experiments, your value proposition is likely the most important factor in establishing a connection with your customers. A value proposition is the statement of your company’s or product’s key differentiator and is the primary reason a prospect should buy from you. It is important to clearly present your value proposition to visitors to reduce friction and anxiety in order to lever their motivation for coming to your website. It doesn’t matter if you are selling products or simply providing information, every website should motivate the customer into a conversion action.

Calls to action in the Web Design

Every page of a website should be designed to sell. For an cCommerce site, this can be an actual sale. For brochure style sites, this could be encouragement to pick up the phone, book an appointment, fill out a contact form, or any other step that would lead the visitor further along the sales process.

One thing to keep in mind about a website: there is only the information on any given page that will cue the visitor to take any action. Often, if a visitor is confused or feels lost they will simply leave your site and return to the comfort of the search engine.

In another study by Marketing Experiments, they state that the website that best relieves the customer of the burden of researching and making the best choice is the site that will beat its competitors. They describe the thought process of the customer as follows:

  • Where Am I
  • What Can I do Here
  • Why should I do it

Answering these questions for customers on every page will increase your chances of converting that customer.

Here is an example of this in action using a web design we completed recently for a local Edmonton company Millennium Windows. There is the initial draw to this page, which is getting information about the types and styles of windows Millennium offers. However, there are strong cues that show the customer they are on the page about windows and window installation, they can fill out a contact form or start a credit application, and why they should do it to take advantage of two discount incentives and a no-payment incentive. Some very strong motivation to take action.

More than just web design in edmonton
Answering customer’s questions

A good website design starts with a good communication strategy including how you will present your value proposition in the context of every page. Take the confusion out of the layout and content and simplify the choices for the customer so their path is clear. Call us if you need help with your web design.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • LinkedIn
  • Technorati
  • Slashdot
  • Yahoo! Buzz
  • Google Bookmarks
  • Ping.fm
  • Reddit
  • StumbleUpon
  • Suggest to Techmeme via Twitter
  • Twitter
July 23, 2009

Do you own, operate or manage an Alberta business, corporation or not-for-profit in a city like Calgary or Edmonton? If you are in the market for professional eCommerce consulting expertise to assist you in surviving the great recession and positioning your business for the eventual recovery, welcome to Hybrid Forge. There are well over a thousand web design companies in Alberta ranging in experience and talent from Critical Mass to your cousin who knows about computers. Contact Hybrid Forge today and we’ll show why your search ends here.

Magento Open Source eCommerce

Introducing Magento eCommerce

Hybrid Forge offers web development and consulting services a number of leading eCommerce platforms.  One of our favorites at Hybrid Forge is Magento. Magento is an open source, award-winning, community and corporately supported eCommerce software platform. Magento is the solution to power your business into the future. Developed by Roy Rubin and is his talented team at Varien, Magento is the hottest eCommerce platform on the web. Magento eCommerce software recently surpassed 1,000,000 downloads, confidently affirming its place as the top pick among today’s new eCommerce platforms. There is massive momentum building for this platform and a huge and growing network of 3rd party extensions and services.

If your site is running osCommerce, X-Cart, Zen-Cart, creLoaded, Interspire, Evolution, or one of the hundreds of other eCommerce packages, call Hybrid Forge today for a quote on re-platforming to Magento.

Magento Demo Store
View a Magento Demo Store

In an ocean of eCommerce platforms (aka Shopping Cart software), Magento is head and shoulders above the crowd.  Hybrid Forge identified Magento in 2007 as an important strategic platform for delivering to our clients a solution that is flexible enough to accommodate their needs, scalable enough to grow with them, and powerful enough to thrust them out of eCommerce mediocrity. We’re the Magento experts who embrace the flexibility it provides our clients and guarantee your satisfaction.

Edmonton, Alberta
Edmonton, Alberta

Magento Site Design

Hybrid Forge delivers creative, engaging designs tailored to your business. Don’t know where to start? The talented Hybrid Forge creative team offers inspiration when you can’t get started and runs with your ideas when the fountain of inspiration explodes. Great looking design is an iterative process and we draw on a number of methods to build the best. Check out our Merchant Forge site for Magento Extensions.

Magento eCommerce Features

Magento is a feature rich eCommerce platform, leap frogging the current open source king, osCommerce. If you’re looking for a demo on Magento’s features and wondering how you can take advantage of capability we offer a suite of professional services around Magento.

Magento Dynamic User Interface and Functionality Enhancements

Whether its Adobe Flash components or javascript enhancements your business needs to improve your customer’s online sales experience we deliver. We can build advanced javascript-driven user interfaces based on the built-in Prototype and Scriptaculous libraries as well as our favorite, the jQuery library.

Magento Extension Development

Improve your staff’s productivity by adding custom extensions like our Retail Pro Import Manager or our Beanstream Payment Gateway.

Magento Search Engine Optimization

As the online market space becomes increasingly crowded and revenue growth curves are flattened, search engine optimization is more important then ever. None of our customers want Amazon or eBay eating their lunch so we provide professional, snake-oil free, SEO strategies for maximizing their eCommerce investment.

According to Johnathan Lister of Google Canada, the average Canadian spends nearly 50 hours a month online. We’re an Alberta-based tech company, Call us today at (780) 634-2979 or toll-free (877) FORGE-66

Certified Google Analytics Consultants

Google’s Enterprise-class Analytics solution allows us to know where your online marketing budget is going. Google Analytics provides incredibly rich reports on traffic sources, ecommerce conversions, keyword effectiveness and ultimately the quantifiable validation of your marketing efforts. Our Google Certified Analytics Consultants provide professional installation, training and analysis to ensure your online efforts are coordinated and benchmarked.

Calgary, Alberta
Calgary, Alberta

Hybrid Forge provides professional eCommerce site design services matched by a top-notch, experienced programming team that knows Magento’s Zend-based MVC framework inside and out. Our senior Zend PHP programmers have nearly a decade of hands-on experience in deploying PHP-based solution into virtually all industry verticals.

Hybrid Forge is an Alberta-based tech company providing professional eCommerce services to all Alberta communities including Calgary, Edmonton, Banff, Canmore, Jasper, Lethbridge, Red Deer, Ft. McMurray, Grande Prairie.

Call or contact us today to arrange a complimentary consultation.

Tired of Microsoft Outlook, Exchange and SPAM? We recommend Google Apps for your Business

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • LinkedIn
  • Technorati
  • Slashdot
  • Yahoo! Buzz
  • Google Bookmarks
  • Ping.fm
  • Reddit
  • StumbleUpon
  • Suggest to Techmeme via Twitter
  • Twitter

Job Search Phishing

Author: Geoff Kliza
July 2, 2009

I’m not sure if I should be irate or flattered, but someone decided to use our Web site as the bait in an e-mail phishing scheme. In this particular instance, the emails suggested that a Company (Hybrid Forge Inc. – almost right but not quite…) either found your resume on Career Builder’s Web site, or suggested you had expressed interest. The catch: “During the training you will be paid by Hybrid Forge Inc. directly to your bank account.” (See some examples of the emails here)

Oh, so I just fill out an application, include my bank account details and you’ll start paying me?

Sounds too good to be true.

I certainly hope no one has been fooled by this. Thank you to the people who checked out our Web site and contacted us directly to let us know what was going on. We’ve since put up a notice on the home page of our site to let people know that these emails haven’t come from us and they are a phishing tactic used by fraudsters.

What else can be done? Well, for good measure we reported the event to Google (both return addresses were Gmail addresses), and the incident was reported to the Federal Trade Commission at spam@uce.gov. But let’s be real, this probably happens thousands of times a day. I doubt those actions will have much of an impact.

There’s lots of tips on how to avoid being phished on sites like APWG and Fraudwatch. As always, you’re exposed when you’re playing on the dirty-filthy Internet. Play it safe:

  • Never give out any personal information
  • If it sounds too good to be true, it is

On the plus side we’ve never had so much traffic to our Web site.

Update: We just heard back from one of our contacts at Google and the Gmail account used to originate the messages have been disabled.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • LinkedIn
  • Technorati
  • Slashdot
  • Yahoo! Buzz
  • Google Bookmarks
  • Ping.fm
  • Reddit
  • StumbleUpon
  • Suggest to Techmeme via Twitter
  • Twitter
June 4, 2009

Visitors to your eCommerce website will enjoy seeing a ‘mini cart’ while they shop around. A minicart is a smaller, stripped down version of their full shopping cart, typically placed on side panels or inside website headers. As a web designer, I am happy to take advantage of the Interprise Suite eCommerce (ISE) Skin Tokens for displaying a minicart inside my custom design skins [i.e., (!MINICART!) ]. But, I like to make some modifications to the default minicart display and I believe you might too.

There are a few CSS and Javascript workarounds I’ll discuss to get around having to edit any C#, because the minicart markup is generated directly by the ISE code-behind, and is not easily accessible without the need to recompile your code-base.

Notes on this example: I assume the reader to have an intermediate skill level for writing valid CSS and also manipulating HTML elements (DOM) with Javascript. In my example, I have used JQuery to traverse, manipulate, and edit some elements because it works great, it’s feature-rich, and appears to have no conflicts with ISE core Javascript libraries. You can use whichever Javascript package you prefer. You may also want to refer to a previous post: Creating Custom Design Skins for Interprise Suite.

The Generated ISE Minicart HTML Markup

By default, the minicart HTML generated by the ISE code-behind comes out looking like this:

  1. <table width=”150″ cellpadding=”0″ cellspacing=”0″ border=”0″>
  2. <tr><td align=”left” valign=”top”>
  3. <img src=”skins/Skin_1/images/minicart.gif” border=”0″><br>
  4. <table width=”190″ cellpadding=”4″ cellspacing=”0″
    border=”0″ style=”border: 1px solid #444444;”>
  5. <tr><td align=”center” valign=”top”>
  6. <a href=”p-1-product-abc.aspx”>Product ABC</a>
  7. <br>Qty 1&nbsp;$ 5.00<br/><br/>
  8. <a href=”p-2-product-xyz.aspx”>Product XYZ</a>
  9. <br>Qty 1&nbsp;$ 5.00<br/><br/>
  10. Sub Total: $ 10.00<br/><br/>
  11. <a href=”ShoppingCart.aspx”>
  12. <font color=”BLUE”><b>CHECKOUT</b></font></a>
  13. </td></tr>
  14. </table>
  15. </td></tr>
  16. </table>

And here’s how it ends up looking by default – not ugly, but a tad unattractive, in my opinion:

ISE Default Minicart

First the problems, besides the obvious markup errors like mixing “<br/>” with “<br>”:

  • We can’t easily make changes to the HTML because it is derived from the C# code-behind;
  • The output is in a table, not horrible, but the “align=center” on the table cell will need to be looked at; I like this kind of output to be aligned left or right;
  • The “<FONT>” tag… my, oh my; But it will be useful for us, see below;
  • There’s no ID or class associated with the minicart for targeting it with CSS;
  • When the shopping cart is empty, the minicart doesn’t show anything – no nothing. This may or may not be what you want but in my case, i’d like it to show “Your Shopping Cart is Empty” when there’s nothing there.

Implementing the Interprise Suite Minicart Tweaks

First, you’re going to want to put your minicart Skin Token inside a wrapper in your template files so you can properly target it with CSS:

  1. <div id=”miniCart”>(!MINICART!)</div>

Here is my snippet of CSS that targets the minicart. Granted, i’m using that <FONT> tag in a way that probably wasn’t imagined originally, however it allows me to do what I need in modern browsers.

  1. /* Mini Cart CSS */
  2. #miniCart table { line-height:1.1em; }
  3. #miniCart table tr td img, #miniCart table tr td br,
    #miniCart table table td a font b { display:none; }
  4. #miniCart table table tr td br { display:inline; }
  5. #miniCart table table td { padding-bottom: 5px; }
  6. #miniCart table table td a font { float:right;
    display:block; width:112px; height:22px;
    background:url(‘../images/button-checkout.gif’) no-repeat 0 0;
    cursor:pointer; }
  7. #miniCart table table td a font:hover
    { /* roll-over sprite background-position */}

Because the table cell align=”center” and table border are both inline, I can’t override it with CSS. So, i’m going to use JQuery. And i’m also going to use JQuery to add some text to the ISE mini-cart when the cart is empty. So, first you’ll need to ensure you include the JQuery libraries in the <head> of your ISE template file:

  1. <head>
  2. <script src="/skins/Skin_(!SKINID!)/js/jquery-1.3.2.js"
    type="text/javascript"></script>
  3. . . .
  4. </head>

Then, you can use the following Javascript to target the minicart:

  1. /* JQuery Mini-cart Update */
  2. $(document).ready(function () {
  3. $(“#miniCart table table”).css({‘border-width’ : ’0′});
  4. $(“#miniCart table table td”).attr({align : ‘left’});
  5. if ($(“#miniCart”).text() == “”) {
  6. $(“#miniCart”).append(“<p>Your Shopping Cart is Empty.</p>”);
  7. };
  8. }

You’ll have to create your own button image (and rollover sprite) for the checkout button. But with a little extra CSS tweaking (like adding an background image to the miniCart div) my minicart now looks something like this and works just great!

ISE Custom Minicart

You can download my minicart CSS and my minicart Javascript, but please review it for compliance with your specific version of Interprise Suite. This was written for ISE 5.3.

For more information on customizing Interprise Suite eCommerce, please feel most welcome to contact the Hybrid Forge design team: info@hybridforge.com.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • LinkedIn
  • Technorati
  • Slashdot
  • Yahoo! Buzz
  • Google Bookmarks
  • Ping.fm
  • Reddit
  • StumbleUpon
  • Suggest to Techmeme via Twitter
  • Twitter
June 2, 2009

I recently developed another custom eCommerce design skin for one of our Interprise Suite eCommerce (ISE) clients. While I regularly design custom skins for ISE, each time I begin I realize how few online resources are available to help web designers skin the shopping cart side of ISE. So, I decided to walk through an example of creating a custom design with a different home page design/layout then the design/layout of the inner pages of the site.

Notes on this example: I assume the reader to have a web design mockup file ready (e.g., a Photoshop file), and to have an intermediate skill level for writing valid X/HTML markup and CSS. This example also assumes that Interprise Suite is installed and that the website is up and running in your dev environment.

ISE Skin Basics

Some basic Interprise Suite concepts that will make your custom design skin experience go smoothly:

  • You can invoke a different skin through a browser by using the following querystring, where “X” is the unique skin #:
    http://www.my-ecommerce-site.com/?skinid=X
  • All skin templates are located in the following directory, which is where you should put your CSS, images, Javascript, and custom XmlPackage files:
    …/my-ecommerce-site/skins/skin_X/
    …/my-ecommerce-site/skins/skin_X/css/
    …/my-ecommerce-site/skins/skin_X/XmlPackages/
    etc.

    (Note: make a backup copy of “…/skin_1/” you’ll need this later, plus just in case anything goes wrong throughout your customization process and you need to revert.)

  • Learn to love Skin Tokens, you’ll use these a lot. Skin tokens are snippets of text [e.g., (!SKINTOKEN!)] that you can place in your template files for automatically adding specific ISE information to your template. For example, following are the skin tokens I typically use in my templates. Some of the information generated by these tokens can be setup in the ISE client tool:
    • (!METATITLE!) – page title
    • (!METADESCRIPTION!) – page meta description
    • (!METAKEYWORDS!) – page meta keywords
    • (!JAVASCRIPT_INCLUDES!) – required in your template (ISE Javascript libraries)
    • (!PAGEINFO!) – not required, but very useful for generating page instantiation info
    • (!USERNAME!) – by default, this generates “You’re logged in as: XYZ
    • (!SKINID!) – the current skin id being used, useful for various path-ing requirements
    • (!SIGNINOUT_TEXT!) – by default, switches between “Login” and “Logout” automatically as necessary
    • (!SIGNINOUT_LINK!) – by default, switches between “signin.aspx” and “signout.aspx”
    • (!MINICART!) – generates a “mini shopping cart” to show items currently added to a visitor’s cart

Creating the Interprise Suite Skin Template Files

Now for the good stuff. Web designers have their own personal process for generating the required X/HTML markup and CSS from a design mockup file (like a Photoshop file). I’m not going to suggest any changes to your process, but here is the general process I use for customizing ISE:

My ISE Customization Steps:

  1. Create HTML template files and CSS from a design file. Plus, a couple of quick sanity tests for the design.
  2. Create custom ISE image buttons (used throughout the site).
  3. Wire-up the required ISE components: ASP.net controls, XmlPackages, and Skin Tokens in your template.
  4. Upload your files and change necessary configuration options in the ISE client.
  5. Reset the ISE Web Cache

1. Create HTML Template Files and CSS Stylesheets

So, you have a design mockup already – great! In my example I’ve created a different “home” page layout than the “inner” pages of the site. I’m not going to detail how to cut up your design file – there are lots of great resources online that would do more justice to the topic than I. That said, to follow along, get your design cut up into 2 HTML files with the following structure on your local/testing server:

home template:   …/ise-template/home-template.htm
inner template:   …/ise-template/template.htm
css file(s):    …/ise-template/css/
image file(s):   …/ise-template/images/
javascript file(s):   …/ise-template/js/

For now, don’t worry about getting any of the String Tokens in place. Focus on the HTML and CSS of the template files themselves and perform the following sanity tests on your design:

  • How does font-scaling work +/- 2 font sizes? Does your design hold together?
  • Have you used CSS font-families so that visitors without your fancy “minion pro” font still have a good browsing experience? Just a note, while the infamous “Tahoma” looks great in most Windows environments, in Safari (Windows & Mac) it looks chunky – consider using something more Safari friendly in your font-family.
  • How does your design work in various versions of Safari, Firefox, Google Chrome, and Internet Explorer (IE)? Litmus can help you determine this. And for the various versions of IE, I’ve been using a handy little tool (still in alpha release at the moment my writing) called IE Tester.
  • How does your design look and handle in a mobile browser like Blackberry or IPhone? eCommerce customers shop from all kinds of devices.

2. Create Custom ISE Image Buttons

The buttons i’m referring to are the buttons that come with the default skins included with ISE. For example:

ISE Button 1
ISE Button 2

If you like these buttons, use them. If you don’t, get ready for a little Photoshop fun as (from my last count) there are over 100 different image buttons to customize throughout the website. All these buttons can be placed in your images folder:

…/ise-template/images/

Be sure to name them properly, else ISE won’t be able to find them. First, make a backup of all default skin buttons that come with ISE (check a default skin directory of ISE “../my-ecommerce-site/skin_1/images/”) and copy them wherever you’re checking your design cuts (“…/ise-template/images/”). Then as you create each new button, simply overwrite the same image button file, ensuring the file name stays the same.

3. Wire-up the Required ISE Components

Now that your basic design is tested and the general ISE image buttons are customized, it’s time to hook up your template with ISE. First things first, copy your “template.htm” file and rename it “template.ascx”; and copy your “home-template.htm” file and rename it “home-template.ascx”. These are the required ASP.net extensions for ISE.

Required ASP.net Components for your template:

  1. Take a look at the backup copy of “skin_1″ you made before you started – you did make one, right? Open “skin_1_backup/template.ascx” and copy the first 3 lines of the file into your custom “template.ascx” file. They should begin something like “<%@…” – these are the ASP.net controls and registers.
    1. <%@ Control Language=”c#” AutoEventWireup=. . . %>
    2. <%@ Register TagPrefix=”ComponentArt”. . . %>
    3. <%@ Register TagPrefix=”ise”. . . %>
  2. Just inside your <body> tag, place the following line. This line basically translates into your <form> tag which makes all the ISE whiz-bang magic possible:
    1. <body>
    2. <asp:Panel ID=”pnlForm” runat=”server” Visible=”false”  />
  3. Inside the “content area” of your templates, place the following ASP.net tag. This tag is where “content” items (such as topics, shopping carts, messages, etc.) will be displayed in your template:
    1. <div id=”content”>
    2. <!– ISE Content Area –>
    3. <asp:PlaceHolder ID=”PageContent” runat=”server”>
    4. </asp:PlaceHolder>
    5. . . .
    6. </div>

Instantiate the Skin Tokens Required:

  1. The <head> section of your template files should look something like this:
    1. <head>
    2. <title>(!METATITLE!)</title>
    3. <meta name=”description” content=”(!METADESCRIPTION!)” />
    4. <meta name=”keywords” content=”(!METAKEYWORDS!)” />
    5. <link href=”/skins/Skin_(!SKINID!)/css/default.css”
      rel=”stylesheet” type=”text/css” media=”screen” />
    6. <meta http-equiv=”Content-Type” content=”text/html;
      charset=utf-8″ />
    7. <script src=”/jscripts/core.js” type=”text/javascript”>
      </script>
    8. (!JAVASCRIPT_INCLUDES!)
    9. </head>
  2. Include the (!PAGEINFO!) token just below the opening <body> tag and before the previously mentioned ASP.net tag:
    1. <body>
    2. (!PAGEINFO!)
    3. <asp:Panel ID=”pnlForm” runat=”server” Visible=”false” />
  3. Include the (!USERNAME!) token wherever your design calls for it, I typically put this information inside the top (or header) section of the design:
    1. <div id=”header”>
    2. <span id=”userName”>(!USERNAME!)</span>
    3. . . .
    4. </div>
  4. Breadcrumbs:
    1. <div id=”breadcrumbs”>(!SECTION_TITLE!)</div>
  5. My Shopping Cart and Login/Logout links:
    1. <a href=”(!SIGNINOUT_LINK!)” id=”topLogin”>
      (!SIGNINOUT_TEXT!)</a>
    2. . . .
    3. <a href=”/shoppingcart.aspx” id=”topCart”>
      My Shopping Cart ((!NUM_CART_ITEMS!))</a>
  6. Mini-cart Display, which I typically use on a side panel.
    1. <div id=”miniCart”>(!MINICART!)</div>

Instantiate your ISE XmlPackages:

  1. Call the Search Box XmlPackage:
    1. <div id=”iseSearchBox”>(!XmlPackage
      Name=”skin.search”!)</div>
  2. If you want to display your shop categories, call the Categories XmlPackage:
    1. <div id=”catListing”>(!XmlPackage
      Name=”rev.categories”!)</div>

There are several other XmlPackages available to you, depending on your needs and the type of eCommerce website you are creating. Check the ISE documentation for more help on this.

You can download my ISE sample template, but please review it for compliance with your specific version of ISE. This one was written for ISE 5.3.

4. Upload your Files & Change ISE Client Configuration Options

Upload your template files (all images, all css, and .ascx files) to the desired skin directory. Typically, I just use Skin_1. Since I’ve already made a back-up of this, there is no harm in having your Skin set as Skin_1 – plus it saves you one step in the ISE client. Overwrite all the existing files with the ones you have created. Leave all the other files there, as-is. There’s no need to mess with them at this point. Now, all your files should now be uploaded to the server in a directory structure similar to this:

…/my-ecommerce-site/skins/skin_1/template.ascx
…/my-ecommerce-site/skins/skin_1/home-template.ascx
…/my-ecommerce-site/skins/skin_1/css/…
…/my-ecommerce-site/skins/skin_1/js/…
…/my-ecommerce-site/skins/skin_1/images/…

Next, open and login into your Interprise Suite client tool. Inside the client, you’ll need to goto the “eCommerce” module (800 eCommerce), and open “Utilities > Setup > Application Configuration”. (In here, make sure if you have multiple websites running, you are working with the correct site.)

Inside the “Application Configuration” select the group name “SITEDISPLAY”. There is an option here called “DefaultSkinID”, make sure this is set to the same Skin_X directory you are using for your skin files. If you are overwriting Skin_1 (as I have suggested) you do not need to change this, typically.

Interprise Suite Default Skin ID

Then, select the group name “SKINS”. There are 2 options here to change. Ensure that “HomeTemplate” is set to the same file name you uploaded to the server (in this example “home-template.ascx”. The “HomeTemplateAsIs” option should be set to “false” if you are allowing users to define content on the home page through the ISE client “Topics” pages. If you set this to value to “true” then ISE will assume that you are providing all content for the home page inside your “home-template.ascx” file itself.

Interprise Suite Default Skin ID

5. Reset the ISE Web Cache

You’ll likely need to reset the ISE web cache for your design to take effect completely. Also, if you make any changes to the template and/or ISE configuration settings you may need to reset it again, so it’s nice to know where to find it in the ISE client tool. One place you can find the “Reset Web Cache” button is under the eCommerce module (800 eCommerce), then select “Tools” > “Web Store”. Once inside the “Web Store” option, at the top of the tool bar you can see the button:

ISE Reset Web Cache

Congratulations – Your ISE Custom Skin Is Now Active!

At this point you should be able to see your custom design skin for Interprise Suite on the front-end of the website. Customizing Interprise Suite eCommerce can be tricky at points, but it’s worth it in the end as ISE is one of the best eBusiness solutions online when you need to manage inventory and provide eCommerce.

I hope i’ve helped you see how you can get around some of the issues of creating a custom ISE skin and that you’ve found this useful. We would love to hear from you if you have other thoughts on the process outlined above. If you have further questions about customizing Interprise Suite we invite you to contact us.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • LinkedIn
  • Technorati
  • Slashdot
  • Yahoo! Buzz
  • Google Bookmarks
  • Ping.fm
  • Reddit
  • StumbleUpon
  • Suggest to Techmeme via Twitter
  • Twitter
May 19, 2009

Interprise Suite is a relative newcomer in the ERP (Enterprise Resource Planning) software marketplace. While the product has been around since 2006, not until recently has it been worthy of implementation within your business. Trust us, we started working with Interprise Suite in the fall of 2007 as the ERP platform for the start-up social enterprise ireturn inc. Like many things in life, first impressions are a very important indicator of future outcomes. In anticipation of the release of Interprise Suite 2009 we thought it was time to publish a handy pre-installation guide to ensure your first out-of-the-box experience is a success.

Drawing on my past experience as an Air Force officer I’ve have put together the Interprise Suite Pre-flight Checklist. As you may or may not be aware each and every time an aircraft leaves the ground there is a rigorous list of items to be checked before the pilot even starts the engines. Ultimately the pilot is responsible for determining the aircraft’s airworthiness before he embarks. As Interprise expands its marketing to offer single-user versions of Interprise Suite installable by virtually anyone, some of its requirements are bound to be overlooked prior to launching the installer. I admit that many of the checks I describe are simple RTFM to the propeller-head crowd, yet we anticipate many a motivated small-business owner who may not be schooled in the black art of aspnet_regiis.exe will want to evaluate the software for themselves.

This checklist makes the basic assumption that you are planning to install both the client and the server for Interprise Suite. To ensure your first flight is a success I present the Hybrid Forge Interprise Suite Pre-Flight Checklist.

Interprise Suite Install Pre-flight Checklist

Operating system

Interprise Suite is supported on the following operating systems: Windows XP Professional, Vista Business, Windows Server 2003 Standard or better, and Windows Server 2008 Standard or better.  Home edition of Windows XP and the lighter versions of Vista do not have the Microsoft web server IIS so avoid those.  Interprise will run on 64-bit versions of Windows but a specific 64-bit  version is not currently available. I’m currently using the release candidate of Microsoft Windows 7 Ultimate available through our MSDN (Microsoft Developer Network) subscription and its a significant improvement over Vista and even Windows XP for those hold outs.  In a future post I’ll describe our Interprise Suite experiences on Windows 7.

Disk Space

While the official requirement is 10GB for both the client and server, to avoid disk space issues from Microsoft service packs and other maintenance downloads as well as disk space for additional company or demo databases, ensure your machine has at least 20GB of free space.

Internet Information Server (IIS)

Prior to launching the Interprise Suite installer ensure you have Internet Information Server (IIS) installed.  Installing IIS before running the installer will save you from wasting time restarting the installer when it fails to detects IIS.  Be sure to test that IIS is running by starting your favorite web browser and pointing it to http://localhost.  Check whether your firewall is blocking traffic on the standard HTTP port number 80. Be sure to open access to this port to your machine.

Instructions on installing IIS for Vista

.Net Framework 2.0

Ensure that Microsoft’s .Net Framework version 2.0 is installed.  Note that this requirement is only relevant for early versions of Windows XP and Windows Server 2003 as newer Microsoft operating systems include the framework.

Download the .Net 2.0 Redistributable Package directly from Microsoft

Windows Installer 3.1

The Windows installer is an applications installation and configuration service that facilitates installation packages like Interprise.

Download the Windows Installer 3.1 package

Web Service Enhancements 3.0

In order for the Interprise Suite client to connect to your designated server over the internet you must install the Microsoft Web Service Extensions version 3. The Interprise “smart client” technology relies on web services to communicate with your server.   There are multiple versions available for download from Microsoft and only one is detected by the Interprise installer.  Here is the link to the version Interprise prefers:

Download the Web Services Enhancements (WSE) 3.0 for Microsoft .NET

Microsoft SQL Express 2005

The Interprise Installer will attempt to install Microsoft SQL Express 2005 if it can’t detect a previously installed version of Microsoft SQL Server. Microsoft recently reorganized the SQL Server website to promote the release of SQL Server 2008 and changed the location of the SQL Express 2005 download in the process.  The download is now available at the Microsoft SQL Server 2005 product page.

After checking each of the items on the checklist you are finally cleared to proceed with installation. I hope you enjoy the flight! As Interprise Suite and the software that supports it evolves I will continue to update the checklist. In the short-term I look forward to support for Windows SQL 2008 and Windows 7 and of course the official release of Interprise Suite 2009.

We Speak ‘Interprise Suite’

Interprise Suite is a sophisticated platform for powering your business. At Hybrid Forge we speak Interprise Suite and can help you quickly climb the learning curve on the path to understanding why Interprise Suite is such a compelling choice for your next ERP platform.

My next post on Interprise Suite will discuss deploying to virtual servers and strategies for effectively managing an Interprise server in the cloud. At Hybrid Forge we use VMWare’s ESX Server for virtualizing and managing our servers.  In our data-center environment ESX Server is extremely stable and the performance lost to the hypervisor is ‘virtually’ negligible. We have assisted clients deploying Interprise Suite within shared virtual server environments such as Parallels Virtuozzo and Amazon’s EC2 Cloud Computing Environment.

Contact Hybrid Forge today to discuss what Interprise Suite can do for your business at 877-66-FORGE (3-6743) toll-free.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • LinkedIn
  • Technorati
  • Slashdot
  • Yahoo! Buzz
  • Google Bookmarks
  • Ping.fm
  • Reddit
  • StumbleUpon
  • Suggest to Techmeme via Twitter
  • Twitter