Adventures with TYPO3

Posted in Blog, Technology on July 25th, 2008

As I suspected, it was only a matter of time before some new fun project wrestled control of my free time away from this blog. I’ve begun experimenting with a CMS I found called TYPO3. From what I can tell, its not extremely popular in the US, and it’s targeted at small-to-mid-level business applications; so it was kind of off of my radar as a personal user.

I came upon it because it had one feature I was looking for in particular: the ability to host multiple websites from a single administrative interface. Big name Open Source CMSes like Mambo, Joomla!, and e107 have plugins or methods which provide this or something close, but they seem very hacked-together and not really what they were intended for. Specifically, creating a new website cannot be done from within the administrative interface, and usually involves some symlinking.

TYPO3 is different because it bases it’s ability to host multiple sites on an extension of the natural tree structure of the site. At any point in the website tree, you can assign additional URLs which are intercepted when they come in and pointed to the correct portion of the tree. For example, if TYPO3 is installed in the root of your web server, and accessed by www.your1stdomain.org, and you’ve set it up correctly, it would return a website based on a different portion of the tree than if it were accessed by www.your2nddomain.org, even though they both resolve to the same IP address.

This was the first unique feature that drew my attention to TYPO3, but I have been impressed by some of it’s other abilities as well. It has a plugin (which is almost so commonly installed that it shouldn’t really be considered a separate piece of software) which allows you to base your website design on a static HTML file, and replace certain sections with content or navigation, based on the id attributes of the elements. You don’t even actually modify the HTML file unless you need additional ids to work with; all the conversion from static HTML to dynamic content is handled by a third entity, written in a language called TypoScript.

This adds to the learning curve of the software since there is a whole new language to learn, but it adds the ability to change the HTML template quite a bit without having to update the corresponding TypoScript, especially if the HTML is well written (using CSS, etc). This means that you can have someone who knows very little about dynamic websites or their implementation details write the HTML and CSS for you, and just convert it to a dynamic website using TypoScript. Also, it allows you to reuse the same TypoScript for many different website designs.

TYPO3 also has a good user management system and UNIX-like permissions. A user can also be restricted to a specific part of the page tree, say, a certain website, or just their homepage. It also has the ability to assign tasks to users with a workflow cycle e.g. Assign->Write->Review->Publish, as well as multiple workspaces (Draft and Live by default) and complete revision history.

I realize that most of these features don’t really help me as someone who runs their own website with little input from others, but I’m so excited about how cool they are that I might migrate my website over (excepting the WordPress of course, I’ve put too much investment in it, and it is an excellent blogging engine). There are some uses I can think of for having a multi-user CMS on my site as well: the SF3 website for example. I was looking through my homepage just now and realized how incredibly out of date both the information and the style is; though the code is as beautiful as ever. (I hand-wrote it back in 2005).

And so unfortunately I think my blog-enhancement project might get put on hold for now. Sarah bought me a journal (an actual paper one!) which makes private posts that just she can see kind of redundant, thus I’ve lost some of my motivation for the private posts plugin. One day I’ll come back to it, hopefully before WordPress advances 6 minor versions like it did the last time I stopped development on it.  :oops: