<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Which Ruby CMS Should I use</title>
 <link href="http://whichrubycmsshouldiuse.com/atom.xml" rel="self"/>
 <link href="http://whichrubycmsshouldiuse.com/"/>
 <updated>2010-02-24T03:28:40+00:00</updated>
 <id>http://whichrubycmsshouldiuse.com/</id>
 <author>
   <name>Youssef Chaker</name>
   <email>ychaker@o19s.com</email>
 </author>
 
 
 <entry>
   <title>Radiant Acts As Solr Extension</title>
   <link href="http://whichrubycmsshouldiuse.com/2010/02/23/radiant-acts-as-solr-extension.html"/>
   <updated>2010-02-23T00:00:00+00:00</updated>
   <id>http://whichrubycmsshouldiuse.com/2010/02/23/radiant-acts-as-solr-extension</id>
   <content type="html">&lt;p&gt;I set out to try and build an extension for Radiant that would incorporate Solr search into the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;. First thing I have to say is:&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;WOW&lt;/span&gt;!&lt;/p&gt;
&lt;p&gt;It is not an easy task to accomplish. What I wanted to provide is a fully customizable configuration to Solr with the ability for the user to select certain settings, which tables to index, etc. A bit à la Drupal&amp;#8217;s &lt;a href=&quot;http://drupal.org/project/apachesolr&quot; title=&quot;Drupal&amp;#39;s Apache Solr Module&quot;&gt;Apache Solr Module&lt;/a&gt; but for Radiant (of course). That is easier said than done, the Drupal module is big and provides a good amount of features and customizations. I only had a few days to have a usable product (by few I mean less than a week).&lt;/p&gt;
&lt;p&gt;I definitely could not build something from scratch, so I turned my focus towards building something on top of a library/plugin/gem that has been built for Rails. The one that pops up in all the searches is the &lt;a href=&quot;http://github.com/mattmatt/acts_as_solr&quot; title=&quot;Acts As Solr Plugin for Rails&quot;&gt;acts_as_solr pluging&lt;/a&gt;. The plugin is easy to use, check the &lt;a href=&quot;http://wiki.github.com/mattmatt/acts_as_solr/&quot; title=&quot;Acts As Solr Wiki&quot;&gt;wiki page&lt;/a&gt; for more information. Unfortunately the life of the plugin has had some ups and downs, twists and turns. The repository has been forked many times on GitHub and it is unclear what its future will be. Regardless, it will be a start&amp;#8230;&lt;/p&gt;
&lt;p&gt;Before going on about the extension, I wanted to share something cool. If you are a Rails developer, you&amp;#8217;ve probably heard of &lt;a href=&quot;http://github.com/aslakhellesoy/cucumber&quot; title=&quot;Cucumber on GitHub&quot;&gt;cucumber&lt;/a&gt;. I had used rspec on my Rails projects and I try to use a new or different tool each time I start a new project, factory_girl was an example for my last fun project, and cucumber is what I wanted to try out this time. Unfortunately I didn&amp;#8217;t do much with it this time around, but when I installed it for the temp app I was planning on using for developing the extension I got some blinking &lt;i&gt;stuff&lt;/i&gt; (what might be seen as blinking cucumbers) in the console. Here&amp;#8217;s the screenshots:&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/cucumber_a_screenshot.png&quot;&gt;&lt;img src=&quot;/images/cucumber_a_screenshot.png&quot; title=&quot;Cucumber Screenshot&quot; alt=&quot;Cucumber Screenshot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/cucumber_b_screenshot.png&quot;&gt;&lt;img src=&quot;/images/cucumber_b_screenshot.png&quot; title=&quot;Cucumber Screenshot&quot; alt=&quot;Cucumber Screenshot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Back to the extension&amp;#8230;&lt;/p&gt;
&lt;p&gt;What I decided to do is create a search controller and a search page. The search page will include the search form and the facets if they exist. The controller will handle filtering the search results based on the selected facet. The following screenshots illustrate the search page:&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/search_page_screenshot.png&quot;&gt;&lt;img src=&quot;/images/search_page_screenshot.png&quot; title=&quot;Search Page Screenshot&quot; alt=&quot;Search Page Screenshot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/search_form_screenshot.png&quot;&gt;&lt;img src=&quot;/images/search_form_screenshot.png&quot; title=&quot;Search Form Screenshot&quot; alt=&quot;Search Form Screenshot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/facets_all_screenshot.png&quot;&gt;&lt;img src=&quot;/images/facets_all_screenshot.png&quot; title=&quot;All Facets Screenshot&quot; alt=&quot;All Facets Screenshot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/facets_reduced_screenshot.png&quot;&gt;&lt;img src=&quot;/images/facets_reduced_screenshot.png&quot; title=&quot;Reduced Facets Screenshot&quot; alt=&quot;Reduced Facets Screenshot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Each section of the page is in its own partial, and the layout of the page can controlled through &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt;, which will control where the facets div will be placed in relation to the results div. The extension is configurable through a &lt;span class=&quot;caps&quot;&gt;YAML&lt;/span&gt; file, where the admin can specify which models are to be indexed, which fields for each model to index and which fields to include in the facets, and among the configuration options is the layout from which the search page will inherit.&lt;/p&gt;
&lt;p&gt;I installed the extension in the demo instance that I used in my previous posts, and specified the layout that I created then to be the one used for the search page, as is shown in this screenshot:&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/solr_in_demo.png&quot;&gt;&lt;img src=&quot;/images/solr_in_demo.png&quot; title=&quot;Solr in Demo App Screenshot&quot; alt=&quot;Solr in Demo App Screenshot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;For more information, check out the &lt;a href=&quot;http://github.com/ychaker/radiant-acts_as_solr-extension&quot; title=&quot;ActsAsSolr Radiant Extension on GitHub&quot;&gt;GitHub repository&lt;/a&gt; or on the Radiant extensions registry &lt;a href=&quot;http://ext.radiantcms.org/extensions/201-acts-as-solr&quot; title=&quot;Radiant Extensions Registry Link&quot;&gt;entry&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There is definitely a lot left to do, but this is a start! I hope it will be a useful extension for people and feel free to grab the source and improve it as you see fit.&lt;/p&gt;






</content>
 </entry>
 
 <entry>
   <title>Evaluation for Project</title>
   <link href="http://whichrubycmsshouldiuse.com/2010/02/10/evaluation-for-project.html"/>
   <updated>2010-02-10T00:00:00+00:00</updated>
   <id>http://whichrubycmsshouldiuse.com/2010/02/10/evaluation-for-project</id>
   <content type="html">&lt;p&gt;I have been commissioned to prepare an evaluation for which &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; best fits a project with the following criteria:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Ability to publish news articles&lt;/li&gt;
	&lt;li&gt;A Blog&lt;/li&gt;
	&lt;li&gt;A Forum/Message Board&lt;/li&gt;
	&lt;li&gt;Newsletters&lt;/li&gt;
	&lt;li&gt;Multimedia (videos and public service announcements)&lt;/li&gt;
	&lt;li&gt;Static Pages&lt;/li&gt;
	&lt;li&gt;Community&lt;/li&gt;
	&lt;li&gt;Users with different privileges relating to the different parts of the site&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The site will server as a source for people suffering from certain difficulties (will keep that under wraps for privacy reasons) where they can find helpful information and support for dealing with their situation. The individuals in question will be able to come to the site to have their questions answered or find valuable information that will be helpful to them. The site will also perform the role of a community portal where members will be able to post to a forum or receive the latest information through news articles or blog posts.&lt;/p&gt;
&lt;p&gt;The &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; will have to allow for many scenarios including the ability for certain users to have the required privileges to post the static content of the site, such as an &amp;#8220;Information&amp;#8221; page or a &amp;#8220;&lt;span class=&quot;caps&quot;&gt;FAQ&lt;/span&gt;&amp;#8221; page. Other users will be allowed to post news articles and some will have privileges to post blog posts. The &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; needs to also allow for user registrations and those users will then have user profiles, the ability to post and read messages in the forum and will be listed in the &amp;#8220;Community&amp;#8221; page where other registered users can track their activity.&lt;/p&gt;
&lt;p&gt;The concept of the site is not new, many existing websites follow the same idea. My mission is to provide an evaluation of the Ruby &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; options that would provide the best platform to accomplish this goal.&lt;/p&gt;
&lt;p&gt;One way to figure out if a certain &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; is capable of providing certain functionality is to search through the extensions list. A CMS&amp;#8217;s primary function is to provide an easy way to create a website that is content heavy but where most of the content is static, so we do not have to worry about that aspect of the project. So here is a list of extensions for each &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; that might contribute to the solution we are looking for:&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;th&gt;&lt;/th&gt;
		&lt;th&gt;BrowserCMS&lt;/th&gt;
		&lt;th&gt;Radiant&lt;/th&gt;
		&lt;th&gt;adva-cms (all the extensions come with the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;, look at the previous posts for more info)&lt;/th&gt;
		&lt;th&gt;Wild Card Entry: &lt;a href=&quot;communit-engine-home&quot; title=&quot;Community Engine Home Page&quot;&gt;Community Engine&lt;/a&gt; &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;News&lt;/th&gt;
		&lt;td&gt; &lt;a href=&quot;http://github.com/browsermedia/bcms_news&quot; title=&quot;BrowserCMS News Module&quot;&gt;news&lt;/a&gt;	&lt;/td&gt;
		&lt;td&gt; &lt;a href=&quot;http://ext.radiantcms.org/extensions/70-news&quot; title=&quot;Radiant News Extension&quot;&gt;news&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; &lt;/td&gt;
		&lt;td&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;Blog&lt;/th&gt;
		&lt;td&gt;	&lt;a href=&quot;http://github.com/browsermedia/bcms_blog&quot; title=&quot;BrowserCMS Blog Module&quot;&gt;blog&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; Radiant is built to support blogs out of the box but a couple of extensions provide more support: &lt;a href=&quot;http://ext.radiantcms.org/extensions/30-blog&quot; title=&quot;Radiant Blog Extension&quot;&gt;blog&lt;/a&gt; &amp;#8211; &lt;a href=&quot;http://ext.radiantcms.org/extensions/38-blog-tags&quot; title=&quot;Radiant Blog Tags Extension&quot;&gt;blog-tags&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; adva_blog &lt;/td&gt;
		&lt;td&gt; built in &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;Forum&lt;/th&gt;
		&lt;td&gt; &lt;/td&gt;
		&lt;td&gt; &lt;a href=&quot;http://ext.radiantcms.org/extensions/156-forum&quot; title=&quot;Radiant Forum Extension&quot;&gt;forum&lt;/a&gt; &amp;#8211; &lt;a href=&quot;http://ext.radiantcms.org/extensions/160-group-forum&quot; title=&quot;Radiant Group Forum Extension&quot;&gt;group-forum&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; adva_forum &lt;/td&gt;
		&lt;td&gt; built in &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;Newsletters&lt;/th&gt;
		&lt;td&gt;	&lt;/td&gt;
		&lt;td&gt; &lt;a href=&quot;http://ext.radiantcms.org/extensions/155-reader&quot; title=&quot;Radiant Reader Extension&quot;&gt;reader&lt;/a&gt; &amp;#8211; &lt;a href=&quot;http://ext.radiantcms.org/extensions/159-reader-group&quot; title=&quot;Radiant Reader Group Extension&quot;&gt;reader-group&lt;/a&gt;. The reader extension is used across the board (users registration, forum, etc.) &lt;/td&gt;
		&lt;td&gt; adva_newsletter &lt;/td&gt;
		&lt;td&gt; built in through private messaging &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;Multimedia&lt;/th&gt;
		&lt;td&gt;	available through attachments &lt;/td&gt;
		&lt;td&gt; &lt;a href=&quot;http://ext.radiantcms.org/extensions/20-paperclipped&quot; title=&quot;Radiant Paperclipped Extension&quot;&gt;paperclipped&lt;/a&gt; &amp;#8211; &lt;a href=&quot;http://ext.radiantcms.org/extensions/166-paperclipped-player&quot; title=&quot;Radiant Paperclipped Player Extension&quot;&gt;paperclipped-player&lt;/a&gt; &amp;#8211; &lt;a href=&quot;http://ext.radiantcms.org/extensions/165-paperclipped-uploader&quot; title=&quot;Radiant Paperclipped Uploader Extension&quot;&gt;paperclipped-uploader&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; &lt;/td&gt;
		&lt;td&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;Community/Users&lt;/th&gt;
		&lt;td&gt;	&lt;/td&gt;
		&lt;td&gt; &lt;a href=&quot;http://ext.radiantcms.org/extensions/122-members&quot; title=&quot;Radiant Members Extension&quot;&gt;members&lt;/a&gt; &amp;#8211; &lt;a href=&quot;http://ext.radiantcms.org/extensions/155-reader&quot; title=&quot;Radiant Reader Extension&quot;&gt;reader&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; adva_user &amp;#8211; adva_activity &lt;/td&gt;
		&lt;td&gt; built in &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Judging from the table above, it is easy to say that Radiant is ahead of all the other options. What Radiant does not provide out of the box, it makes up for through its extensions. Radiant&amp;#8217;s extensions are the most developed and extensive. But if you have been following along with the posts you should know that Radiant is less flexible than the other mentioned &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; projects. Radiant allows you to extend its functionality only through creating extensions. Which means that if additional requirements come up and those requirements have not been covered by existing Radiant extensions, fulfilling those requirements might be a more challenging task. Community Engine presents a good case for itself. Although it might be missing one or two key functions, it covers the majority of the requirements. Unfortunately, I have heard from fellow developers that, unlike what the website says, developing for Community Engine is a pain and not recommended. BrowserCMS and adva_cms are the most flexible of the bunch, BrowserCMS in particular provides the easier interface to develop for, and they both plug-in to your application, so you have the freedom to create a custom app that hooks into your &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;The question then becomes: is it worth it to opt for flexibility in developing custom functionality over existing ones?&lt;/p&gt;
&lt;p&gt;Developing for Radiant is possible, just more tedious compared to BrowserCMS. Additional requirements are not guaranteed and it does not seem prudent to choose a solution other than Radiant since it provides an easy implementation for each item in the current set of requirements.&lt;/p&gt;
&lt;p&gt;Given a bigger budget and more time (more than 5 weeks for the entire implementation and launch), it would have been interesting to develop the site using BrowserCMS and extract from the end product the missing modules (forum, newsletter &amp;#8230;) and make those available for the community. As the situation stands though, Radiant looks to be the favorite for this project.&lt;/p&gt;












</content>
 </entry>
 
 <entry>
   <title>Recap of First Two Weeks</title>
   <link href="http://whichrubycmsshouldiuse.com/2010/01/12/recap-of-first-two-weeks.html"/>
   <updated>2010-01-12T00:00:00+00:00</updated>
   <id>http://whichrubycmsshouldiuse.com/2010/01/12/recap-of-first-two-weeks</id>
   <content type="html">&lt;p&gt;Time for a recap. Most of you are probably been waiting for this post. This is the results post, where I break down the experience gained from the past couple of weeks and try to give you all the information you need, as organized as possible, to make a decision on &lt;i&gt;Which Ruby &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; Should You Use&lt;/i&gt; when starting your next project.&lt;/p&gt;
&lt;p&gt;In the past few weeks I have mainly discussed three Ruby &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; projects that are available but a few others are also worthy candidates. And here is what I have learnt.&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;th&gt;&lt;/th&gt;
		&lt;th&gt;Drupal&lt;/th&gt;
		&lt;th&gt;BrowserCMS&lt;/th&gt;
		&lt;th&gt;Radiant&lt;/th&gt;
		&lt;th&gt;adva-cms&lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;Links&lt;/th&gt;
		&lt;td&gt;	&lt;a href=&quot;http://drupal.org/&quot; title=&quot;Drupal Homepage Link&quot;&gt;homepage&lt;/a&gt; &amp;#8211; &lt;a href=&quot;http://drupal.org/handbooks&quot; title=&quot;Drupal Documentation Link&quot;&gt;documentation&lt;/a&gt; &amp;#8211; &lt;a href=&quot;http://drupal.org/project/modules&quot; title=&quot;Drupal Modules Repo Link&quot;&gt;modules repo&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; &lt;a href=&quot;http://www.browsercms.org/&quot; title=&quot;BrowserCMS Homepage Link&quot;&gt;homepage&lt;/a&gt; &amp;#8211; &lt;a href=&quot;http://github.com/browsermedia/browsercms&quot; title=&quot;BrowserCMS Repo Link&quot;&gt;repo&lt;/a&gt; &amp;#8211; &lt;a href=&quot;http://www.browsercms.org/doc/guides/html/index.html&quot; title=&quot;BrowserCMS Documentation Link&quot;&gt;documentation&lt;/a&gt; &amp;#8211; &lt;a href=&quot;http://github.com/browsermedia/&quot; title=&quot;BrowserCMS Modules Repo Link&quot;&gt;modules repo&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; &lt;a href=&quot;http://radiantcms.org/&quot; title=&quot;Radiant Homepage Link&quot;&gt;homepage&lt;/a&gt; &amp;#8211; &lt;a href=&quot;http://github.com/radiant/radiant&quot; title=&quot;Radiant Repo Link&quot;&gt;repo&lt;/a&gt; &amp;#8211; &lt;a href=&quot;http://wiki.github.com/radiant/radiant/&quot; title=&quot;Radiant Documentation Link&quot;&gt;documentation&lt;/a&gt; &amp;#8211; &lt;a href=&quot;http://ext.radiantcms.org/&quot; title=&quot;Radiant Modules Repo Link&quot;&gt;modules repo&lt;/a&gt; &lt;/td&gt;
		&lt;td&gt; &lt;a href=&quot;http://adva-cms.org/wiki&quot; title=&quot;adva-cms Homepage Link&quot;&gt;homepage&lt;/a&gt; &amp;#8211; &lt;a href=&quot;http://github.com/svenfuchs/adva_cms&quot; title=&quot;adva-cms Repo Link&quot;&gt;repo&lt;/a&gt; &amp;#8211; &lt;a href=&quot;http://adva-cms.org/wiki&quot; title=&quot;adva-cms Documentation Link&quot;&gt;documentation&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;Documentation&lt;/th&gt;
		&lt;td&gt; Core documentation is ok, but very brief and rarely helpful. Forums are messy, long and badly organized. Documentation for Drupal 5 gets mixed with those of Drupal 6. &lt;/td&gt;
		&lt;td&gt; Not complete, there is enough to get you started and the responses to the mailing list are fast. But documentation definitely needs completion and expansion. &lt;/td&gt;
		&lt;td&gt; Extensive documentation with more than a 100 wiki pages. Great support on the mailing list and by community. &lt;/td&gt;
		&lt;td&gt; Limited documentation (probably because there is little to document!). &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;Installing&lt;/th&gt;
		&lt;td&gt; Manageable: download the source code, configure a settings file or two, create your DB and run the installation script (all of it has to be done each time). &lt;/td&gt;
		&lt;td&gt; Easy: Install the gem (once), create your Rails app using the template, create your DB and run the rake tasks. &lt;/td&gt;
		&lt;td&gt;  Easy: Install the gem (once), create your Radiant app, create your DB and run the rake tasks. &lt;/td&gt;
		&lt;td&gt; Very Easy: Create your DB, create your Rails app using the template, and fill the simple form. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;Upgrading&lt;/th&gt;
		&lt;td&gt; Ridiculously difficult, specially if you are using &lt;span class=&quot;caps&quot;&gt;SVN&lt;/span&gt; in your team for source control. &lt;/td&gt;
		&lt;td&gt; Piece of cake, install the appropriate gem version and regenerate the file. &lt;/td&gt;
		&lt;td&gt; Fairly simple, also requires updating the gem and then updating the Radiant assets in your project &lt;/td&gt;
		&lt;td&gt; No clue, sorry! &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;Theming&lt;/th&gt;
		&lt;td&gt; Requires creating multiple templates (one general page template and then one for each section or view) and multiple hook functions. Keeping track of all the places to commit changes can get too cumbersome. People using a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; want to develop their website in their web browser and Drupal forces designers to work with source code. &lt;/td&gt;
		&lt;td&gt; Have to create template files, but development can happen in the browser. Only need upload a &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt; file with your project. &lt;/td&gt;
		&lt;td&gt; Everything happens in the browser, even creating stylesheets. ALso provides ability for templates to inherit from other templates. &lt;/td&gt;
		&lt;td&gt; Everything happens in the browser, with also the ability to upload existing files into your theme. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;Modules/Extensions (list)&lt;/th&gt;
		&lt;td&gt; A huge list of modules is available, one of the compelling things about this &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; &lt;/td&gt;
		&lt;td&gt; Very short and limited list, but that might change soon. And the ease of writing your own makes up for it. &lt;/td&gt;
		&lt;td&gt; A good size list with probably everything you might need. &lt;/td&gt;
		&lt;td&gt; Small number of extensions that all come with the template. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;Modules/Extensions (creating your own)&lt;/th&gt;
		&lt;td&gt; It requires writing &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; code, need I say more? I guess I will anyway, you will need to know all the hooks and weird function names that will make your module work. No separation of code between business logic and view logic. Did I mention &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; already? &lt;/td&gt;
		&lt;td&gt; Develop Rails models that hook into the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; through magic words.  &lt;/td&gt;
		&lt;td&gt; Create a Rails app using all the awesome things it provides and then copy the necessary files over as an extension. &lt;/td&gt;
		&lt;td&gt; Can use the Rails Engine plugins system to create extensions. Or create your custom &lt;span class=&quot;caps&quot;&gt;MVC&lt;/span&gt; content just like you would with a regular Rails app. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;Extended Custom Functionality&lt;/th&gt;
		&lt;td&gt; Done through modules. &lt;/td&gt;
		&lt;td&gt; Achieved just like in any other Rails app. &lt;/td&gt;
		&lt;td&gt; Done through extensions. &lt;/td&gt;
		&lt;td&gt; Achieved just like in any other Rails app. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;Hooking to Existing App&lt;/th&gt;
		&lt;td&gt; It is your app! &lt;/td&gt;
		&lt;td&gt; Seamless integration. The &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; runs through the gem and is completely separate for the rest of the app. &lt;/td&gt;
		&lt;td&gt; It is your main app. With possibility of integration through Rails Rack. &lt;/td&gt;
		&lt;td&gt; Allows the possibility to import existing app into the project (involves copying the files over). Building a custom application on top of the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; is the better way of going about it. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;&lt;span class=&quot;caps&quot;&gt;WYSIWYG&lt;/span&gt;/Rich Text Editor&lt;/th&gt;
		&lt;td&gt; Available through a module. &lt;/td&gt;
		&lt;td&gt; Native. &lt;/td&gt;
		&lt;td&gt; Available through extension. &lt;/td&gt;
		&lt;td&gt; Available through the extension, has to be enabled through settings. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;File Attachments&lt;/th&gt;
		&lt;td&gt; Available through a module. &lt;/td&gt;
		&lt;td&gt; Native. &lt;/td&gt;
		&lt;td&gt;  Available through extension. &lt;/td&gt;
		&lt;td&gt; Native. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;Extra, Cool Features&lt;/th&gt;
		&lt;td&gt; Views and &lt;span class=&quot;caps&quot;&gt;CCK&lt;/span&gt;. &lt;/td&gt;
		&lt;td&gt; Some sort of in place editing. Ability to create subparts of pages that can be easily shared. &lt;/td&gt;
		&lt;td&gt; Ability to setup a blog quickly through the database template at installation. &lt;/td&gt;
		&lt;td&gt; Multiple Site support. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;h3&gt;Final Verdict&lt;/h3&gt;
&lt;p&gt;As the header of this blog suggests, the answer to the questions &lt;i&gt;Which Ruby &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; Should I Use?&lt;/i&gt; is&amp;#8230;&lt;/p&gt;
&lt;p&gt;wait for it&amp;#8230;&lt;/p&gt;
&lt;p&gt;wait some more&amp;#8230;&lt;/p&gt;
&lt;p&gt;&amp;#8220;It Depends!&amp;#8221;&lt;/p&gt;
&lt;dl&gt;
	&lt;dt&gt;Do you know you want to use a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; from the start &lt;span class=&quot;caps&quot;&gt;AND&lt;/span&gt; you know you have the need to use contributed extensions extensively?&lt;/dt&gt;
	&lt;dd&gt;Your best bet is Radiant. Arguably the most developed and supported Ruby &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; out there right now.&lt;/dd&gt;
	&lt;dt&gt;Do you know you want to use a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; from the start &lt;span class=&quot;caps&quot;&gt;AND&lt;/span&gt; you do not have the need to use contributed extensions extensively, and would rather develop your own custom code?&lt;/dt&gt;
	&lt;dd&gt;adva-cms is on your side. If all you need is a blog, a forum or a wiki out of your &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; to support your custom app, adva-cms is perfect for that.&lt;/dd&gt;
	&lt;dt&gt;The need for a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; came up late in the development process?&lt;/dt&gt;
	&lt;dd&gt;BrowserCMS is your friend. Probably the most flexible &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; available but is relatively young.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Honestly, all of the projects I have looked at have been impressive. If you are a Ruby fan, I recommend you to take a look at one of them for your future &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; needs. I hope the information provided has been helpful. On this note, I will conclude the first phase of this project.&lt;/p&gt;












</content>
 </entry>
 
 <entry>
   <title>Day Two with adva-cms</title>
   <link href="http://whichrubycmsshouldiuse.com/2010/01/08/day-two-with-adva-cms.html"/>
   <updated>2010-01-08T00:00:00+00:00</updated>
   <id>http://whichrubycmsshouldiuse.com/2010/01/08/day-two-with-adva-cms</id>
   <content type="html">&lt;p&gt;Previously, we looked into installing a new adva-cms run website and customizing the look and feel. Today I will go a bit deeper into the extended functionality that is available with this &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;. The documentation for this project is spread out in multiple places. Some of it can be find on the &lt;a href=&quot;http://adva-cms.org/wiki&quot; title=&quot;adva-cms Website&quot;&gt;main website&lt;/a&gt;, others in the &lt;a href=&quot;http://github.com/svenfuchs/adva_cms/blob/master/README&quot; title=&quot;adva-cms README file on GitHub&quot;&gt;&lt;span class=&quot;caps&quot;&gt;README&lt;/span&gt; file&lt;/a&gt; and some at the &lt;a href=&quot;http://wiki.github.com/svenfuchs/adva_cms&quot; title=&quot;adva-cms GitHub Wiki Pages&quot;&gt;GitHub wiki pages&lt;/a&gt;. And even if you go through all those sources, the documentation still feels incomplete. Regardless, I will attempt to look into the extra functionality available to us.&lt;/p&gt;
&lt;p&gt;Remember that last time I did install all of the engines and plugins available by executing the following:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;rake adva:install:all
rake adva:assets:install
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;So they are all available to us, what is left to do is enable the ones that require extra steps to be enabled and then find out where in the admin interface to go to start working with them. adva-cms claims to provide the functionality of creating multiple sites. But if you were following along with what we did last time you would notice that this option was not available to us. That is because you have to explicitly specify that you want this enabled. To do so, create a new initializer file in your application:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;`-root_directory
 `-app
 `-config
  `-initializers
   `-...
   `-adva_init.rb
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;You can name that file whatever you want, I named it &amp;#8216;adva_init.rb&amp;#8217; and that is where I would add any configuration code related to the adva-cms plugins. In that file add the following lines:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;# adva_init.rb&lt;/span&gt;
&lt;span class=&quot;no&quot;&gt;ActionController&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Dispatcher&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;to_prepare&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;no&quot;&gt;Site&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;multi_sites_enabled&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kp&quot;&gt;true&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Those lines will enable the ability of multiple sites for your project. You will notice a new tab being added to your admin panel. Make sure you have restarted your server after editing the initializer file.&lt;/p&gt;
&lt;div class=&quot;screenshot-wide&quot;&gt;&lt;a href=&quot;/images/adva_admin_panel_multiple_sites_screenshot.png&quot;&gt;&lt;img src=&quot;/images/adva_admin_panel_multiple_sites_screenshot.png&quot; title=&quot;Adva Admin Panel With Multiple Sites Screen Shot&quot; alt=&quot;Adva Admin Panel With Multiple Sites Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Navigating to the &amp;#8220;Sites&amp;#8221; tab will display the list of all the sites you have created,&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/adva_sites_tab_screenshot.png&quot;&gt;&lt;img src=&quot;/images/adva_sites_tab_screenshot.png&quot; title=&quot;Adva Sites Tab Screen Shot&quot; alt=&quot;Adva Sites Tab Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;and gives the ability to create new ones.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/adva_new_site_screenshot.png&quot;&gt;&lt;img src=&quot;/images/adva_new_site_screenshot.png&quot; title=&quot;Adva New Site Screen Shot&quot; alt=&quot;Adva New Site Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;So lets go ahead and create a new site with the following settings:&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/adva_new_site_settings_screenshot.png&quot;&gt;&lt;img src=&quot;/images/adva_new_site_settings_screenshot.png&quot; title=&quot;Adva New Site Settings Screen Shot&quot; alt=&quot;Adva New Site Settings Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The important thing to notice is the host name field. Since we are working locally and we want to have both sites running at the same time, we have use a different port number. For this case I went with &lt;i&gt;3001&lt;/i&gt;. Now, in the terminal, go to your project directory and execute this line:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;./script/server -p 3001
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;This will start another server running on port 3001. Using your web browser, navigating to &lt;a href=&quot;http://localhost:3001/&quot; title=&quot;Local Host on Port 3001&quot;&gt;http://localhost:3001/&lt;/a&gt; will take you to the newly created site.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/adva_second_site_screenshot.png&quot;&gt;&lt;img src=&quot;/images/adva_second_site_screenshot.png&quot; title=&quot;Adva Second Site Screen Shot&quot; alt=&quot;Adva Second Site Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Notice that the second site we have created does not inherit the theme. Each site you create is totally independent and does not share settings with your other sites. Some people might want their sites to share themes, but with the ability to export and import themes the process is very easy and simple.&lt;/p&gt;
&lt;p&gt;So we have now added the ability to create multiple sites using the adva-cms. Why not also add a &lt;span class=&quot;caps&quot;&gt;WYSIWYG&lt;/span&gt; editor? To accomplish that, the idea is basically the same as what we did previously. One of the plugins that we have installed is the FCKeditor plugin. We just need to enable it by adding the following line to our initializer file and restarting the server:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;# adva_init.rb&lt;/span&gt;
&lt;span class=&quot;no&quot;&gt;Fckeditor&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;load!&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;And voila:&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/adva_fckeditor_screenshot.png&quot;&gt;&lt;img src=&quot;/images/adva_fckeditor_screenshot.png&quot; title=&quot;Adva FCKeditor Screen Shot&quot; alt=&quot;Adva FCKeditor Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;If you have been following along with the previous posts, you know that the demo site I build with each of these CMSes is a conference site. Part of every conference website are events and a calendar. So lets create some events. The first you need to do is create a new section for your site and specify the type to be &amp;#8220;Calendar&amp;#8221;. Once you&amp;#8217;re done you&amp;#8217;ll be redirected to the &amp;#8220;Events&amp;#8221; page for that section. The list will start off empty. Click on the &amp;#8220;New&amp;#8221; button to create a new event. You should then see the following form.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/adva_new_event_form_screenshot.png&quot;&gt;&lt;img src=&quot;/images/adva_new_event_form_screenshot.png&quot; title=&quot;Adva New Event Form Screen Shot&quot; alt=&quot;Adva New Event Form Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Fill in the form and you&amp;#8217;ll have your first event created. If you navigate to the calendar page (&amp;#8220;/calendar&amp;#8221;) you will see your events listed there along with a search form and a monthly calendar.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/adva_calendar_screenshot.png&quot;&gt;&lt;img src=&quot;/images/adva_calendar_screenshot.png&quot; title=&quot;Adva Calendar Screen Shot&quot; alt=&quot;Adva Calendar Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;That&amp;#8217;s pretty much it for events. Lets also take a look at creating photo albums. The process is pretty much the same. Create a new section of type &amp;#8220;Album&amp;#8221;, then under the &amp;#8220;Photos&amp;#8221; tab in the admin UI upload your images. If you want to group the pictures in photo albums or &lt;i&gt;sets&lt;/i&gt;, create a new set and then select the checkbox corresponding to the set you want your picture to be published under.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/adva_new_picture_form_screenshot.png&quot;&gt;&lt;img src=&quot;/images/adva_new_picture_form_screenshot.png&quot; title=&quot;Adva New Picture Form Screen Shot&quot; alt=&quot;Adva New Picture Form Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;You can view your pictures by going to the album page (&amp;#8220;/album&amp;#8221;) as well as your sets.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/adva_album_screenshot.png&quot;&gt;&lt;img src=&quot;/images/adva_album_screenshot.png&quot; title=&quot;Adva Calendar Screen Shot&quot; alt=&quot;Adva Calendar Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The is the same for the other content types available such as Wikis, Forums and of course Blogs. adva-cms does provide a bunch of good stuff out of the box. It is a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; that is supposed to extend your custom Rails app and give you the tools you need to create typical content such as static pages, blogs, etc. With this note, I conclude Day Two with adva-cms.&lt;/p&gt;






</content>
 </entry>
 
 <entry>
   <title>Day One with adva-cms</title>
   <link href="http://whichrubycmsshouldiuse.com/2010/01/07/day-one-with-adva-cms.html"/>
   <updated>2010-01-07T00:00:00+00:00</updated>
   <id>http://whichrubycmsshouldiuse.com/2010/01/07/day-one-with-adva-cms</id>
   <content type="html">&lt;p&gt;After looking at two of the most popular or talked about Ruby CMSes out there it is time to look at what else is out there. Searching (or Googling) for &amp;#8220;Ruby &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;&amp;#8221; or &amp;#8220;Rails &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;&amp;#8221; brings back a few results but most of them are blog posts, articles or questions about the topic. You are required to do some deep digging before getting a good list of available CMSes. AjaxLines has an article about the &lt;a href=&quot;http://www.ajaxlines.com/ajax/stuff/article/top_ruby_cms.php&quot; title=&quot;Top 20 Ruby CMS Article&quot;&gt;Top 20 Ruby &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;&lt;/a&gt; but the post is from August 2006 and the information on there is outdated. A more recent post can be found on &lt;a href=&quot;http://afreshcup.com/home/2009/11/26/rails-cms-alternatives.html&quot; title=&quot;Rails CMS Alternatives Post&quot;&gt;A Fresh Cup&lt;/a&gt; which provides more current information. The post provides a good list of projects. I would like to add to it that even though &lt;a href=&quot;http://comatose.rubyforge.org/&quot; title=&quot;Comatose CMS&quot;&gt;Comatose&lt;/a&gt; is listed under the &lt;i&gt;inactive&lt;/i&gt; list, it is still an alternative worth looking into. &lt;a href=&quot;http://www.railfrog.com/&quot; title=&quot;RailFrog CMS&quot;&gt;RailFrog&lt;/a&gt; is another project that looks to have good documentation and shows signs of life. It also has to parts of the project, one that allows you to create you &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; project immediately and one that hooks to your Rails app through the Engines system. Another &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; worth investigating is &lt;a href=&quot;http://communityengine.org/index.html&quot; title=&quot;Community Engine Homepage&quot;&gt;Community Engine&lt;/a&gt;, which seems to give you a lot out of the box and does that well but I have heard that developing for it is a pain.&lt;/p&gt;
&lt;p&gt;All of the afore mentioned projects look to be good candidates, but I have decided that today I will take a look at one of the probably lesser known ones called &amp;#8220;adva-cms&amp;#8221;. You can find adva at its &lt;a href=&quot;http://adva-cms.org/wiki&quot; title=&quot;adva-cms homepage&quot;&gt;home&lt;/a&gt; and the repo on &lt;a href=&quot;http://github.com/svenfuchs/adva_cms&quot; title=&quot;adva-cms repo&quot;&gt;GitHub&lt;/a&gt;. Looking at the &lt;span class=&quot;caps&quot;&gt;README&lt;/span&gt; file of the project, the first thing that catches my eyes is the following:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Different from others, adva-cms lives in vendor directory and keeps your main&lt;br /&gt;
app directory clean and dandy. So you can reclaim app directory and use it&lt;br /&gt;
only for your own application files.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;adva-cms makes it extensible: you can only pick those engines/features you really&lt;br /&gt;
need for your application and omit the rest. All engines are designed to work&lt;br /&gt;
together seamlessly, so the whole platform feels much more consistent for&lt;br /&gt;
similar but separate Rails applications.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is the kind of thing developers like to see in a system that they want to use. So lets get started. You can find more information on the &lt;a href=&quot;http://adva-cms.org/wiki&quot; title=&quot;adva-cms Wiki Page&quot;&gt;wiki page&lt;/a&gt; but I will take you through the basic steps here. First make sure you have the Rails 2.3.4 and ImageMagick gems installed then create you adva-cms app using Rails templates.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;# use &amp;#39;-d mysql&amp;#39; if you want to use MySQL instead of SqlLite (or any other engine)&lt;/span&gt;
rails my-app -m http://github.com/svenfuchs/adva_cms/raw/master/templates/adva-cms.0.3.0.rb
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;The installation spits out this fine tip, which you might want to follow:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;# this might take a bit, grab a coffee meanwhile :)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you have not created your database before hand you will see something like this:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;rake  adva:install:core -R vendor/adva/engines/adva_cms/lib/tasks
rake aborted!
Unknown database &lt;span class=&quot;s1&quot;&gt;&amp;#39;adva_demo_development&amp;#39;&lt;/span&gt;

&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;See full trace by running task with --trace&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;This can be easily fixed by following these steps:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /path/to/app
rake db:create
rake  adva:install:core -R vendor/adva/engines/adva_cms/lib/tasks
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;You should now be set, navigate to &lt;a href=&quot;http://localhost:3000/&quot; title=&quot;localhost&quot;&gt;http://localhost:3000/&lt;/a&gt; to start the installation:&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/adva_install_screenshot.png&quot;&gt;&lt;img src=&quot;/images/adva_install_screenshot.png&quot; title=&quot;Adva Installation Screen Shot&quot; alt=&quot;Adva Installation Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;After you fill the easy and shot form you should see the success screen which also has a link to the admin part of the side.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/adva_installation_success_screenshot.png&quot;&gt;&lt;img src=&quot;/images/adva_installation_success_screenshot.png&quot; title=&quot;Adva Installation Success Screen Shot&quot; alt=&quot;Adva Installation Success Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/adva_admin_section_screenshot.png&quot;&gt;&lt;img src=&quot;/images/adva_admin_section_screenshot.png&quot; title=&quot;Adva Admin Page Screen Shot&quot; alt=&quot;Adva Admin Page Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The instructions for the installation mention the following:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;# config/initializers/new_rails_defaults.rb&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# either comment out the following line or set it to true&lt;/span&gt;
&lt;span class=&quot;no&quot;&gt;ActionController&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Routing&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;generate_best_match&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kp&quot;&gt;false&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;So be sure to follow them before going forward. After finishing the vanilla install of the site, you will want to install the engines and plugins that come with the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;. You have the option to either install all of the, the core ones, or specific ones you specify. Check the &lt;a href=&quot;http://github.com/svenfuchs/adva_cms/blob/master/README&quot; title=&quot;Adva README File&quot;&gt;&lt;span class=&quot;caps&quot;&gt;README&lt;/span&gt; file&lt;/a&gt; for more info. For this demo I will opt to install them all:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;rake adva:install:all
rake adva:assets:install
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Which will install the following:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;installing engines: adva_activity, adva_assets, adva_blog, adva_calendar, adva_cms, adva_comments, adva_contact_mails, adva_forum, adva_newsletter, adva_photos, adva_rbac, adva_spam, adva_themes, adva_user, adva_wiki
installing plugins: adva_cells, adva_context_templates, adva_fckeditor, adva_google_analytics, adva_meta_tags, adva_post_ping, adva_url_history
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;For today, the important engine that we are interested in is the adva_themes one. This is what we will use to create our theme and layout for our site. The current admin panel looks like so:&lt;/p&gt;
&lt;div class=&quot;screenshot-wide&quot;&gt;&lt;a href=&quot;/images/adva_admin_panel_screenshot.png&quot;&gt;&lt;img src=&quot;/images/adva_admin_panel_screenshot.png&quot; title=&quot;Adva Admin Panel Screen Shot&quot; alt=&quot;Adva Admin Panel Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Click on the &amp;#8220;Themes&amp;#8221; tab. You should see an empty list. Create a new theme by filling the form.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/adva_new_theme_screenshot.png&quot;&gt;&lt;img src=&quot;/images/adva_new_theme_screenshot.png&quot; title=&quot;Adva New Theme Screen Shot&quot; alt=&quot;Adva New Theme Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Once you are done filling the &amp;#8220;New Theme&amp;#8221; form you will be redirected to a page that shows you all the associated files. By default you should only see a &lt;i&gt;preview&lt;/i&gt; image file associated with a new theme. With your theme, you usually want template, stylesheet, javascript and image files associated with it. To do so you can create new ones or upload existing ones into the theme. Check the &lt;a href=&quot;http://adva-cms.org/wiki/wikipages/editing-themes&quot; title=&quot;Adva Editing Themes&quot;&gt;documentation&lt;/a&gt; for more detailed information. For this demo I will override the default layout template, create my &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt; file, a few partials and upload the corresponding images. To override the default layout, create this file:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;# templates/layouts/default.html.erb
&lt;span class=&quot;cp&quot;&gt;&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;xmlns=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;xml:lang=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;en&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;lang=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;en&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;http-equiv=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Content-Type&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;text/html;charset=utf-8&amp;quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;vi&quot;&gt;@section&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;title&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;theme_stylesheet_link_tag&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;nvc&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;nvc/vet10.css&amp;#39;&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;yield&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:head&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt; 
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;top&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;#content&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Skip to content&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;wrapper&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;header&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:partial&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;/partials/header_image&amp;quot;&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

			&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;aside&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;nav_left&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
					&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Menus&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Sections&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:id&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;sections&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
					&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:partial&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;/partials/medal_image&amp;quot;&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- #aside --&amp;gt;&lt;/span&gt;

			&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;content&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;intro&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
					&lt;span class=&quot;nt&quot;&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;vi&quot;&gt;@section&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;title&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- #intro --&amp;gt;&lt;/span&gt;

				&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;content_main&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
					&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;yield&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- #content_main --&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- #content --&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;#39;clear:both&amp;#39;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;footer&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Menus&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Sections&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:id&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;sections&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;a few things to notice:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;vi&quot;&gt;@section&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;title&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;In adva-cms, a page is called a &lt;i&gt;section&lt;/i&gt; and each section can have one or more &lt;i&gt;articles&lt;/i&gt;. That is why to get the title of the page I used the &lt;i&gt;@section&lt;/i&gt; object.&lt;/p&gt;
&lt;p&gt;and:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;theme_stylesheet_link_tag&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;nvc&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;nvc/vet10.css&amp;#39;&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt; 
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;You have some helpers that are available to you for including other files in your code:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;theme_stylesheet_link_tag theme_id, stylesheet_name
theme_javascript_include_tag theme_id, javascript_name
theme_image_tag theme_id, image_name
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;and:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:partial&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;/partials/navigation&amp;quot;&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;There is no special way to create blocks or partials with adva-cms. You need to create a new file that follows the Rails convention for naming partials and then include it in your template just like you would if you were doing any normal Rails views or templates.&lt;/p&gt;
&lt;p&gt;One thing to note, when creating a new file, the name you give it specifies the directory structure. For example, if you name a file &amp;#8220;nvc/vet10.css&amp;#8221;, a new folder called &amp;#8220;nvc&amp;#8221; will be created under the stylesheets folder (determined by the extension of the file, would be under the javascripts folder if the extension was .js) and the new file will be created in the new directory. For images, you will have to go back and edit the name of the file after the upload is complete.&lt;/p&gt;
&lt;p&gt;Looking at the source code for the adva_cms plugin, specifically at the default layout file you can learn a few things about editing your layout. For example, the following code can be used for menus:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Menus&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Sections&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:id&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;sections&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;The source code is probably the best way to look for the way adva-cms does things if you can not find the appropriate help in the wiki pages. So at this point we have created our theme&amp;#8230;&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/adva_theme_screenshot.png&quot;&gt;&lt;img src=&quot;/images/adva_theme_screenshot.png&quot; title=&quot;Adva Them Screen Shot&quot; alt=&quot;Adva Them Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Created the necessary files and uploaded images&amp;#8230;&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/adva_theme_files_screenshot.png&quot;&gt;&lt;img src=&quot;/images/adva_theme_files_screenshot.png&quot; title=&quot;Adva Theme Files Panel Screen Shot&quot; alt=&quot;Adva Theme Files Panel Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;And we have our site ready.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/adva_index_screenshot.png&quot;&gt;&lt;img src=&quot;/images/adva_index_screenshot.png&quot; title=&quot;Adva Index Screen Shot&quot; alt=&quot;Adva Index Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;In adva-cms, you can create as many themes as you want, then activate the one you want your site to use and deactivate the others. Another thing to point is that when creating new sections in your site you can specify which layout file you want it to inherit from. This shows how closely adva-cms follows the Rails conventions and developing for it should feel very familiar if you are used to developing using Ruby on Rails.&lt;/p&gt;
&lt;p&gt;I must confess, using it for the first did feel a bit weird and different from using other CMSes (which could be a good thing for some people). Some of the plugins that I installed at the beginning of the day seem to be hidden. You do not see any tabs for them on the admin pages. But they are there. For example, the wiki plugin can be used when creating new pages by specifying the type of page you want (Page, Blog, Calendar, Wiki, etc). With this note, I conclude Day One with adva-cms.&lt;/p&gt;








</content>
 </entry>
 
 <entry>
   <title>Day Three with Radiant</title>
   <link href="http://whichrubycmsshouldiuse.com/2010/01/06/day-three-with-radiant.html"/>
   <updated>2010-01-06T00:00:00+00:00</updated>
   <id>http://whichrubycmsshouldiuse.com/2010/01/06/day-three-with-radiant</id>
   <content type="html">&lt;p&gt;As with any usual project, there is always the need for creating custom content and custom content types. That is why, in Day Three with Radiant I will look at adding custom behavior to Radiant. I think this is an important part of any &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; and the way the system allows you to create custom content is very critical.&lt;/p&gt;
&lt;p&gt;If you look at the directory structure of a typical Radiant project you will notice that the &lt;i&gt;app&lt;/i&gt; folder that is usually found in a Rails application is missing. This means that the normal way of creating models, views and controllers that is available in Rails is not offered to us by Radiant. To achieve this goal we have to resort to using extensions. A number of articles can be found on the subject on the wiki page &lt;a href=&quot;http://wiki.github.com/radiant/radiant/creating-extensions&quot; title=&quot;Creating Extensions Wiki&quot;&gt;Creating Extensions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The first guide to look at is the &lt;a href=&quot;http://wiki.github.com/radiant/radiant/how-to-create-an-extension&quot; title=&quot;How-To: Create an Extension Wiki&quot;&gt;How-To: Create an Extension&lt;/a&gt;. The method they suggest in this tutorial is to create a separate Rails application that contains the models, views, controllers and migrations. Make sure that this application contains all your logic and data that you require, then copy the necessary files to the extension directory that you have created. Then run the migration and update script. When that is done, you can now add the routes required by your extension and you are done, or are you?&lt;/p&gt;
&lt;p&gt;If you need to add custom page types, which are pages with custom behavior, your work is not done yet. You will need to follow the instructions on &lt;a href=&quot;http://wiki.github.com/radiant/radiant/creating-a-custom-page-type&quot; title=&quot;Add Custom Page Type Wiki&quot;&gt;this page&lt;/a&gt;. And if you require custom Radius tags, you will have to do something like what is suggested in &lt;a href=&quot;http://wiki.github.com/radiant/radiant/adding-custom-radius-tags&quot; title=&quot;Custom Radius Tags Wiki&quot;&gt;this tutorial&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This whole process looks tedious to me. It seems that the work required for a developer to be able to add new models or content types is doubled by the fact that the developers have to maintain a temporary application where the new models are developed and tested. It is possible to create your extension straight in your Radiant project but you will not have the assistance of the generators, which can be very helpful and time saving. The tutorial does mention the following:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Until there is an extension scaffolding generator&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So hopefully a future version of Radiant will include these generators and make this task less time consuming and easier on the developers.&lt;/p&gt;
&lt;p&gt;One concern that I still have is the fact that Radiant takes the dominant role of the &lt;i&gt;project owner&lt;/i&gt; or &lt;i&gt;project parent&lt;/i&gt; which means that the application lives within Radiant. This is opposed to the case where the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; is an extension of the original application. This might present problems for projects where a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; became a requirement or a necessity after the original code base has been developed. A project that will include Radiant, is a project that needs to be created as a Radiant project from the start or has to be exported into a Radiant extension. Most &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; systems out there present the same conundrum for developers. So in the case where a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; is needed to enhance a website by providing a means to create static pages or a blog, a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; that can be installed as an addition or extension to the application (such as BrowserCMS) has an advantage over a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; like Radiant.&lt;/p&gt;
&lt;p&gt;Overall, Radiant seems like a good candidate for projects where you know upfront that you will be using a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;. It has good core documentation by the Radiant developers and an extensive list of extensions. Extending the application yourself is possible and relatively easy even though it requires a number of steps to be taken. Following the mailing list and browsing the wiki pages give me the impression that the project is in full swing and development on it is always progressing. Also, the community provides great support. At the conclusion of Day Three with Radiant I can say that this &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; is worth a shot if you are starting a new project and want to take advantage of the things that Ruby and Ruby on Rails provide you.&lt;/p&gt;




</content>
 </entry>
 
 <entry>
   <title>Day Two with Radiant</title>
   <link href="http://whichrubycmsshouldiuse.com/2010/01/05/day-two-with-radiant.html"/>
   <updated>2010-01-05T00:00:00+00:00</updated>
   <id>http://whichrubycmsshouldiuse.com/2010/01/05/day-two-with-radiant</id>
   <content type="html">&lt;p&gt;Radiant uses extensions to, as the name suggests, extend the functionality of the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;. These extensions can be found on, but no limited to the &lt;a href=&quot;http://ext.radiantcms.org/&quot; title=&quot;Radiant Extension Registry&quot;&gt;Extension Registry&lt;/a&gt;. If the extension you would like to use is found in the registry, you&amp;#8217;ll be able to use the built-in script to install it. Otherwise, you will have to use the manual installation process. You can find more information about how to install and uninstall extensions on the &lt;a href=&quot;http://wiki.github.com/radiant/radiant/installing-extensions&quot; title=&quot;Installing Extensions Wiki Page&quot;&gt;wiki&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For this demo I am building a conference site and &lt;i&gt;awesomely&lt;/i&gt; enough &lt;i&gt;there is an extension for that&lt;/i&gt;. The extension that I will look at is called, appropriately, &lt;a href=&quot;http://ext.radiantcms.org/extensions/121-conferences&quot; title=&quot;Conferences Extension Page&quot;&gt;Conferences&lt;/a&gt;. If you look at the &lt;a href=&quot;http://github.com/farra/radiant-conferences-extensions&quot; title=&quot;Conferences Extension GitHub Repo&quot;&gt;Conferences Extension GitHub Repo&lt;/a&gt; you will see in the &lt;span class=&quot;caps&quot;&gt;README&lt;/span&gt; file that there are some dependencies that you need to install before getting to the extension itself. There isn&amp;#8217;t any information on how to get those dependencies installed so follow along with these instructions:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;# Install the fastercsv gem&lt;/span&gt;
sudo gem install fastercsv
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Download the &lt;a href=&quot;http://www.kanthak.net/opensource/file_column/&quot; title=&quot;File Column Pluing&quot;&gt;file_column plugin&lt;/a&gt; into the vendor/plugins directory and if you are using a Rails version earlier than 2.1 you will need to do the following as well:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;# Install the tzinfo_timezone plugin and tzinfo gem&lt;/span&gt;
sudo gem install tzinfo
git clone git://github.com/rails/tzinfo_timezone.git vendor/plugins/tzinfo_timezone
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Then continue installing the extensions:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;# Install the members extension&lt;/span&gt;
./script/extension install members
&lt;span class=&quot;c&quot;&gt;# Install the tinymce_filter extension&lt;/span&gt;
./script/extension install tiny_mce_filter
mv vendor/extensions/tiny_mce_filter/ vendor/extensions/tinymce_filter/
rake radiant:extensions:tinymce_filter:update
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Notice that we had to rename the folder for the tiny_mce_filter extension because of naming error and then rerun the update manually. Now you are ready to install the conferences extension:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;./script/extension install conferences
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;ActionMailer spits out an error in the current settings, to fix it we must install the plugin and the extension:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;# Install the Action Mailer &amp;amp; TLS plugin &lt;/span&gt;
git clone git://github.com/collectiveidea/action_mailer_optional_tls.git vendor/plugins/action_mailer_optional_tls/
&lt;span class=&quot;c&quot;&gt;# Install the mailer extension&lt;/span&gt;
./script/extension install mailer
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;To see the changes make sure you restart the server. If you navigate to the extensions page from the admin panel you will see the list of extensions installed.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/radiant_extensions_page_screenshot.png&quot;&gt;&lt;img src=&quot;/images/radiant_extensions_page_screenshot.png&quot; title=&quot;Extensions Page Screen Shot&quot; alt=&quot;Extensions Page Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;You will also notice the new tabs that are now available for you (Submissions, Conferences, Profile).&lt;/p&gt;
&lt;div class=&quot;screenshot-wide&quot;&gt;&lt;a href=&quot;/images/radiant_new_admin_tabs_screenshot.png&quot;&gt;&lt;img src=&quot;/images/radiant_new_admin_tabs_screenshot.png&quot; title=&quot;New Admin Tabs Screen Shot&quot; alt=&quot;New Admin Tabs Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;And if you navigate to the &amp;#8220;Conferences&amp;#8221; tab you will see all the configuration options and links to create new conferences. Enjoy!&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/radiant_conferences_page_screenshot.png&quot;&gt;&lt;img src=&quot;/images/radiant_conferences_page_screenshot.png&quot; title=&quot;Conferences Page Screen Shot&quot; alt=&quot;Conferences Page Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Installing this one extension has honestly been a pain. I had to dig around to figure out what the dependencies were and how to solve some of the problems like the ActionMailer error and the renaming of the tiny_mce_filter forlder. I hope installing other extensions is not as difficult as this one. The documentation for the extensions is lacking, even though the documentation for Radiant itself seems to be good so far. I have been on the Radiant mailing list for a while and I have seen a good response time and a lot of people willing to answer questions, so that might the best resort for help. On this note I conclude Day Two with Radiant.&lt;/p&gt;










</content>
 </entry>
 
 <entry>
   <title>Day One with Radiant</title>
   <link href="http://whichrubycmsshouldiuse.com/2010/01/04/day-one-with-radiant.html"/>
   <updated>2010-01-04T00:00:00+00:00</updated>
   <id>http://whichrubycmsshouldiuse.com/2010/01/04/day-one-with-radiant</id>
   <content type="html">&lt;p&gt;After taking a brief look at BrowserCMS, it is time to examine another ruby &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;. For the next few days I want to take a look at one Ruby&amp;#8217;s more known and probably most used &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;, also known as &lt;a href=&quot;http://radiantcms.org/&quot; title=&quot;Radiant Home Page&quot;&gt;Radiant&lt;/a&gt;. Just like any open source project in the Ruby world, you can find Radiant at its GitHub &lt;a href=&quot;http://github.com/radiant/radiant&quot; title=&quot;GitHub Repository for Radiant&quot;&gt;repo&lt;/a&gt; accompanied by its &lt;a href=&quot;http://wiki.github.com/radiant/radiant/&quot; title=&quot;Documentation Link&quot;&gt;Documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Installing Radiant follows the same steps as installing BrowserCMS:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;sudo gem install radiant
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;But to create a new project you have to do the following:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;radiant --database &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;mysql|postresql|sqlite3|sqlserver|db2&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; path/to/project
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Once you run this command, you will get a message after it completes that instructs on how to proceede:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; Installation and Setup

Once you have extracted the files into the directory where you would like to
install Radiant:

1. Create the MySQL/PostgreSQL/SQLite/SQL Server/DB2 databases &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;your Web
   site. You only need to create the &lt;span class=&quot;s2&quot;&gt;&amp;quot;production&amp;quot;&lt;/span&gt; database, but you may also
   want to create the &lt;span class=&quot;s2&quot;&gt;&amp;quot;development&amp;quot;&lt;/span&gt; and &lt;span class=&quot;s2&quot;&gt;&amp;quot;test&amp;quot;&lt;/span&gt; databases &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;you are developing
   extensions or running tests.

2. Edit config/database.yml to taste.  There are example files available &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;   &lt;/span&gt;various databases in the config directory.

3. Run the database bootstrap rake task:
   
     % rake production db:bootstrap
   
   &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;If you would like bootstrap your development database run &lt;span class=&quot;s1&quot;&gt;&amp;#39;rake&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;   development db:bootstrap&amp;#39;&lt;/span&gt;.&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
   
   If you get the error &lt;span class=&quot;s2&quot;&gt;&amp;quot;no such file to load -- spec/rake/spectask&amp;quot;&lt;/span&gt; please
   install Rspec &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;gem install rspec&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;.

4. Start it like a normal Rails application. To &lt;span class=&quot;nb&quot;&gt;test &lt;/span&gt;execute:
   
     % script/server -e production
   
   And open your Web browser on port 3000 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;http://localhost:3000&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;. The
   administrative interface is available at /admin/. By default the bootstrap
   rake task creates a user called &lt;span class=&quot;s2&quot;&gt;&amp;quot;admin&amp;quot;&lt;/span&gt; with a password of &lt;span class=&quot;s2&quot;&gt;&amp;quot;radiant&amp;quot;&lt;/span&gt;.

When using Radiant on a production system you may also need to &lt;span class=&quot;nb&quot;&gt;set &lt;/span&gt;permissions
on the public and cache directories so that your Web server can access those
directories with the user that it runs under.

Once you have installed Radiant on your own Web site, be sure to add your name
and Web site to the list of radiant users:

http://wiki.github.com/radiant/radiant/radiant-users
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;You can also find these instructions &lt;a href=&quot;http://github.com/radiant/radiant/raw/master/INSTALL&quot; title=&quot;Install Instructions&quot;&gt;online&lt;/a&gt; along with a more detailed help section on the &lt;a href=&quot;http://wiki.github.com/radiant/radiant#install&quot; title=&quot;Wiki Installation Page&quot;&gt;wiki&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When you follow the instructions given you will notice that Radiant will ask you to provide the name, username and password for the admin user to be created, or just use the defaults:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;Create the admin user &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;press enter &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;defaults&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;.
Name &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;Administrator&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;: 
Username &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;admin&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;: 
Password &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;radiant&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;: 

Initializing configuration.........OK
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;The it will prompt you to select a template for your website, which I think is very cool specially if you know you are going to create a blog like site:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;Select a database template:
1. Empty
2. Roasters &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;a coffee-themed blog / brochure&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
3. Simple Blog
4. Styled Blog
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;1-4&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;:
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Now you are ready to start building your website. I created an empty site for the purposes of this demo and when I fire up the page I am automatically redirected to the admin login page. Once you login, you will see the &amp;#8220;Pages&amp;#8221; page where all you site pages will be listed.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/radiant_start_page_screenshot.png&quot;&gt;&lt;img src=&quot;/images/radiant_start_page_screenshot.png&quot; title=&quot;Pages Screen Shot&quot; alt=&quot;Pages Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Using the empty template you will not have any pages listed, nor any snippets or layouts. You will have some extensions installed though:&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/radiant_extensions_screenshot.png&quot;&gt;&lt;img src=&quot;/images/radiant_extensions_screenshot.png&quot; title=&quot;Extensions Page Screen Shot&quot; alt=&quot;Extensions Page Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;As per the process used to discuss the first Ruby &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; we have looked at, the first thing I will be accomplishing today is creating the layout for the website. To do so, navigate to the &amp;#8220;Layouts&amp;#8221; page and create a new one. The form will look like this:&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/radiant_layouts_screenshot.png&quot;&gt;&lt;img src=&quot;/images/radiant_layouts_screenshot.png&quot; title=&quot;Layout Form Screen Shot&quot; alt=&quot;Layout Form Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The form is simple, you provide the name and the body of the layout and if necessary a &amp;#8220;Context-Type&amp;#8221; (such as text/css or text/xml). Lets create our layout:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;xmlns=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;xml:lang=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;en&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;lang=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;en&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;http-equiv=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Content-Type&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;text/html;charset=utf-8&amp;quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&amp;lt;r:title&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;link&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;rel=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;/styles.css&amp;quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;http://www.jeroenwijering.com/embed/swfobject.js&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;/javascripts/prototype.js&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;/javascripts/scriptaculous.js?load=effects,builder&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;/javascripts/lightbox.js&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;top&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;#content&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Skip to content&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;wrapper&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;header&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;r:snippet&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;header_image&amp;quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

		&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;aside&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;nav_left&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;r:snippet&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;navigation&amp;quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;r:snippet&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;medal_image&amp;quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- #aside --&amp;gt;&lt;/span&gt;

		&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;content&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;intro&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;h2&amp;gt;&amp;lt;r:title&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;r:if&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;_content&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;part=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;extended&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;r:content&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;part=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;extended&amp;quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;err&quot;&gt;&amp;lt;&lt;/span&gt;/r:if_content&amp;gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- #intro --&amp;gt;&lt;/span&gt;

		&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;content_main&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;r:content&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- #content_main --&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- #content --&amp;gt;&lt;/span&gt;

	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;footer&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;r:snippet&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;navigation&amp;quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;More detail on some of the parts will come later&amp;#8230;&lt;/p&gt;
&lt;p&gt;Since our project was created using the empty template, we will need to create some pages to view the result of our layout work. Under the &amp;#8220;Pages&amp;#8221; tab, you will see an empty list of pages and a button saying &amp;#8220;New Homepage&amp;#8221;. That would be a good place to start. The new page form is quite impressive in its content:&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/radiant_new_page_screenshot.png&quot;&gt;&lt;img src=&quot;/images/radiant_new_page_screenshot.png&quot; title=&quot;New Page Form Screen Shot&quot; alt=&quot;New Page Form Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Other than the usual title and body, you can specify a number of page options (Layout, Page Type, Status) as well as editing options (Filter). Clicking on the &amp;#8220;more&amp;#8221; link would provide you with, well as the name suggests, more:&lt;/p&gt;
&lt;div class=&quot;screenshot-wide&quot;&gt;&lt;a href=&quot;/images/radiant_new_page_more_screenshot.png&quot;&gt;&lt;img src=&quot;/images/radiant_new_page_more_screenshot.png&quot; title=&quot;New Page More Screen Shot&quot; alt=&quot;New Page More Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The more impressive part about this method of creating a new page is the available references that provide help for the editor, such as the filter reference that provides help about the chosen filter and the tags reference that provides a list and description of the available tags in the page to be used by the editor.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/radiant_markdown_reference_screenshot.png&quot;&gt;&lt;img src=&quot;/images/radiant_markdown_reference_screenshot.png&quot; title=&quot;Filter Reference Screen Shot&quot; alt=&quot;Filter Reference Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/radiant_tags_reference_screenshot.png&quot;&gt;&lt;img src=&quot;/images/radiant_tags_reference_screenshot.png&quot; title=&quot;Available Tags Screen Shot&quot; alt=&quot;Available Tags Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;These references will provide help for editors without the need to dig around in overwhelming documentation in order to create simple pages. This means less time training editors and content contributors, making the developer a lot happier.&lt;/p&gt;
&lt;p&gt;Also notice the two available parts for the content. The first part is the body and the other one named &amp;#8220;extended&amp;#8221;. Radiant provides the ability to create multiple parts of a page where the body is the main one and the others are additional parts constructed on top of the body. Through the layout you create you will be able to specify how these parts are created. And to add or remove parts just use the icons available at the right of the tabs.&lt;/p&gt;
&lt;div class=&quot;screenshot-wide&quot;&gt;&lt;a href=&quot;/images/radiant_page_parts_screenshots.png&quot;&gt;&lt;img src=&quot;/images/radiant_page_parts_screenshots.png&quot; title=&quot;Page Parts Screen Shot&quot; alt=&quot;Page Parts Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;One part of creating pages involves creating &amp;#8220;blocks&amp;#8221; that can be inserted into a page. Using BrowserCMS we accomplished that by creating partials, and with Drupal by creating blocks. With Radiant these parts are called snippets. In our case we want to create two snippets, one for the header image and one of the medal image below the navigation menu. Radiant does not provide a mechanism out of the box to upload images, so I will add the images used for these two snippets in the images folder of the app and link to them from the snippet.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/radiant_header_image_snippet.png&quot;&gt;&lt;img src=&quot;/images/radiant_header_image_snippet.png&quot; title=&quot;Header Image Snippet Screen Shot&quot; alt=&quot;Header Image Snippet Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/radiant_medal_image_snippet.png&quot;&gt;&lt;img src=&quot;/images/radiant_medal_image_snippet.png&quot; title=&quot;Medal Image Snippet Screen Shot&quot; alt=&quot;Medal Image Snippet Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;After creating the snippets, we need to add our &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt; to get the desired theme. Radiant handles &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt; in what I think to be a peculiar way. Unlike most frameworks or CMSes, instead of adding a &lt;i&gt;.css&lt;/i&gt; file to your source code you will need to add a page that contains your &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt;. To do so, you need to first create a layout to handle how a &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt; page would be rendered, then you need to create new page that would be the child of your home page using the new layout and add to it your &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt; code.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/radiant_stylesheet_layout_screenshot.png&quot;&gt;&lt;img src=&quot;/images/radiant_stylesheet_layout_screenshot.png&quot; title=&quot;Stylesheet Layout Screen Shot&quot; alt=&quot;Stylesheet Layout Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/radiant_stylesheet_page_screenshot.png&quot;&gt;&lt;img src=&quot;/images/radiant_stylesheet_page_screenshot.png&quot; title=&quot;Stylesheet Page Screen Shot&quot; alt=&quot;Stylesheet Page Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Make sure that the slug for the page has the &lt;i&gt;.css&lt;/i&gt; extension and then link to your page in your layout.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;link&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;rel=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;/styles.css&amp;quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Radiant does not provide a menu system, so you will have to create your own snippet that will include your navigation links:&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/radiant_navigation_snippet_screenshot.png&quot;&gt;&lt;img src=&quot;/images/radiant_navigation_snippet_screenshot.png&quot; title=&quot;Navigation Snippet Screen Shot&quot; alt=&quot;Navigation Snippet Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;And then include the snippet in your layout:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;r:snippet&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;navigation&amp;quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;You can get more information about creating your navigation from the &lt;a href=&quot;http://wiki.github.com/radiant/radiant/creating-a-ul-img-based-navigation-bar&quot; title=&quot;Nav Wiki Page&quot;&gt;wiki page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So far we have created a layout, added to the layout some &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt; and a few snippets including the navigation snippet. We have also created our home page and added content to it. The result is as follows:&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/radiant_index_screenshot.png&quot;&gt;&lt;img src=&quot;/images/radiant_index_screenshot.png&quot; title=&quot;Home Page Screen Shot&quot; alt=&quot;Home Page Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;One thing worth noting is the use of the page parts. Using the &amp;#8220;extended&amp;#8221; part I am able to create in the case our demo an intro part of the page that would be included under the title of the page. Which is a cool way to have flexible means for content contributers to provide an intro or any other parts of the website.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/radiant_extended_screenshot.png&quot;&gt;&lt;img src=&quot;/images/radiant_extended_screenshot.png&quot; title=&quot;Extended Part of Page Screen Shot&quot; alt=&quot;Extended Part of Page Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;We have covered installing Radiant, creating a layout and adding pages and snippets. This concludes Day One with Radiant. Next time we will look at adding some of the available extensions and enhancing the functionality of the website.&lt;/p&gt;




</content>
 </entry>
 
 <entry>
   <title>Day Three with BrowserCMS</title>
   <link href="http://whichrubycmsshouldiuse.com/2009/12/30/day-three-with-browsercms.html"/>
   <updated>2009-12-30T00:00:00+00:00</updated>
   <id>http://whichrubycmsshouldiuse.com/2009/12/30/day-three-with-browsercms</id>
   <content type="html">&lt;p&gt;In many cases, when building a custom website for a client, the word &amp;#8220;custom&amp;#8221; is actually key because the client wants to provide functionality that is unique and not present in any of the systems available to work with (or at least so they think). In the occasion where that is actually true, you (the developer) have to create custom content to fill your needs. This is precisely what I explored on Day Three with BrowserCMS.&lt;/p&gt;
&lt;p&gt;This blog post will be short and sweet. Following the &lt;span class=&quot;caps&quot;&gt;HOWTO&lt;/span&gt; of the &lt;a href=&quot;http://www.browsercms.org/doc/guides/html/developer_guide.html&quot; title=&quot;Developer Guide Page Link&quot;&gt;Developer Guide page&lt;/a&gt; is straight forward. Creating a custom content type follows the same principles of creating new content with any regular Rails App. Using a keyword or two in the generation process is all it takes to integrate your new model with BrowserCMS&amp;#8217;s content.&lt;/p&gt;
&lt;p&gt;The only caveat of this approach is that it involves what some people will call &amp;#8220;coding&amp;#8221;. Many &amp;#8220;site admins&amp;#8221; like using a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; because of the ability to do pretty much everything from an administration panel without having to write any piece of code. That is why most of the CMSes available are &amp;#8220;user friendly&amp;#8221; and geared towards designers (basically, people with no programming experience), which also make them a nightmare for developers who are trying to extend the CMS&amp;#8217;s capability and add new functionality. Make no mistake, BrowserCMS is not one of those systems.&lt;/p&gt;
&lt;p&gt;Even though the BrowserCMS Documentation says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;BrowserCMS is a general purpose, open source Web Content Management System (&lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;), written in Ruby on Rails. It is designed to support three distinct groups of people:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;1. Non-technical web editors who want a humane system to manage their site, without needing to understand what &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; or even Rails is.&lt;br /&gt;
2. Designers who want to create large and elegantly designed websites with no artificial constraints by the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;.&lt;br /&gt;
3. Developers who want to add a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; into their Rails projects, or create &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; driven websites for their clients.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I would consider BrowserCMS more suitable for the third type of person mentioned in the above quote.&lt;/p&gt;
&lt;p&gt;What does this mean? The answer was well put by William Wallace saying:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;They may take our lives, but they&amp;#8217;ll never take our &lt;span class=&quot;caps&quot;&gt;FREEDOM&lt;/span&gt;!&lt;br /&gt;
&lt;a href=&quot;http://tvtropes.org/pmwiki/pmwiki.php/Main/Braveheart&quot;&gt;&lt;img src=&quot;/images/braveheart.jpg&quot; title=&quot;Braveheart Movie Poster&quot; alt=&quot;Braveheart Movie Poster&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Basically, this method of creating custom content gives the developer all the freedom he enjoys developing a regular RoR application. There is little need for learning new &lt;i&gt;hooks&lt;/i&gt; or &lt;i&gt;magic methods&lt;/i&gt; and &lt;i&gt;tricks&lt;/i&gt; to be able to extend a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; or add new behavior. This finally provides a way for a consultant like me who is asked to develop a site using a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; to actually be charging for time spent doing actual work, actual programming instead of &lt;i&gt;arm wrestling&lt;/i&gt; with a system.&lt;/p&gt;
&lt;p&gt;There is still a case to be made for something like &lt;a href=&quot;http://drupal.org/project/cck&quot; title=&quot;Drupal CCK Module Link&quot;&gt;Drupal&amp;#8217;s &lt;span class=&quot;caps&quot;&gt;CCK&lt;/span&gt; Module&lt;/a&gt; which provides an interface to create custom content from the browser without delving into coding. But in my opinion you will still be bound by the module&amp;#8217;s limitations and at best you can get into &lt;i&gt;hacking&lt;/i&gt; or &lt;i&gt;monkey patching&lt;/i&gt;, which in my experience has been the worst thing I have done as a web developer.&lt;/p&gt;
&lt;p&gt;What BrowserCMS offers is the ability to develop &lt;i&gt;The Rails Way&lt;/i&gt; while still providing your users with the interaction and usability of the typical &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;. With that note, our little experiment with BrowserCMS comes to an end. Next time I will take look at another Ruby &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Day Two with BrowserCMS</title>
   <link href="http://whichrubycmsshouldiuse.com/2009/12/29/day-two-with-browsercms.html"/>
   <updated>2009-12-29T00:00:00+00:00</updated>
   <id>http://whichrubycmsshouldiuse.com/2009/12/29/day-two-with-browsercms</id>
   <content type="html">&lt;p&gt;Now that we have explored some of the &amp;#8220;out of the box&amp;#8221; functionality of BrowserCMS and modified the theme, it is time to extend its functionality through the use of modules. If you are familiar with Drupal, you are used to downloading the source code of a module to one of the folders where Drupal looks for them and then installing it through the admin menu. With BrowserCMS the process is a bit different. The modules I will be using today are the  &lt;a href=&quot;http://github.com/browsermedia/bcms_event&quot; title=&quot;BrowserCMS Event Module Link&quot;&gt;Event Module&lt;/a&gt; and the &lt;a href=&quot;http://github.com/browsermedia/bcms_event_registration&quot; title=&quot;BrowserCMS Event Registration Module Link&quot;&gt;Event Registration Module&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Installing a BrowserCMS module requires the following steps (check the &lt;a href=&quot;http://www.browsercms.org/doc/guides/html/installing_modules.html&quot; title=&quot;BrowserCMS Documentation Site Link&quot;&gt;documentation&lt;/a&gt; site for more info):&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Downloading the source code&lt;/li&gt;
	&lt;li&gt;Getting the Gem installed&lt;/li&gt;
	&lt;li&gt;Telling BrowserCMS to use that Gem&lt;/li&gt;
	&lt;li&gt;Pulling the module specific code into your project (like migrations)&lt;/li&gt;
	&lt;li&gt;Running migrations&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Once you have completed the instructions and installed the module, you can navigate to the content library of your project and you will see a new content type added, in this case called &amp;#8220;Event&amp;#8221;:&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/bcms_event_type_screenshot.png&quot;&gt;&lt;img src=&quot;/images/bcms_event_type_screenshot.png&quot; title=&quot;Event Type Screen Shot&quot; alt=&quot;Event Type Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;And new portlets:&lt;/p&gt;
&lt;div class=&quot;screenshot-wide&quot;&gt;&lt;a href=&quot;/images/bcms_event_portlet_screenshot.png&quot;&gt;&lt;img src=&quot;/images/bcms_event_portlet_screenshot.png&quot; title=&quot;Event Portlets Screen Shot&quot; alt=&quot;Event Portlets Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;And new category types:&lt;/p&gt;
&lt;div class=&quot;screenshot-wide&quot;&gt;&lt;a href=&quot;/images/bcms_event_category_screenshot.png&quot;&gt;&lt;img src=&quot;/images/bcms_event_category_screenshot.png&quot; title=&quot;Event Category Type Screen Shot&quot; alt=&quot;Event Category Type Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Adding a new event is just like adding any new content. Each content type of course requires its specific set of fields. The event module comes with a page that contains both portlets available. This page shows the list of events created, grouped by the month, and if you click on one of the events it displays the details of that event on the same page.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/bcms_events_list_screenshot.png&quot;&gt;&lt;img src=&quot;/images/bcms_events_list_screenshot.png&quot; title=&quot;Events List Screen Shot&quot; alt=&quot;Events List Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/bcms_event_details_screenshot.png&quot;&gt;&lt;img src=&quot;/images/bcms_event_details_screenshot.png&quot; title=&quot;Event Details Screen Shot&quot; alt=&quot;Event Details Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;One thing to note is that the date fields in the form will show a calendar that pops up, even though there was no indication of it on the page.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/bcms_event_form_screenshot.png&quot;&gt;&lt;img src=&quot;/images/bcms_event_form_screenshot.png&quot; title=&quot;Event Form Screen Shot&quot; alt=&quot;Event Form Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/bcms_event_form_with_calendar_screenshot.png&quot;&gt;&lt;img src=&quot;/images/bcms_event_form_with_calendar_screenshot.png&quot; title=&quot;Event Form With Calendar Screen Shot&quot; alt=&quot;Event Form With Calendar Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;It is disappointing though that the event content type does not come with the flexibility of adding a time of an event. If you are building a conference website, you would want to provide the time of each session. Another limiting factor is the lack of ability to add or remove or edit fields belonging to a content type. For example, in the case you want to add a time field to the event content type I did not find a way to accomplish that. It will be interesting to see what sort of mechanism is available to build custom content and to configure modules.&lt;/p&gt;
&lt;p&gt;After adding the Event Registration module not much changed in what was available for us to work with. The only added functionality was the ability for a user with &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; permissions to a new registrations via the &amp;#8220;add content form&amp;#8221;. The form was not available as a portlet to include in a public page. This is probably because of the fact that the modules are still young and not fully developed yet.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/bcms_event_registration_form.png&quot;&gt;&lt;img src=&quot;/images/bcms_event_registration_form.png&quot; title=&quot;Event Registration Form Screen Shot&quot; alt=&quot;Event Registration Form Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Until I looked around a bit and found that you can add a registration portlet. You will have to add a registration portlet for each event you create. Since the documentation is basically non-existent at this point, I had to dig around to be able to find it. Hopefully the documentation will be expanded soon. So creating a registration portlet for an event is pretty straight forward because the code is already populated for you, all you have to do is just choose the event it corresponds to.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/bcms_event_registration_portlet_screenshot.png&quot;&gt;&lt;img src=&quot;/images/bcms_event_registration_portlet_screenshot.png&quot; title=&quot;Event Registration Portlet Form Screen Shot&quot; alt=&quot;Event Registration Portlet Form Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Once you create your event registration portlet, add a new page where the portlet will be added. Then use the path to the page for the &amp;#8220;Registration &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt;&amp;#8221; field of the event. You will have to edit the &amp;#8220;Event Details&amp;#8221; portlet and change the way it displays the &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt; to use an anchor tag:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;&lt;/span&gt;Registration Url:&lt;span class=&quot;nt&quot;&gt;&amp;lt;/b&amp;gt;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;vi&quot;&gt;@event&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;registration_url&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;vi&quot;&gt;@event&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;registration_url&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Once a user clicks on the link they will be redirected to the page with the form. There the user can fill the form and register for the specific event. For the purposes of this demo I left the redirect path for the form to be the same page as the form, you might want to create a new page with some sort of feedback and use it for the &amp;#8220;Success url&amp;#8221; field.&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/bcms_registration_page_screenshot.png&quot;&gt;&lt;img src=&quot;/images/bcms_registration_page_screenshot.png&quot; title=&quot;Event Registration Page Screen Shot&quot; alt=&quot;Event Registration Page Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The result of the registration can be shown on the admin side under &amp;#8220;Event Registration&amp;#8221; in the content library.&lt;/p&gt;
&lt;div class=&quot;screenshot-wide&quot;&gt;&lt;a href=&quot;/images/bcms_registration_result_screenshot.png&quot;&gt;&lt;img src=&quot;/images/bcms_registration_result_screenshot.png&quot; title=&quot;Event Registration Result Screen Shot&quot; alt=&quot;Event Registration Result Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;After looking into these couple of modules and examining the list of modules available at the &lt;a href=&quot;http://github.com/browsermedia/&quot; title=&quot;BrowserMedia Github Repo Link&quot;&gt;BrowserMedia Public Repo&lt;/a&gt;, I can only say that the ecosystem is young and still requires a lot of development to reach a stage where it&amp;#8217;s mature enough to provide most the common functionalities needed these days. But if you have worked with Rails you know how easy it is to develop in this framework, which means that any new functionality can be added without much hassle. Extending a module can be done as simply as adding a file to the lib folder of your app with the required code.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/views&quot; title=&quot;Drupal Views Module Link&quot;&gt;Views&lt;/a&gt; is one of the most powerful module available to Drupal users. Using portlets we saw how easy it is to get a similar functionality, the &amp;#8220;Event List&amp;#8221; portlet is a good example:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;cp&quot;&gt;&amp;lt;%&lt;/span&gt; &lt;span class=&quot;vi&quot;&gt;@events&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;group_by&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;starts_on&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;year&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sort_by&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:first&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reverse&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;year&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;events_grouped_by_year&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;c&quot;&gt;&amp;lt;!-- &lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;year&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;c&quot;&gt; --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;cp&quot;&gt;&amp;lt;%&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;events_grouped_by_year&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;group_by&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;starts_on&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;month&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sort_by&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:first&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reverse&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;month&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;events_grouped_by_month&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;b&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;month&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;MONTHNAMES&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;month&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;/b&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;cp&quot;&gt;&amp;lt;%&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;event&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;events_grouped_by_month&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sort_by&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:starts_on&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reverse&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;event_&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;event&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;nt&quot;&gt;&amp;lt;span&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;event_starts_on&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;b&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;starts_on&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;to_s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:long&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;nt&quot;&gt;&amp;lt;br/&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;link_to&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;&amp;lt;b&amp;gt;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;lt;/b&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;event_path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;route_params&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;br/&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;cp&quot;&gt;&amp;lt;%&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;unless&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;blank?&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;-%&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;simple_format&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;cp&quot;&gt;&amp;lt;%&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;cp&quot;&gt;&amp;lt;%&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;cp&quot;&gt;&amp;lt;%&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;cp&quot;&gt;&amp;lt;%&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;As a conclusion to Day Two with BrowserCMS, I can say that the BrowserCMS module world still needs some time for development in the way of providing both functionality and documentation. But once that is available, there will be little that this &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; can not provide. Next time we will look into adding custom content.&lt;/p&gt;



</content>
 </entry>
 
 <entry>
   <title>Day One with BrowserCMS</title>
   <link href="http://whichrubycmsshouldiuse.com/2009/12/28/day-one-with-browsercms.html"/>
   <updated>2009-12-28T00:00:00+00:00</updated>
   <id>http://whichrubycmsshouldiuse.com/2009/12/28/day-one-with-browsercms</id>
   <content type="html">&lt;p&gt;For the first Ruby &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; I decided to try out BrowserCMS. The home page for this &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; can be found at &lt;a href=&quot;http://www.browsercms.org/&quot; title=&quot;BrowserCMS Home Page&quot;&gt;BrowserCMS.org&lt;/a&gt; and that is where you can find all the links you need for the project such as the &lt;a href=&quot;http://github.com/browsermedia/browsercms&quot; title=&quot;GitHub Repository for BrowserCMS&quot;&gt;GitHub repository&lt;/a&gt; and &lt;a href=&quot;http://www.browsercms.org/doc/guides/html/index.html&quot; title=&quot;Documentation Link&quot;&gt;Documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The first thing that is required is to install the gem, using the following:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;sudo gem install browsercms
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Then create your Rails app using the BrowserCMS template like so:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;rails my_new_project_name -d mysql -m http://browsercms.org/templates/blank.rb
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;my_new_project_name
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;script/server
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Once that is done, navigate to &lt;a href=&quot;http://localhost:3000/&quot;&gt;http://localhost:3000/&lt;/a&gt; using your favorite browser and you should see the following:&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/bcms_index_screenshot.png&quot;&gt;&lt;img src=&quot;/images/bcms_index_screenshot.png&quot; title=&quot;Screen Shot of Default Index Page&quot; alt=&quot;Screen Shot of Default Index Page&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;To start editing got to the admin login page at &lt;a href=&quot;http://localhost:3000/cms/login&quot;&gt;http://localhost:3000/cms/login&lt;/a&gt; which looks like the image below and enter the default admin username/password which are cmsadmin/cmsadmin&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/bcms_admin_login_screenshot.png&quot;&gt;&lt;img src=&quot;/images/bcms_admin_login_screenshot.png&quot; title=&quot;Screen Shot of Admin Login Page&quot; alt=&quot;Screen Shot of Admin Login Page&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;After signing in successfully you will notice the admin panel appear at the top of the page.&lt;/p&gt;
&lt;div class=&quot;screenshot-wide&quot;&gt;&lt;a href=&quot;/images/bcms_admin_panel_screenshot.png&quot;&gt;&lt;img src=&quot;/images/bcms_admin_panel_screenshot.png&quot; title=&quot;Admin Panel Screen Shot&quot; alt=&quot;Admin Panel Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;You will notice that the first thing this &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; provides you are two links. The first one is to edit the default template and the second one to create a new template. This means that you can start creating your site&amp;#8217;s layout immediately. Most projects I have worked on that used a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; were projects where we had to port an existing base. What that means is that the first step towards the migration, before adding any new functionality to make use of the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;, is to take the existing pages or code and recreate them under the new system. The major part of it usually evolves around the layout and the theme. Which is where we will start for this demo.&lt;/p&gt;
&lt;p&gt;As I mentioned in the introduction post, I will be building a demo site based on my latest project using Drupal. In that project I resorted to creating a block for a header image to help the content editors change the image without much problem or digging around in code. BrowserCMS provides us with the ability to create page partials, which will substitute for Drupal&amp;#8217;s blocks. Heading over to &lt;a href=&quot;http://localhost:3000/cms/page_partials&quot;&gt;http://localhost:3000/cms/page_partials&lt;/a&gt; will show us a list of all available partials. To start with there will not be any available. The first step is to add one by clicking on the &amp;#8220;Add&amp;#8221; button and then provide the following information:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Name&lt;/li&gt;
	&lt;li&gt;Format (default: html)&lt;/li&gt;
	&lt;li&gt;Handler (default: erb)&lt;/li&gt;
	&lt;li&gt;Body&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now that we have created our header partial, we need to insert it into our template. Go to &lt;a href=&quot;http://localhost:3000/cms/page_templates/&quot;&gt;http://localhost:3000/cms/page_templates/&lt;/a&gt; for the list of available templates. Unlike the partials, templates already comes with a default one called &amp;#8220;Default&amp;#8221; (d&amp;#8217;oh!). You can choose to create a new one, and just like the page partials provide the following information:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Name&lt;/li&gt;
	&lt;li&gt;Format (default: html)&lt;/li&gt;
	&lt;li&gt;Handler (default: erb)&lt;/li&gt;
	&lt;li&gt;Body&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What&amp;#8217;s cool about it is that you get a default body already filled in and all you have to do is make the appropriate changes:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;xmlns=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;xml:lang=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;en&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;lang=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;en&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;http-equiv=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Content-Type&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;text/html;charset=utf-8&amp;quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;page_title&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;yield&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:html_head&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cms_toolbar&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;container&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:main&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;In our case we will edit the default template to match our previously developed template for Drupal. After re-ordering a couple of things and adding missing divs, the template looks like this:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;xmlns=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;xml:lang=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;en&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;lang=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;en&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;http-equiv=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Content-Type&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;text/html;charset=utf-8&amp;quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;page_title&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;yield&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:html_head&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;stylesheet_link_tag&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;nvc/vet10.css&amp;quot;&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;  
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cms_toolbar&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;top&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;#content&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Skip to content&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;wrapper&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;header&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:partial&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;/partials/header_image&amp;quot;&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

			&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;aside&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;nav_left&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
					&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render_menu&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
					&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:partial&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;/partials/medal_image&amp;quot;&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- #aside --&amp;gt;&lt;/span&gt;

			&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;content&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;intro&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
					&lt;span class=&quot;nt&quot;&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;vi&quot;&gt;@page_title&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- #intro --&amp;gt;&lt;/span&gt;

				&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;content_main&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
					&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;container&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:main&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- #content_main --&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- #content --&amp;gt;&lt;/span&gt;

			&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;footer&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render_menu&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Which is much simpler than the 110-line template used for Drupal. Notice this part&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;stylesheet_link_tag&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;nvc/vet10.css&amp;quot;&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;  
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;This is where I link to my custom stylesheet which is located under:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;`-public
 `-stylesheets
  `-cms
  `-nvc
   `-vet10.css 
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;The folder &amp;#8216;cms&amp;#8217; is where BrowserCMS keeps its stylesheets and this is followed anywhere BrowserCMS has copied its own specific files such as the images folder. The &amp;#8216;nvc&amp;#8217; folder is not necessary but I have chosen to use this kind of separation for this demo.&lt;/p&gt;
&lt;p&gt;Our page now looks something like this (I did not copy all the content, just a few stuff for the purposes of this demo):&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/bcms_layout_screenshot.png&quot;&gt;&lt;img src=&quot;/images/bcms_layout_screenshot.png&quot; title=&quot;Layout Screen Shot&quot; alt=&quot;Layout Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;And on the admin side:&lt;/p&gt;
&lt;div class=&quot;screenshot&quot;&gt;&lt;a href=&quot;/images/bcms_layout_screenshot_admin.png&quot;&gt;&lt;img src=&quot;/images/bcms_layout_screenshot_admin.png&quot; title=&quot;Admin Layout Screen Shot&quot; alt=&quot;Admin Layout Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Notice the icons at the top of the content:&lt;/p&gt;
&lt;div class=&quot;screenshot-wide&quot;&gt;&lt;a href=&quot;/images/bcms_content_panel.png&quot;&gt;&lt;img src=&quot;/images/bcms_content_panel.png&quot; title=&quot;Content Panel Screen Shot&quot; alt=&quot;Content Panel Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;BrowserCMS allows you to add blocks of content to a page and this content can be one of the following:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Text (can include attachments through the use of a rich text editor)&lt;/li&gt;
	&lt;li&gt;Portlet (Dynamic Portlet, Email Page Portlet, Login Portlet, Tag Cloud Portlet)&lt;/li&gt;
	&lt;li&gt;File&lt;/li&gt;
	&lt;li&gt;Image&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And once you have added a block, it is possible to re-order/edit/remove any block on the page. You also can add pre-existing blocks which is very useful because on my Drupal project the client wanted &amp;#8220;Back to top&amp;#8221; links and a horizontal line after any long content and with the way BrowserCMS handles adding blocks this becomes easier than just a copy/paste of the code.&lt;/p&gt;
&lt;div class=&quot;screenshot-wide&quot;&gt;&lt;a href=&quot;/images/bcms_back_to_top.png&quot;&gt;&lt;img src=&quot;/images/bcms_back_to_top.png&quot; title=&quot;Back To Top Screen Shot&quot; alt=&quot;Back To Top Screen Shot&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Adding images to your site is also very easy. You can do it in multiple ways: Either through the content library, adding an image block to a page or even attaching an image to a text content.&lt;/p&gt;
&lt;p&gt;One of the most tedious and annoying thing I have experienced with Drupal is upgrading its core. If your code base is under source control using &lt;span class=&quot;caps&quot;&gt;SVN&lt;/span&gt;, to update the Drupal core you must delete the existing one and insure that it is removed from the repository and then download the new version of the code and commit it. This could really become a messy affair specially because the Drupal core is huge. With BrowserCMS, on the other hand, upgrading or downgrading is very simple and easy. The gem I had installed at the beginning of the day was at version 3.0.5 which introduced an error (For more info check this &lt;a href=&quot;http://groups.google.com/group/browsercms/browse_thread/thread/26902fe84062b382&quot; title=&quot;Google Group Thread&quot;&gt;thread&lt;/a&gt;). So I had to downgrade to the previous version (3.0.4) for the fix. I was able to do it with only a couple of steps (from the wiki &lt;a href=&quot;http://wiki.github.com/browsermedia/browsercms/upgrading-a-browsercms-project&quot; title=&quot;Upgrading BrowserCMS Wiki Page&quot;&gt;page&lt;/a&gt;):&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;sudo gem install browsercms -v&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;3.0.4
&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /path/to/your/project
script/generate browser_cms
rake db:migrate
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;This pretty much concludes Day One with BrowserCMS. The basic layout is in place and we are able to crate static content. Next I will look into installing and using some of the available modules. Since the demo site I am building is a conference site, I will look into the &lt;a href=&quot;http://github.com/browsermedia/bcms_event&quot; title=&quot;Link to event module&quot;&gt;event module&lt;/a&gt; and the  &lt;a href=&quot;http://github.com/browsermedia/bcms_event_registration&quot; title=&quot;Link to event registration module&quot;&gt;event module registration&lt;/a&gt;.&lt;/p&gt;





</content>
 </entry>
 
 <entry>
   <title>Introduction</title>
   <link href="http://whichrubycmsshouldiuse.com/2009/11/23/introduction.html"/>
   <updated>2009-11-23T00:00:00+00:00</updated>
   <id>http://whichrubycmsshouldiuse.com/2009/11/23/introduction</id>
   <content type="html">&lt;p&gt;As a web developer in a consulting company, one of the most common ways to pay the bills is to pickup short projects that usually evolve around the need for an easy and quick way to produce static content. This falls under the domain of Content Management Systems ( &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; ) and the web is dominated by websites built on top of some flavor of a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;. The most common ones are blogging &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; such as WordPress.&lt;/p&gt;
&lt;p&gt;The complexity of these projects resides in many areas some of which are the custom needs of the client and the flexibility of the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;. It is difficult to design a system that is powerful enough to be able to perform all possible tasks and remain simple to allow developers to customize some of its functionality. A &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; is usually marketed as a quick and dirty way to get someone&amp;#8217;s content published without any knowledge of programming or system administrating. What this means is the fact that those systems are designed and built with a non-programmer in mind and thus a developer&amp;#8217;s task to customize such systems becomes a hard and frustrating chore.&lt;/p&gt;
&lt;p&gt;Currently, the leading &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; all come from the &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; world with WordPress championing the blogging realm, Moodle for the education sphere and Drupal, Joomla and ExpressionEngine for all other needs. The focused ones seem to do their job very well and expectedly so. The rest on the other hand are a nightmare for developers to deal with. If the project you&amp;#8217;re working on involves more than just installing and configuring a few modules, you are in for a lot of WTFs/minute and as we all know that is not a good sign. Software development can be fun and some tools allow that more than others. Developing in Ruby and working with the Ruby on Rails framework have always been enjoyable experiences which is why I have decided to finally test the Ruby &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; waters.&lt;/p&gt;
&lt;p&gt;As I mentioned before, the tools that are focused on accomplishing a particular task have mostly done a good job at it and therefore I will not be discussing things like &lt;a href=&quot;http://github.com/mojombo/jekyll&quot;&gt;Jekyll&lt;/a&gt; which this blog is built on. The focus of this project will be systems that would rival or be candidates to replace a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; like Drupal. I will be referencing Drupal in some comparisons and may use it as a reference point because of my experience developing with it, that of course does not mean that Joomla or ExpressionEngine might perform the same tasks discussed as well or even better than Drupal. I have more experience using Drupal and it is arguably the most popular &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; currently in use so I believe that it provides a good reference point for future discussions and comparisons.&lt;/p&gt;
&lt;p&gt;The entire Rails ecosystem is still relatively young and so is the Ruby &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; world. It is a growing field and I believe that it has recently reached a maturity level that is good enough for it to contend on a high level. That is why I consider this to be a good time to embark on the type of project that you will see documented on this blog. After all this talk, what is this project I speak of?&lt;/p&gt;
&lt;p&gt;The open source community prides itself on providing documentation and help of any form possible to its members. What I hope this to be is a source for people trying to work with a Ruby or Ruby on Rails &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; to get a feel for what they are getting themselves into. The idea is still developing but the early stages consist of the following:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Identify three &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; with a decent support/adoption community&lt;/li&gt;
	&lt;li&gt;Develop a small site using each of the systems (a website for a conference with some sort of user registration and social media integration)&lt;/li&gt;
	&lt;li&gt;Document the experiences&lt;/li&gt;
	&lt;li&gt;Come up with a comparison of each system using the fact that the site developed is the same and is used as a common ground for a fair evaluation of each &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;Try to identify which &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; provided the best overall and specific experience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What I hope to gain from this is some personal experience in a new avenue of web development, but also share that experience with the rest of the community. Surely I am not the only one proposing such a task but I still hope that my efforts are fruitful and able to provide a better grasp of the technologies that are available for us to use.&lt;/p&gt;</content>
 </entry>
 
 
</feed>
