14Jan2011
An example of X3CMS
Last month I launched X4ToDo, a web application developed using X3CMS. X4ToDo is a set of tools for freelancers: hierarchical todo list, time tracking, customer management, calendar, teamworking and billing.
The application provides free services and subscription services to suit the specific needs of each freelancer. To develop this application with X3 was an opportunity to explore the effectiveness of the solutions adopted and the power of the MVC engine.
Add plugins
In August of 2010 I started to develop the first prototype. For simplicity, I created the plugins to implement the required functionality. The solution of the plugins, when you need to add many plugins in the same page, in addition to perform poorly, it becomes quickly complex.
You can have several plugins that require the same data resulting in unnecessary duplication of query and database load. Furthermore, even the load order of plugins may not coincide with that of construction of the page.
Add controllers
So in early September, I decided to take another route offered by X3, I created controllers, models and dedicated views in the area where I needed. This solution was immediately successful: more efficient data management, freedom of layout and, the more interesting aspect, the pages and all the ancillary elements (menus, breadcrumbs etc. ..) are usually managed by the CMS. I just expanded the functionality of CMS.
This solution has proved particularly effective and immediate implementation. I added an helper to simplify the management of the dates and the rest came by itself.
The creation time and memory requirement of the pages are very good, even better than the pages of the public area as X3CMS performs dedicated controller instead of the generic.
Some number: for X4ToDo project I wrote thirty controller, twentyfive models and fiftysix views.
To simplify the loading of all the necessary data inside the database: creating tables, creating pages, configuration parameters and translations, the most convenient and effective solution was to load them as plugins.
As usual, the most painful was the study of the interface. I started with an interface full of elements and then, after about a month, I came to a minimal solution quite efficient.
That's all. See you