<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>centresource interactive agency blog &#187; Bob Marchman</title>
	<atom:link href="http://blog.centresource.com/author/bmarchman/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.centresource.com</link>
	<description>web development &#124; nashville, tn</description>
	<pubDate>Fri, 20 Aug 2010 16:35:47 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>DrupalCon 2008: Popular Science Magazine Case Study</title>
		<link>http://blog.centresource.com/2008/03/12/drupalcon-2008-popular-science-magazine-case-study/</link>
		<comments>http://blog.centresource.com/2008/03/12/drupalcon-2008-popular-science-magazine-case-study/#comments</comments>
		<pubDate>Wed, 12 Mar 2008 14:32:11 +0000</pubDate>
		<dc:creator>Bob Marchman</dc:creator>
		
		<category><![CDATA[Drupal]]></category>

		<category><![CDATA[Miscellaneous]]></category>

		<category><![CDATA[case-study]]></category>

		<category><![CDATA[CMS]]></category>

		<category><![CDATA[drupalcon]]></category>

		<category><![CDATA[popularscience]]></category>

		<category><![CDATA[web-development]]></category>

		<guid isPermaLink="false">http://blog2.centresource.com/2008/03/12/drupalcon-2008-popular-science-magazine-case-study/</guid>
		<description><![CDATA[The folks at pingVision have posted their case study for the Popular Science Magazine website on drupal.org.
I attended this...]]></description>
			<content:encoded><![CDATA[<p>The folks at <a  href="http://pingv.com/">pingVision</a> have posted their case study for the <a  href="http://blog2.centresource.com/popsci.com">Popular Science Magazine website</a> on <a  href="http://drupal.org/node/233090#comment-766498">drupal.org</a>.</p>
<p>I attended this session and left it feeling very inspired. It was amazing to see what this small crew did with such a behemoth of a site.  Just the thought of having to migrate a 1.66GB Oracle DB into a Drupal site makes me sweat. All things considered, I felt like this was probably the best session I attended at DrupalCon 2008. It wasn&#8217;t the nerdiest, or the geekiest, and it didn&#8217;t have lots of slides of code&#8230;but for our line of work, it was incredibly valuable. Not only did they go into the &#8220;nuts-n-bolts&#8221; of how they built the site, they also touched on the project management side, and also managing client expectations with such a large project.</p>
<p>Check it out to see how one of the best Drupal sites out there came to fruition.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2008/03/12/drupalcon-2008-popular-science-magazine-case-study/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Panels 2 Context Screencast</title>
		<link>http://blog.centresource.com/2008/03/12/panels-2-context-screencast/</link>
		<comments>http://blog.centresource.com/2008/03/12/panels-2-context-screencast/#comments</comments>
		<pubDate>Wed, 12 Mar 2008 13:32:36 +0000</pubDate>
		<dc:creator>Bob Marchman</dc:creator>
		
		<category><![CDATA[Drupal]]></category>

		<category><![CDATA[Miscellaneous]]></category>

		<category><![CDATA[drupal-modules]]></category>

		<category><![CDATA[drupalcon]]></category>

		<category><![CDATA[panels]]></category>

		<category><![CDATA[screencast]]></category>

		<guid isPermaLink="false">http://blog2.centresource.com/2008/03/12/panels-2-context-screencast/</guid>
		<description><![CDATA[Jeff Miccollis and Young Hahn with DevelopmentSeed gave an excellent presentation at DrupalCon 2008 titled: Creating Custom Workflows for Drupal...]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.developmentseed.org/team/jeff-miccolis">Jeff Miccollis</a> and <a  href="http://www.developmentseed.org/team/young-hahn">Young Hahn</a> with <a  href="http://www.developmentseed.org/">DevelopmentSeed</a> gave an excellent presentation at DrupalCon 2008 titled: Creating Custom Workflows for Drupal Apps: taking advantage of core hooks and context. The primary focus of this session was explaining the various methods of maintaining &#8220;context&#8221; throughout a Drupal site. In layman&#8217;s terms, this simply means a method of determining what content to display, or what actions to take based on where the user is currently located on the site.  A simple example given was multi-lingual sites.  A site may be in English by default, but if the user switches the site&#8217;s language to Spanish, then the there has to be some method in place to remember that this is the language this user has chosen, and we can assume that the user wishes to view the rest of the site in whatever language they have chosen. The language the user selected has become the &#8220;context&#8221; for the site. Now, any page that the user navigates to will be in Spanish, because the site has been implemented in a such a way as to remember the user&#8217;s chosen language.</p>
<p>Now, as you can probably tell, implementing a context for your site can sometimes be just as difficult as explaining what it is. In Drupal, there are several methods available to determine a context, but there are many pitfalls to look out for, especially if you are wanting to maintain a long-term context. Typically, we most often see context&#8217;s in use when setting what &#8220;section&#8221; of a site the user is on. We do this with either a thought out navigation structure (i.e. /galleries/album1, /galleries/album2).  You will almost invariably find yourself resorting to looking at $node->type, arg(n), or using node_load() to determine what content to render.  These can be handy for small, simple structured sites, but can quickly become a scalability issue on larger sites. You&#8217;ll find yourself having to return to append some more context to a switch statement in your template everytime a new section is added to the site.</p>
<p>So, that brings us around to Panels 2. At the presentation, Panels was suggested as a possible way to easily implement context and maintain it throughout a user&#8217;s experience. To clear up any confusion you may still have, <a  href="http://sirkitree.net/">sirkitree.net</a> has posted <a  href="http://sirkitree.net/panels2-context-screencast">this screencast</a> about using Panels 2 Context.</p>
<p>You can read more about the session <a  href="http://www.developmentseed.org/blog/2008/mar/02/creating-custom-workflows-drupal-applications">here</a> and <a  href="https://boston2008.drupalcon.org/session/creating-custom-workflows-drupal-applications-taking-advantage-core-hooks-and-context">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2008/03/12/panels-2-context-screencast/feed/</wfw:commentRss>
		</item>
		<item>
		<title>More DrupalCon Slides!</title>
		<link>http://blog.centresource.com/2008/03/12/more-drupalcon-slides/</link>
		<comments>http://blog.centresource.com/2008/03/12/more-drupalcon-slides/#comments</comments>
		<pubDate>Wed, 12 Mar 2008 13:04:55 +0000</pubDate>
		<dc:creator>Bob Marchman</dc:creator>
		
		<category><![CDATA[Drupal]]></category>

		<category><![CDATA[CMS]]></category>

		<category><![CDATA[drupalcon]]></category>

		<category><![CDATA[web-development]]></category>

		<guid isPermaLink="false">http://blog2.centresource.com/2008/03/12/more-drupalcon-slides/</guid>
		<description><![CDATA[Addison Berry from Lullabot has posted the slides from his DrupalCon 2008 presentation: Contributing to Drupal: A guide for everyone....]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.lullabot.com/about/addison_berry">Addison Berry</a> from <a  href="http://www.lullabot.com">Lullabot</a> has posted the slides from his DrupalCon 2008 presentation: <a  href="http://boston2008.drupalcon.org/session/contributing-drupal-guide-everyone">Contributing to Drupal: A guide for everyone</a>.<br />
Woot!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2008/03/12/more-drupalcon-slides/feed/</wfw:commentRss>
		</item>
		<item>
		<title>John VanDyk - DrupalCon 2008 Triggers and Actions and Hooks, Oh My!</title>
		<link>http://blog.centresource.com/2008/03/11/john-vandyk-drupalcon-2008-triggers-and-actions-and-hooks-oh-my/</link>
		<comments>http://blog.centresource.com/2008/03/11/john-vandyk-drupalcon-2008-triggers-and-actions-and-hooks-oh-my/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 12:45:52 +0000</pubDate>
		<dc:creator>Bob Marchman</dc:creator>
		
		<category><![CDATA[Drupal]]></category>

		<category><![CDATA[CMS]]></category>

		<category><![CDATA[drupalcon]]></category>

		<category><![CDATA[web-development]]></category>

		<guid isPermaLink="false">http://blog2.centresource.com/2008/03/11/john-vandyk-drupalcon-2008-triggers-and-actions-and-hooks-oh-my/</guid>
		<description><![CDATA[John VanDyk, author of Pro Drupal Development, and longtime Drupal developer/guru, has posted the slides and video of the presentation...]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.sysarchitects.com/blog/2">John VanDyk</a>, author of <a  href="http://www.amazon.com/Pro-Drupal-Development-John-VanDyk/dp/1590597559/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1205236146&#038;sr=8-1">Pro Drupal Development</a>, and longtime Drupal developer/guru, has posted the slides and video of the presentation he gave at DrupalCon on triggers and actions. It was great presentation from one of Drupal&#8217;s founding fathers. Though centered around Drupal 6, many of the basic principals can be applied to Drupal 5&#8217;s Actions module. There is also word of backporting Triggers to Drupal 5!</p>
<p>If you missed the Boston DrupalCon 2008, don&#8217;t miss out on this wonderful session.<br />
<a  href="http://www.sysarchitects.com/node/73">Files can be downloaded here&#8230;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2008/03/11/john-vandyk-drupalcon-2008-triggers-and-actions-and-hooks-oh-my/feed/</wfw:commentRss>
		</item>
		<item>
		<title>DrupalCon Boston 2008 - Session One: From Drupal Newbie to Drupal Ninja</title>
		<link>http://blog.centresource.com/2008/03/03/drupalcon-boston-2008-session-one-from-drupal-newbie-to-drupal-ninja/</link>
		<comments>http://blog.centresource.com/2008/03/03/drupalcon-boston-2008-session-one-from-drupal-newbie-to-drupal-ninja/#comments</comments>
		<pubDate>Mon, 03 Mar 2008 23:28:22 +0000</pubDate>
		<dc:creator>Bob Marchman</dc:creator>
		
		<category><![CDATA[Drupal]]></category>

		<category><![CDATA[Web Development]]></category>

		<category><![CDATA[drupalcon]]></category>

		<guid isPermaLink="false">http://blog2.centresource.com/2008/03/03/drupalcon-boston-2008-session-one-from-drupal-newbie-to-drupal-ninja/</guid>
		<description><![CDATA[Session: From Drupal Newbie to Drupal Ninja
Time: 9:00am (EST)  03/03/2008 Presenter: Chad Williams (hunmonk)
This presentation was targeted primarily...]]></description>
			<content:encoded><![CDATA[<p>Session: From Drupal Newbie to Drupal Ninja<br />
Time: 9:00am (EST)  03/03/2008 Presenter: Chad Williams (<a  href="http://drupal.org/user/22079">hunmonk</a>)</p>
<p>This presentation was targeted primarily at the Drupal newbie, and was mostly a &#8220;tips &#038; tricks&#8221; session.  Here are my notes from the session:</p>
<p>We begin with a basic look at how Drupal works beneath the hood, so to speak.  He talks about modules for core and contrib, and what module hooks are and what they do (take actions from Drupal, return info to other modules, alter info before returning it to Drupal, etc&#8230;). The first example we looked at was hook_menu(). hook_menu, in a nutshell, maps a URI to the code needed to build that specific page at the specified URI. It determines if the URI is accessible to the user, and records the URI for breadcrumb generation. We then looked at some specific examples of hook_menu() used in a module. Chad identified the main components of the hook_menu() function, including the $items[] array, access, callbacks, and callback arguments.</p>
<p>Next, we looked at hook_form_alter(), which is certainly one of the most powerful (and probably underused) functions available to modules in Drupal. In Drupal, forms are represented as nested arrays. Drupal core builds a form, and passes this array around to other modules. Modules can then alter parts of this array using the hook_form_alter() function, by either adding to it, modifying it, or deleting form elements all together from within the array. Basically, when you call the function, one of its parameters is $form_id. This represents the unique identifier for all forms generated by Drupal. You can check for this id, and thus, modify any form inside of Drupal before it is rendered to the end user. Pretty powerful stuff right there.</p>
<p>There was a good question from an audience member at this point: At which point does hook_form_alter() actually get called in the page rendering process? Drupal core builds the form first, then inside includes/form.inc, there is a function called drupal_process_form(). In this function there is a foreach loop that calls module_implements() to check for all modules that implement hook_form_alter(). It is at this point that the form(s) get modified by modules. After this, the form is rendered and returned to the user.</p>
<p>You can read the official Drupal API documentation on both of these hook functions here:<br />
<a  href="http://api.drupal.org/api/function/hook_menu/5">http://api.drupal.org/api/function/hook_menu/5</a><br />
<a  href="http://api.drupal.org/api/function/hook_form_alter/5">http://api.drupal.org/api/function/hook_form_alter/5</a></p>
<p>Next, we briefly touched on how content does not equate to presentation in Drupal. Content is stored in the database, and run through the theming system to separate content from presentation. It is loosely based on the MVC pattern.</p>
<p>The next topic involved what it takes to get Drupal up and running. The first thing, obviously, is a web server and a development environment. The easiest method of getting a development environment up and running is to download and install a pre-packaged Apache, PHP, and mySQL stack  such as LAMP, MAMP, or WAMP. He briefly talks about other tools included in those packages such as phpmyadmin. Drupal has some video tutorials on getting your own environment up and running at <a  href="http://drupal.org/node/159534">http://drupal.org/node/159534</a>.</p>
<p>There was another question from the audience at this point: What about migrating to a &#8220;secure&#8221;  environment from your local (localhost) development environment. Use rsync or something of the like. There was an emphasis on keeping your development environment very separate from the production environment. Of course, in our line of work, this is absolutely necessary and imperative for many reasons. Basically, use localhost or your dev environment for testing out functionality and breaking your sites.</p>
<p>We discussed the various editors and IDE&#8217;s available next, including VI/VIM, Emacs, TextMate, TextWrangler, etc&#8230; For the record, Chad uses Zend. We really didn&#8217;t get into any specific details on any editor or IDE, he just gave some examples.</p>
<p>Next up: coding standards. First and foremost, if you have any desire to code for Drupal, whether it be to contribute to core, or write a custom module, read this first:<br />
<a  href="http://drupal.org/writing-secure-code">http://drupal.org/writing-secure-code</a><br />
or, better yet, if your up here in Boston with us at the conference, there will be this session:<br />
<a  href="http://boston2008.drupalcon.org/session/drupal-security-best-practices">http://boston2008.drupalcon.org/session/drupal-security-best-practices</a><br />
Chad talked about why it is important to have coding standards:</p>
<ul>
<li>For consistency among projects and codebases.</li>
<li>For improved readability of your code.</li>
<li>For automated documentation of your code (well written code = self-documenting code</li>
<li>For security</li>
<li>And, it is critical if you ever want your contribution to Drupal&#8217;s core to get accepted.</li>
</ul>
<p>Next topic: What to do when your stuck??? This was mostly a series of links and resources to help you out when your at your wits end with an issue. Here&#8217;s the shortlist:</p>
<ul>
<li><a  href="http://drupal.org/support">http://drupal.org/support</a></li>
<li><a  href="http://drupal.org/handbooks">http://drupal.org/handbooks</a></li>
<li>IRC channels: #drupal, #drupal-dev, #drupal-support, #drupal-themes, #drupal-dojo</li>
<li>Full IRC chatroom list: <a  href="http://drupal.org/node/108355">http://drupal.org/node/108355</a></li>
<li>IRC tutorial: <a  href="http://www.irchelp.org/irchelp/irctutorial.html">http://www.irchelp.org/irchelp/irctutorial.html</a></li>
<li>Support Forum: <a  href="http://drupal.org/forum/18">http://drupal.org/forum/18</a></li>
<li>Module development support: <a  href="http://drupal.org/forum/4">http://drupal.org/forum/4</a></li>
<li>Theme development support: <a  href="http://drupal.org/forum/3">http://drupal.org/forum/3</a></li>
<li>Videocasts: <a  href="http://drupal.org/videocasts">http://drupal.org/videocasts</a></li>
</ul>
<p>Next we looked at some available helper modules. These are aimed at the Drupal developer. Chad covered the API module, for locally installing a copy of Drupal&#8217;s API documentation (and also, allowing you to view the documentation of contributed modules, which isn&#8217;t available at the official API documentation website). The Devel module, which is the holy grail of development assistance modules for Drupal. The Coder module, which reviews module code for standards, as well as aiding in upgrading Drupal 5 modules to Drupal 6. And last was the SimpleTest module which brings the SimpleTest framework to Drupal.  You can find these modules and more information in the links below:</p>
<ul>
<li><a  href="http://drupal.org/project/api">http://drupal.org/project/api</a></li>
<li><a  href="http://drupal.org/project/devel">http://drupal.org/project/devel</a></li>
<li><a  href="http://drupal.org/project/coder">http://drupal.org/project/coder</a></li>
<li><a  href="http://drupal.org/project/simpletest">http://drupal.org/project/simpletest</a></li>
</ul>
<p>Lastly, Chad gave us some tips on what we can do to become a Drupal ninja. They are:</p>
<ol>
<li>Master CVS and Project Management. Checkout the <a  href="http://drupal.org/handbook/cvs">CVS handbook</a>. Documentation for Project Managemetn is available at <a  href="http://drupal.org/handbook/cvs/projects">http://drupal.org/handbook/cvs/projects</a>.<br />
There was an question from the audience about integrating SVN into Drupal. The short answer: it would take more resources than are currently available to make this happen, and so much has been invested into CVS for Drupal. Too bad.</li>
<li>Use test scripts. One helpful example was copying and pasting the first two lines from index.php in your Drupal web root. These two lines alone fully bootstrap Drupal and will give you a fully functional Drupal site without any of the other bloat. It is very useful for quickly trying out a snippet of code. We also talked about using debug functions such as print_r(), var_dump(), var_export(), and exit().</li>
<li>And speaking of exit(), it was next on the tip list: exit() is your friend. Indeed it is. Use exit() to bisect your code flow until you locate the source of your problem</li>
<li>Study core&#8217;s code. Seriously, learn from the people who wrote Drupal. If it made it into core, it is generally assumed to be good quality code. And it definitely follows the coding standards. Also, this code is reviewed extensively by the community before it can make it in.</li>
<li>Clear your cache. You can use the Devel module to make this trivial, or you can use the mySQL TRUNCATE command on the cache tables in the database. Nevertheless, at some point in your Drupal development life, you will run into a moment where caching will make you want to pull your hair out when your wondering why your code changes aren&#8217;t taking effect.</li>
<li>Learn vi/vim. Basically, because it may be the only available editor on some environments you encounter. Fair enough.</li>
<li>Install the API documentation locally with the API module. See above notes.</li>
<li>Document your work. Good comments and documentation not only help your fellow developers, but help you understand why your making the decisions you are making with your code. It gives you a chance to stop and really think about what your code is doing (or supposed to be doing)</li>
<li>Finally: if your at the conference, attend the <a href="session:%20http://boston2008.drupalcon.org/session/zen-and-art-drupal">Zen and the Art of Drupal</a> session</li>
</ol>
<p>You can view the slide presentation here: <a  href="http://drupal5.xcarnated.com/node/22/s5">http://drupal5.xcarnated.com/node/22/s5</a></p>
<p>Also of note: this slide presentation was done using the <a  href="http://drupal.org/project/s5">s5 module</a> for Drupal. Pretty neat.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2008/03/03/drupalcon-boston-2008-session-one-from-drupal-newbie-to-drupal-ninja/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Memorial Day goodies</title>
		<link>http://blog.centresource.com/2007/05/28/memorial-day-goodies/</link>
		<comments>http://blog.centresource.com/2007/05/28/memorial-day-goodies/#comments</comments>
		<pubDate>Mon, 28 May 2007 20:10:41 +0000</pubDate>
		<dc:creator>Bob Marchman</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<category><![CDATA[apache]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[dns]]></category>

		<category><![CDATA[goodies]]></category>

		<category><![CDATA[jquery]]></category>

		<category><![CDATA[Links]]></category>

		<category><![CDATA[microformats]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2007/05/28/memorial-day-goodies/</guid>
		<description><![CDATA[Just in time for the BBQ&#8217;s, fireworks, and swimming- here&#8217;s a list of ten links that I gathered up with...]]></description>
			<content:encoded><![CDATA[<p>Just in time for the BBQ&#8217;s, fireworks, and swimming- here&#8217;s a list of ten links that I gathered up with a little something for everyone. Enjoy.</p>
<p><span id="more-534"></span></p>
<p>Current state of browser market shares:<br />
<a  class="moz-txt-link-freetext" href="http://www.w3counter.com/globalstats.php?date=2007-05-20">http://www.w3counter.com/globalstats.php?date=2007-05-20</a></p>
<p>Good and Bad PHP Code: An employer&#8217;s perspective<br />
http://www.sitepoint.com/blogs/2007/05/25/good-and-bad-php-code/</p>
<p>How to use Firebug to debug PHP<br />
http://ajax.phpmagazine.net/2007/02/how_to_use_firebug_to_debug_ph.html</p>
<p>Comprehensive guide to .htaccess<br />
http://www.wsabstract.com/howto/htaccess.shtml</p>
<p>Prettier accessibly forms w/ CSS<br />
http://www.alistapart.com/articles/prettyaccessibleforms/</p>
<p>TypeTester: Compare different fonts web output<br />
http://typetester.maratz.com/</p>
<p>MicroFormats blog: From the man who wrote the book on microformats<br />
http://microformatique.com/</p>
<p>15 Days of JQuery<br />
http://15daysofjquery.com/</p>
<p>Simply Google. Simply put.<br />
http://lloydi.com/blog/simplygoogleoriginal.htm</p>
<p>Along the same lines as simple google: FaganFinder<br />
http://www.faganfinder.com/</p>
<p>Hacking DNS for faster web browsing<br />
http://www.computerworld.com/action/article.do?command=printArticleBasic&#038;articleId=9019951</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2007/05/28/memorial-day-goodies/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cross-Browser Normalization</title>
		<link>http://blog.centresource.com/2007/01/30/cross-browser-normalization/</link>
		<comments>http://blog.centresource.com/2007/01/30/cross-browser-normalization/#comments</comments>
		<pubDate>Tue, 30 Jan 2007 22:05:07 +0000</pubDate>
		<dc:creator>Bob Marchman</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<category><![CDATA[best-practices]]></category>

		<category><![CDATA[browsers]]></category>

		<category><![CDATA[cross-browser]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[html]]></category>

		<category><![CDATA[normalization]]></category>

		<category><![CDATA[Web Design]]></category>

		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2007/01/30/cross-browser-normalization/</guid>
		<description><![CDATA[If you work in a web design or development firm, then you are probably already very (if not too) familiar...]]></description>
			<content:encoded><![CDATA[<p>If you work in a web design or development firm, then you are probably already very (if not too) familiar with the various idiosyncrancies across the major browsers. Even before you start to apply the stylesheets you can spot noticable differences in the way the browsers render the html. This is because the major browsers come with a default stylesheet they use to render html when nothing else is available. It is a very simple stylesheet, mainly affecting paragraphs, headings, links, and fonts. This is why, without any styling, unvisited links appear blue with an underline, among other things. While using links is a trivial example, small differences in font sizes and paragraph margins can become a headache and can cause you to start adding unnecessary fluff to your well crafted stylesheets. There are some techniques you can utilize to minimize the damage, or what we in the industry refer to as browser normalization.</p>
<p><span id="more-515"></span></p>
<p><!-- more -->First, I recommend you head on over to Yahoo Develper Network. The good people there have already taken most of the hard work out of browser normalization for you.  There are two stylesheets you can download. The first is called reset.css. It sets defaults values for paragraph margins, body tag margins and padding, and headings among other things. The next stylesheet you need to download is fonts.css. This does the same thing as reset.css, but for fonts.</p>
<p>These two files should be the first stylesheets you call in your html. This way, you are provided with a relatively clean slate across all browsers to begin working on your own stylesheet. The first time I tried this technique out, I started without the normalizing stylesheets and viewed my page in Firefox, IE 7, IE 6, and Opera.  I rapidly switched between the browsers to spot the differences. Some were very noticable, others not so much. I then applied my reset.css and fonts.css and repeated the same process. The result was very pleasing. Now, I was hard pressed to spot any differences.</p>
<p>BTW - While your visiting Yahoo, be sure to peek around. There are a ton of web designer and developer goodies up for grabs, as well as lots of literature to peruse.</p>
<p>The next thing I would recommend is getting in the habit of always using a DOCTYPE in your html. This is not only a good practice, but it is the standards compliant  way of writing markup. Having a DOCTYPE tells your browser how to parse your markup. Without it, the browser reverts to it&#8217;s own methods. In IE 6, it goes into what  is known as &#8216;quirks&#8217; mode. Not only is this non-standard, but who wants IE acting any more quirky than it already does? When you add a DOCTYPE, IE goes in to &#8220;strict&#8221; mode, which is more predictable for web design and development.</p>
<p>Of equal importance, is that when you have a DOCTYPE, you can now run your markup through a validator. If you are not familiar with validating your markup,  you should start to consider making it one of the most utilized tools in your web development arsenal. Running your markup through a validator allows you to  quickly catch syntax errors you would have otherwise spent hours looking for. It also insures that your markup is keeping up to standards. There are several types of DOCTYPES to choose from, the most common today being XHTML Transitional, and the holy grail of all - XHTML Strict. Having markup that validates XHTML Strict is not only a badge of pride, but it also means that your markup is accessible and well formed. As with everything, the caveat here is that the validator is not smart enough to analyze your content, just the markup. So, once your html is validating, it is your job to make sure your markup is meaningful and the content is ordered properly to be accessible to those with text-only browsers, screen readers, and mobile devices.</p>
<h3>Resources:</h3>
<p><strong>Yahoo Developer Network:</strong><br />
<a  href="http://developer.yahoo.com">http://developer.yahoo.com</a></p>
<p><strong>reset.css:</strong><br />
<a  href="http://developer.yahoo.com/yui/reset/">http://developer.yahoo.com/yui/reset/</a></p>
<p><strong>font.css:</strong><br />
<a  href="http://developer.yahoo.com/yui/fonts/">http://developer.yahoo.com/yui/fonts/</a></p>
<p><strong>W3C HTML validator:</strong><br />
<a  href="http://validator.w3.org/">http://validator.w3.org/</a></p>
<p><strong>W3C CSS validator:</strong><br />
<a  href="http://jigsaw.w3.org/css-validator/">http://jigsaw.w3.org/css-validator/</a></p>
<p><strong>IE - quirks and strict modes:</strong><br />
<a  href="http://www.quirksmode.org/css/quirksmode.html">http://www.quirksmode.org/css/quirksmode.html</a></p>
<p><strong>Other good resources for DOCTYPES:</strong><br />
<a  href="http://www.w3.org/QA/2002/04/valid-dtd-list.html">http://www.w3.org/QA/2002/04/valid-dtd-list.html</a><br />
<a  href="http://alistapart.com/stories/doctype/">http://alistapart.com/stories/doctype/</a><br />
<a  href="http://www.oreillynet.com/pub/a/javascript/synd/2001/08/28/doctype.html">http://www.oreillynet.com/pub/a/javascript/synd/2001/08/28/doctype.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2007/01/30/cross-browser-normalization/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Niftiest of Corners</title>
		<link>http://blog.centresource.com/2007/01/25/the-niftiest-of-corners/</link>
		<comments>http://blog.centresource.com/2007/01/25/the-niftiest-of-corners/#comments</comments>
		<pubDate>Thu, 25 Jan 2007 19:47:07 +0000</pubDate>
		<dc:creator>Bob Marchman</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[html]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[Nifty-Corners-Cube]]></category>

		<category><![CDATA[rounded-corners]]></category>

		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2007/01/25/the-niftiest-of-corners/</guid>
		<description><![CDATA[Nifty Corners Cube is a javascript library written by Alessandro Fulciniti that enables you to easily implement rounded corners on...]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.html.it/articoli/niftycube/index.html">Nifty Corners Cube</a> is a javascript library written by Alessandro Fulciniti that enables you to easily implement rounded corners on your page. There are many different utilities out there on the web that do basically the same thing, but you&#8217;ll be hard pressed to find one that does it any easier.</p>
<p>If you have ever attempted to implement rounded corners in your markup and css, you&#8217;ll find that your markup quickly becomes riddled with presentational divs, loads of images, and the css seems to be playing the role of a bar bouncer. It&#8217;s even worse if the content box you have rounded needs to be fluid in any  direction.<span id="more-514"></span></p>
<p><!-- more -->Nifty Corners Cube solves this for us in just a few lines of Javascript. Here&#8217;s how easy it is to get it going:</p>
<div style="font-size: 12px; font-style: italic; font-weight: bold; color: #247fab">window.onload = function<br />
{<br />
<strong>    Nifty(&#8221;#box_to_round&#8221;, &#8220;big top&#8221;);</strong><br />
}</div>
<p>In our example, we assign a window.onload function that will ensure our boxes  get rounded every time the page loads/refreshes. The function Nifty(), is where all the work takes place. It takes two parameters. The first parameter points to the id of the element we wish to round (any block level element that takes up space on the page will work). This can be a comma separated list of multiple elements, and it can accept certain CSS selectors. The second parameter is a space delimited list of options that tell Nifty Corners how to round the box. In this example, we used the options &#8216;big&#8217;, which says to make the corner radius 10 pixels (there is also small(2px), and the default normal(5px)), and we used &#8216;top&#8217;, which will only round  off the top two corners of the box.</p>
<p>There are several other options that allow you to fine tune your boxes. You can assign only one corner of a box to be rounded, and it even has built in support to create columns of rounded boxes. Also, you can call the Nifty() function as many times as you would like for as many elements as you need to. Just be sure to wrap them all in a window.onload (or the included NiftyLoad function).</p>
<p>Recently, we had a design to breakdown that made heavy use of rounded corners. For the first pass, we didn&#8217;t use Nifty Corners. The markup was laced with tons of nested divs, and the CSS file was accordingly huge. Though the design was functional, it was fragile. Any future redesigns would have required alot of work. We went back and implemented the same design using Nifty Corners, and found that we were able to easily keep the markup lean (and validate XHTML strict),  and the CSS file was reduced by nearly 800 lines. This means alot when time is money, and even more should the day come to redesign the site.</p>
<p>There are a couple of improvements I would like to see in future versions of Nifty Corners. Currently, Nifty Corners cannot support borders around your box. You can have a border set, but it will not round off with the rest of the box. Second, I would like to see better support for Safari. We found that it would work  on Safari for nearly all applications, but when we attempted to round off a grouping of list elements (which worked in every other browser we tested), it just  wasn&#8217;t happening. Reading up on his site, it seems that support for Safari is new to Nifty Corners, so perhaps it won&#8217;t be long before all the kinks are worked out.<br />
We tested Nifty Corners on Firefox 2, IE 7, IE 6, Opera 9, and Safari 2. It faired very well in all browsers (floats and padding couldn&#8217;t even break it in IE 6!).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2007/01/25/the-niftiest-of-corners/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CSS Cross-Browser Tricks</title>
		<link>http://blog.centresource.com/2006/11/12/css-tip-of-the-day/</link>
		<comments>http://blog.centresource.com/2006/11/12/css-tip-of-the-day/#comments</comments>
		<pubDate>Sun, 12 Nov 2006 18:29:49 +0000</pubDate>
		<dc:creator>Bob Marchman</dc:creator>
		
		<category><![CDATA[Web Design]]></category>

		<category><![CDATA[Web Development]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[html]]></category>

		<category><![CDATA[ie]]></category>

		<category><![CDATA[layout]]></category>

		<category><![CDATA[tips]]></category>

		<category><![CDATA[tricks]]></category>

		<category><![CDATA[Web design]]></category>

		<category><![CDATA[web-development]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2006/11/12/css-tip-of-the-day/</guid>
		<description><![CDATA[Anyone that has written HTML and CSS has undoubtedly, at one time or another, faced a major headache attempting to...]]></description>
			<content:encoded><![CDATA[<p>Anyone that has written HTML and CSS has undoubtedly, at one time or another, faced a major headache attempting to acheive crossbrowser display uniformity. It&#8217;s a problem that&#8217;s not going to go away anytime soon, so we all just have to live with it for the time being.</p>
<p>I&#8217;ve noticed over the years, that everyone has a different approach to tackling this issue. Some prefer to use multiple stylesheets, one always for IE, the other for everyone else. Some code one stylesheet, but forsake uniformity for subtle, sometimes unnoticable, differences. I myself have used  both of these techniques in the past. Not that there is anything wrong with either method; the end goal is to have a webpage that looks roughly the same in all the major browsers (IE 5-6, Firefox, Opera, Safari), and most importantly, without using tables for layout.</p>
<p><span id="more-504"></span></p>
<p>Recently, I discovered a technique that takes a little bit off the edge of that crossbrowser headache. It allows you to use a single stylesheet for the two big browsers (IE, Firefox), and not have to resort to &#8216;hacks&#8217; to get IE to cooperate. I&#8217;ve noticed that the standard is starting to lean towards a &#8216;design in Firefox - tweak for IE&#8217; mentality. This technique allows us to handle both browsers at the same time, without having to go back later and run in to the inevitable issues that crop up.</p>
<p>Enough talk. Let&#8217;s see some code.</p>
<p>We&#8217;ll start with an HTML snippet:</p>
<pre>&lt;div id="green"&gt;What color is this?&lt;/div&gt;</pre>
<p>Simple enough. Now, let&#8217;s style it so that our text is actually green on the page.</p>
<pre>#green { color: #00ff00; }</pre>
<p>Ok. Now, if we viewed this in any browser, the text &#8216;What color is this?&#8217; will be green. But what if we wanted the text to be blue in Internet Explorer, but stay green in Firefox? Hmm&#8230;do we use two stylesheets? Not anymore. Check this CSS out:</p>
<pre>#green { color: #0000ff; } /* make it blue for internet explorer */</pre>
<pre>body>#green { color: #00ff00; }  /* make it green for firefox */</pre>
<p>What&#8217;s happening here? Well, when Internet Explorer is parsing through this stylesheet, it comes to the first #green tag. Nothing out of the ordinary here, so it parses it just fine. Then it comes to the next tag, body>#green. Internet Explorer 6 and below does not recognize the &#8216;>&#8217; selector (which is referred to as the child selector), so it doesn&#8217;t parse it. But Firefox and Opera support the child selector, so following the rules of cascading, Firefox would render the tag correctly, while IE only renders the first tag. Cool, huh?</p>
<p>Of course, my example is trivial. This really comes in handy when dealing with positioning issues such as the differences between how IE and Firefox handle the box model, padding, margins, and floats.</p>
<p>There are some rules to follow when using this technique:</p>
<p>1-  The IE element should come first in the stylesheet (they don&#8217;t call it cascading stylesheets for nothing!)</p>
<p>2- There should be no white space surrounding the child selector:</p>
<pre>#container > #green { color: #00ff00; } /* This won't work! */

#container>#green { color: #00ff00; } /* This will! */</pre>
<p>3- When using the child selector (>), the element on the left should be the direct parent of the element you wish to effect.</p>
<p>For example, if we had had the following html in our earlier example:</p>
<pre>&lt;div id="container"&gt;

&lt;div id="green"&gt;What color is this?&lt;/div&gt;</pre>
<pre>&lt;/div&gt;</pre>
<p>We would have wanted our stylesheet to look like this:</p>
<pre>#green { color: #0000ff; }  /* blue for IE */
#container>#green { color: #00ff00; } /* #container is the direct parent of #green */</pre>
<p>That&#8217;s it. No other rules needed. I find that this technique really saves me time now when it comes to doing css layout. I can handle positioning an element in both browsers at the same time, instead of coming back to it later to tweak.Of note: IE7 now supports the use of child selectors. So, when your coding your css, keep in mind that IE6 and below won&#8217;t understand the selector, but IE7 will. Also, IE7 won&#8217;t support the old &#8220;star hack&#8221; that many a css designer have used in the past to hide styles from IE.</p>
<p>For more information on crossbrowser CSS, as well as the discussed techniques and &#8217;star hack&#8217; visit these links:</p>
<p><a  href="http://www.quirksmode.org/css/contents.html">http://www.quirksmode.org/css/contents.html</a></p>
<p><a  href="http://www.webcredible.co.uk/user-friendly-resources/css/internet-explorer-7.shtml">http://www.webcredible.co.uk/user-friendly-resources/css/internet-explorer-7.shtml</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2006/11/12/css-tip-of-the-day/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Virtuemart vs. osCommerce &#8212; first glance</title>
		<link>http://blog.centresource.com/2006/10/12/virtuemart-vs-oscommerce-first-glance/</link>
		<comments>http://blog.centresource.com/2006/10/12/virtuemart-vs-oscommerce-first-glance/#comments</comments>
		<pubDate>Thu, 12 Oct 2006 15:16:28 +0000</pubDate>
		<dc:creator>Bob Marchman</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<category><![CDATA[joomla]]></category>

		<category><![CDATA[open-source]]></category>

		<category><![CDATA[oscommerce]]></category>

		<category><![CDATA[virtuemart]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2006/10/12/virtuemart-vs-oscommerce-first-glance/</guid>
		<description><![CDATA[Installation
Virtuemart:

&#60;5 minutes (if you have a working installation of Joomla, &#60;10 minutes otherwise).
Installs as a module for...]]></description>
			<content:encoded><![CDATA[<h2 style="font-family: Verdana; font-size: 18px">Installation</h2>
<p><strong>Virtuemart:</strong></p>
<ul>
<li>&lt;5 minutes (if you have a working installation of Joomla, &lt;10 minutes otherwise).</li>
<li>Installs as a module for Joomla. Click upload &#038; install from module installer pane, and viola!</li>
<li>Package comes with two Joomla components, two mambots, and several plug-in modules that offer added functionality (i.e. minicart, top 10 products list).</li>
<li>Includes sample data for a demo store.</li>
<li>Uses Joomla&#8217;s admin interface for store administration</li>
</ul>
<p><strong>osCommerce:</strong></p>
<ul>
<li>&lt;10 minutes.</li>
<li>Includes sample data for a demo store.</li>
<li>Comes with admin interface.</li>
</ul>
<p><span id="more-500"></span></p>
<h2 style="font-family: Verdana; font-size: 18px">Features</h2>
<h6>(as stated on the websites for each product)</h6>
<p><strong><u>Virtuemart:</u></strong><br />
<u>Products/Categories:</u></p>
<p>Add as many Products and Categories as you want<br />
Can also be used just as a catalogue (without cart features)<br />
Unlimited Category/Subcategory depth, products can be assigned to multiple categories<br />
Sort your Categories the way you like<br />
Sell downloadable Products like MP3s, Templates, Videos or Software<br />
Add a Thumbnail and a full size Image to every Product via your Browser<br />
Add Attributes like Size or Color to your Products to offer product variations<br />
Use Product Discounts (percantage/total, time limited or not)<br />
Show Details &#038; images for every Item<br />
CSV Upload, (CSV Import &#038; Export)<br />
Manage the Stock Level for Products and Items<br />
Automatically Notify Shoppers when a Product is back in Stock<br />
Feature specific products by setting them “on special”</p>
<p><u>Shopper Groups / User Management</u></p>
<p>Add Shoppers and assign them to different shopper groups<br />
global Shopper Group Discounts<br />
multiple prices can be added to a Product, each for an own shopper group or a quantity range<br />
Restrict “Display prices” to specific user groups<br />
Access Management: assign users to user groups like “admin”, “storeadmin”, “shopper” or “demo” to allow the administration by other users</p>
<p><u>(assign products to vendors and allow those vendors to maintain only their products)<br />
Easy Configuration / Customization</u></p>
<p>Manage your shop through an easy and completely Joomla/Mambo-integrated interface<br />
A “Welcome Screen” shows your daily Shop Statistics: A Summary with “number of customers”, “number of orders”, “5 newest customers” and so on<br />
capable of Frontend Administration (without having to login into the Backend of Joomla/Mambo)<br />
global Price/Currency Display Formatting<br />
Templates for Product Display Pages<br />
Extend the Shop with other Modules and Functions<br />
Manage different Currencies, Countries</p>
<p><u>Shipping Addresses / Rates</u></p>
<p>Shoppers can add individual Shipping Addresses<br />
Fetch Shipping rates live from Intershipper, USPS, UPS, Canada Post, &#8230;<br />
Write your own Shipping Modules using the Shipping API</p>
<p><u>Tax Rates</u></p>
<p>Product prices can be displayed “including tax” or not (set for each shopper group)<br />
Choose between Shipping-Address-based tax calculation (city/state &#038; country/region)</p>
<p><u>OR</u></p>
<p>Store-Owner-based tax calculation (e.g. in european countries)<br />
Add your own shipping carriers and shipping rates</p>
<p><u>Payment</u></p>
<p>Use safe SSL encryption (128-bit) and Shared SSL<br />
Capable of live credit card processing<br />
Supported Payment Providers:</p>
<p>o authorize.net online Credit Card Processing (AIM)</p>
<p>o 2Checkout<br />
o PayPal (with IPN gateway)<br />
o Paymate<br />
o NoChex<br />
o WorldPay &#8220;IPN&#8221;<br />
o PayMeNow<br />
o eCheck.net<br />
o eWay (XML transactions)<br />
o eProcessingNetwork<br />
o and more&#8230;<br />
* Payment Module API for custom payment modules&#8230;</p>
<p>Order Management</p>
<p>Complete Order Management<br />
Automatically notify your customers when the Order Status changes<br />
See who has ordered: IP address storing<br />
Extend the pre-defined order statuses with your own ones</p>
<p><u>&#8220;Nice&#8221; Features for Customers&#8230;</u></p>
<p>Let your customers easily search for products through a search form<br />
Shoppers can see, in what time a product will usually ship, on product-details page (with nice images!)<br />
Shoppers can manage their user accounts<br />
Shopper can view all their orders (and order details)<br />
Order Confirmation mail (customizable!) is sent to shopper and store owner</p>
<p><u>Joomla! / Mambo Integration</u></p>
<p>Registration while checkout automatically registers the user to the global user table (registration is necessary for purchasing items)<br />
Complete integration of the layout using Joomla!’s standard CSS styles<br />
Easy installation / uninstallation using the Joomla/Mambo Installer</p>
<p><u>Free VirtueMart hacks/tweaks/modules</u></p>
<p><u>(made vailable from the community, and growing daily!)</u></p>
<p>Zone Shipping Module from Zephware.com<br />
Flypage Admin Link for phpShop<br />
Latest Products for phpShop (as a seperate module)<br />
Mini Cart for phpShop (also available as a separate module)<br />
Random Products for phpShop (as a seperate module)<br />
Featured Products for phpShop (as a seperate module)<br />
Special Products Manager for phpShop<br />
Report Basic (for statistical purposes)</p>
<h2 style="font-family: Verdana; font-size: 18px">osCommerce:</h2>
<p><strong>General Functionality</strong></p>
<ul>
<li>Compatible with all PHP 4 versions</li>
<li>All features enabled by default for a complete out-of-the-box solution</li>
<li>Object oriented backend (MS3)</li>
<li>Completely multilingual with English, German, and Spanish provided by default</li>
</ul>
<p><strong>Setup / Installation</strong></p>
<ul>
<li>Automatic web-browser based installation and upgrade procedure</li>
</ul>
<p><strong>Design / Layout</strong></p>
<ul>
<li>Template struture implementation to:
<ul>
<li>allow layout changes to be adaptive, easy, and quickly to make (MS3)</li>
<li>allow easy integration into an existing site (MS3)</li>
</ul>
</li>
<li>Support for dynamic images</li>
</ul>
<p><strong>Administration / Backend Functionality</strong></p>
<ul>
<li>Supports unlimited products and categories</li>
<li>Products-to-categories structure</li>
<li>Categories-to-categories structure</li>
<li>Add/Edit/Remove categories, products, manufacturers, customers, and reviews</li>
<li>Support for physical (shippable) and virtual (downloadable) products</li>
<li>Administration area secured with a username and password defined during installation (MS3)</li>
<li>Contact customers directly via email or newsletters</li>
<li>Easily backup and restore the database</li>
<li>Print invoices and packaging lists from the order screen</li>
<li>Statistics for products and customers</li>
<li>Multilingual support</li>
<li>Multicurrency support</li>
<li>Automatically update currency exchange rates</li>
<li>Select what to display, and in what order, in the product listing page</li>
<li>Support for static and dynamic banners with full statistics</li>
</ul>
<p><strong>Customer / Frontend Functionality</strong></p>
<ul>
<li>All orders stored in the database for fast and efficient retrieval</li>
<li>Customers can view their order history and order statuses</li>
<li>Customers can maintain their accounts</li>
<li>Addressbook for multiple shipping and billing addresses</li>
<li>Temporary shopping cart for guests and permanent shopping cart for customers</li>
<li>Fast and friendly quick search and advanced search features</li>
<li>Product reviews for an interactive shopping experience</li>
<li>Forseen checkout procedure</li>
<li>Secure transactions with SSL</li>
<li>Number of products in each category can be shown or hidden</li>
<li>Global and per-category bestseller lists</li>
<li>Display what other customers have ordered with the current product shown</li>
<li>Breadcrumb trail for easy site navigation</li>
</ul>
<p><strong>Product Functionality</strong></p>
<ul>
<li>Dynamic product attributes relationship</li>
<li>HTML based product descriptions</li>
<li>Automated display of specials</li>
<li>Control if out of stock products can still be shown and are available for purchase</li>
<li>Customers can subscribe to products to receive related emails/newsletters</li>
</ul>
<p><strong>Payment Functionality</strong></p>
<ul>
<li>Accept numerous offline payment processing (cheque, money orders, offline credit care processing, ..)</li>
<li>Accept numerous online payment processing (2CheckOut, PayPal, Authorize.net, iPayment, ..)</li>
<li>Disable certain payment services based on a zone basis</li>
</ul>
<p><strong>Shipping Functionality</strong></p>
<ul>
<li>Weight, price, and destination based shipping modules</li>
<li>Real-time quotes available (UPS, USPS, FedEx, ..)</li>
<li>Free shipping based on amount and destination</li>
<li>Disable certain shipping services based on a zone basis</li>
</ul>
<p><strong>Tax Functionality</strong></p>
<ul>
<li>Flexible tax implementation on a state and country basis</li>
<li>Set different tax rates for different products</li>
<li>Charge tax on shipping on a per shipping service basis</li>
</ul>
<p><u><strong>Thoughts:</strong>  </u><br />
Both products support alot of the same features. Customizable products, carts, shopper account administration, reports, etc&#8230; Virtuemart definitely benefits over osCommerce when it comes to extensibility. If you are familiar with Joomla&#8217;s framework and templating system,  then the sky&#8217;s the limit when it comes to extending virtuemart. osCommerce, while certaintly popular, is difficult for the developer wade through,  lacking meaningful comments and a having a code structure that is haphazard at best. osCommerce and Virtuemart are both easy to administrate from each others&#8217;  respective admin interfaces.</p>
<p><u><strong>Virtuemart Pros:</strong></u></p>
<ul>
<li>Fast and easy installation and configuration.</li>
<li>Easy to customize and extend.</li>
<li>Shopper groups (vendors, guests, whatever your heart desires. Product prices and descriptions can vary from group to group).</li>
<li>Small codebase, easy to develop for. (it&#8217;s just a Joomla module)</li>
<li>Easy to adminstrate.</li>
</ul>
<p><u><strong>Cons:</strong></u></p>
<ul>
<li>Still quite a bit on the CVS to-do list. (some functionality could require development if needed immediately)</li>
<li>Not stand-alone. Requires Joomla to function.</li>
<li>Must learn Joomla framework (or at least how to write Joomla modules and templates) to develop custom functionality.</li>
</ul>
<p><u><strong>osCommerce Pros:</strong></u></p>
<ul>
<li>Fast and easy installation and configuration.</li>
<li>Vetted. Though still a development release, it is widely popular and thus has a larger support base.</li>
<li>Lots of plug-ins. Chances are, any feature you need, has already been written by someone else.</li>
<li>Supports most e-commerce standard features out-of-box.</li>
</ul>
<p><u><strong>Cons:</strong></u></p>
<ul>
<li>Large and overly complex code base. Difficult to extend or modify.</li>
</ul>
<p><u><strong>Final thoughts: </strong></u><br />
Still waiting for the &#8220;holy grail&#8221; e-commerce solution. osCommerce comes close in functionality, but from the developer&#8217;s perspective,  the code could really benefit from a reorganization and some general TLC. Better comments, cleaner code layout, and a more thought out class  structure would definitely boost osCommerce&#8217;s standing among developers. If Joomla continues to grow as (probably) the best web CMS out there, Virtuemart could give osCommerce a run for its money. Having the advantage of being fully integrated into a very rich CMS, managing Virtuemart  becomes almost trivial.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2006/10/12/virtuemart-vs-oscommerce-first-glance/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
